QtバージョンチェックとQOverloadがスコープで定義されていません

CybeX

良い一日

バックグラウンド:

私は自分のアプリケーションをDebianシステムに構築してテストデプロイする段階にありますが、いくつかの問題が発生しました

ドキュメントページで提案されているようにQOverload私のアプリケーションはQNetworkReplyを使用しています。

使用例は(ドキュメントページから):

connect(networkReply, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),
    [=](QNetworkReply::NetworkError code){ /* ... */ });

または私のアプリケーションで見つかった別の使用法:

# header
QButtonGroup *grpProtocol;
QMetaObject::Connection conProtocol

# implementation
conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
    //do some action when a radio button in a QButtonGroup is toggled
});

問題:

makeアプリケーションを呼び出すmakeと、エラーが発生します。

mainwindow.cpp: In member function ‘void MainWindow::initConnectors()’:
mainwindow.cpp:462:53: error: ‘QOverload’ was not declared in this scope
     conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
                                                     ^
mainwindow.cpp:462:79: error: expected primary-expression before ‘*’ token
     conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
                                                                               ^
mainwindow.cpp:462:80: error: expected primary-expression before ‘,’ token
     conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
                                                                                ^
mainwindow.cpp:462:82: error: expected primary-expression before ‘bool’
     conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
                                                                                  ^
Makefile:476: recipe for target 'mainwindow.o' failed

さて、これにより、いつQOverload見つかったかを確認し、ヘッダーを含めることができます。

QOverloadはにありますが、QT5.7qglobal.hでのみ導入されました。

  • QoverloadではC ++ 11を使用する必要があります

  • または、C ++ 14を使用したqOverload

問題は、Ubuntu16.04がQtバージョン5.5を使用していることです。

qtchooser -print-env
QT_SELECT="default"
QTTOOLDIR="/usr/lib/x86_64-linux-gnu/qt5/bin"
QTLIBDIR="/usr/lib/x86_64-linux-gnu"

/usr/lib/x86_64-linux-gnu/qt5/bin/qmake -v
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu

私が試したこと:

プリプロセッサディレクティブを使用してバージョンチェックを行うことを決心しました。

#if QT_VERSION <= QT_VERSION_CHECK(5, 7, 0)
    qDebug(mainclient) << "Adding connector for settings prefered connection protocol";
    conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
        // my code here which which handles events
    });
#endif

ただし、上記のエラーはmake、プリプロセッサディレクティブが含まれている場合に発生しますつまり、Qtバージョンチェックを含めても、QOverloadはスコープ外になりました。

質問:

簡単に言えば、私は何を間違えたのですか?特定のQTバージョンチェックセットを使用して、makeがこれを無視し、すべてをビルドするのはなぜですか?

可能な代替ソリューションで更新する

  1. QOverload完全に削除し、QT 5.7より前のコードに置き換えます。これにより、コードが少し大きくなり、冗長なコードになる可能性があります(可能性があります)
  2. ヘッダーファイルをアプリケーションファイルに追加し、システムのQtバージョンがQt5.7未満の場合にのみインクルードします(非常に悪い習慣と見なされます)
フロンヌ

あなたはstatic_cast置き換えるために使用することができますQOverload

connect(networkReply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),
    [=](QNetworkReply::NetworkError code){ /* ... */ });

ここから:Qt5で過負荷の信号とスロットを接続する

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インジェクターサービスがコールバックで定義されていません

分類Dev

キャッチされないエラー:Firebaseオプションでストレージバケットが定義されていません。(ウェブ)

分類Dev

オブジェクトがスコープで定義されていません

分類Dev

エクスプレスセッションはミドルウェアでは定義されていませんが、コントローラーで定義されています

分類Dev

QT QOverloadは、TravisCIのこのスコープでは宣言されていません

分類Dev

Expressサーバー内でのフェッチ-フェッチが定義されていません

分類Dev

オブジェクトがループで定義されていません

分類Dev

VisualStudioインストーラープロジェクト-ショートカットアイコンが設定されていません

分類Dev

デバッグオプションでチェックボックスが設定されていても、Visual StudioDebuggerはNullReferenceExceptionで壊れません

分類Dev

明確に定義されているのに、プロジェクトでコンストラクターが見つかりませんか?

分類Dev

TS-クラスメソッドがコールバックで定義されていません

分類Dev

バックボーンjsネストされたコレクションが定義されていません

分類Dev

GM_getValueが(インジェクションされたコードで)定義されていませんか?

分類Dev

emberjsプロジェクトにプラグインが含まれていて、ブラウザーで定義されていることを示していますが、アプリで呼び出すと定義されていません

分類Dev

ソフトウェアインストールスクリプトに「ループバックがifconfigで定義されていません」と表示されます

分類Dev

jquery ajax、バックボーン、jsonpコールバックが定義されていません

分類Dev

オブジェクトには、ユーザー定義テーブルSQLで定義されたサフィックスが含まれていません

分類Dev

jQueryisFunctionチェックエラー「関数が定義されていません」

分類Dev

生成されたタイプのインスタンスを作成できません:このオブジェクトにパラメーターなしのコンストラクターが定義されていません

分類Dev

またはプロトコルバッファのバージョン3.5.1に対してコンパイルされたツールで、インストールされているバージョンと互換性がありません

分類Dev

WPプラグインが表示されます通知:未定義のインデックス:ウィジェット「インスタンス」を作成するときにエラーが定義されていません

分類Dev

キャッチされないタイプのエラー:「コールバッククライアント」のプロパティを設定できず、$ mが定義されていません

分類Dev

グローバル名「プリフェッチ」が定義されていません

分類Dev

「オブジェクト参照がオブジェクトのインスタンスに設定されていません」を取得しました。サーバーにデプロイするとエラーが発生しますが、ローカルで実行/デバッグしても問題ありません

分類Dev

Uncaught ReferenceError:jsPDFはバージョン2.3.0およびプレーンJSで定義されていません

分類Dev

プロジェクトのエラー-キャッチされていないReferenceError:Ravenが定義されていません

分類Dev

bintray:ファイルをアップロードできません:pomファイルで定義されているMavenグループ、アーティファクト、またはバージョンが一致しません

分類Dev

B&R Automation Studio「エラー9340:プロジェクトにビジュアルコンポーネントオブジェクトが含まれていますが、バージョン定義がありません」

分類Dev

Visual Studio2017のreact / reduxプロジェクトでのブートストラップエラー「jQueryが定義されていません」

Related 関連記事

  1. 1

    インジェクターサービスがコールバックで定義されていません

  2. 2

    キャッチされないエラー:Firebaseオプションでストレージバケットが定義されていません。(ウェブ)

  3. 3

    オブジェクトがスコープで定義されていません

  4. 4

    エクスプレスセッションはミドルウェアでは定義されていませんが、コントローラーで定義されています

  5. 5

    QT QOverloadは、TravisCIのこのスコープでは宣言されていません

  6. 6

    Expressサーバー内でのフェッチ-フェッチが定義されていません

  7. 7

    オブジェクトがループで定義されていません

  8. 8

    VisualStudioインストーラープロジェクト-ショートカットアイコンが設定されていません

  9. 9

    デバッグオプションでチェックボックスが設定されていても、Visual StudioDebuggerはNullReferenceExceptionで壊れません

  10. 10

    明確に定義されているのに、プロジェクトでコンストラクターが見つかりませんか?

  11. 11

    TS-クラスメソッドがコールバックで定義されていません

  12. 12

    バックボーンjsネストされたコレクションが定義されていません

  13. 13

    GM_getValueが(インジェクションされたコードで)定義されていませんか?

  14. 14

    emberjsプロジェクトにプラグインが含まれていて、ブラウザーで定義されていることを示していますが、アプリで呼び出すと定義されていません

  15. 15

    ソフトウェアインストールスクリプトに「ループバックがifconfigで定義されていません」と表示されます

  16. 16

    jquery ajax、バックボーン、jsonpコールバックが定義されていません

  17. 17

    オブジェクトには、ユーザー定義テーブルSQLで定義されたサフィックスが含まれていません

  18. 18

    jQueryisFunctionチェックエラー「関数が定義されていません」

  19. 19

    生成されたタイプのインスタンスを作成できません:このオブジェクトにパラメーターなしのコンストラクターが定義されていません

  20. 20

    またはプロトコルバッファのバージョン3.5.1に対してコンパイルされたツールで、インストールされているバージョンと互換性がありません

  21. 21

    WPプラグインが表示されます通知:未定義のインデックス:ウィジェット「インスタンス」を作成するときにエラーが定義されていません

  22. 22

    キャッチされないタイプのエラー:「コールバッククライアント」のプロパティを設定できず、$ mが定義されていません

  23. 23

    グローバル名「プリフェッチ」が定義されていません

  24. 24

    「オブジェクト参照がオブジェクトのインスタンスに設定されていません」を取得しました。サーバーにデプロイするとエラーが発生しますが、ローカルで実行/デバッグしても問題ありません

  25. 25

    Uncaught ReferenceError:jsPDFはバージョン2.3.0およびプレーンJSで定義されていません

  26. 26

    プロジェクトのエラー-キャッチされていないReferenceError:Ravenが定義されていません

  27. 27

    bintray:ファイルをアップロードできません:pomファイルで定義されているMavenグループ、アーティファクト、またはバージョンが一致しません

  28. 28

    B&R Automation Studio「エラー9340:プロジェクトにビジュアルコンポーネントオブジェクトが含まれていますが、バージョン定義がありません」

  29. 29

    Visual Studio2017のreact / reduxプロジェクトでのブートストラップエラー「jQueryが定義されていません」

ホットタグ

アーカイブ