問題タブ [qmetaobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Qt メタオブジェクト システム: 名前付きの文字列を使用してシグナルを送信する
Qt シグナル/スロット システムはうまく動作しますが、実際に役立つ機能がいくつか欠けているようです (または、少なくとも使用方法がわかりません)。多くのシグナルを持つクラスがあり、このクラスにはswitch
、変数の値に応じて適切なシグナルを発する必要がある があります。今、私はCプリプロセッサを使用してこれを解決します:
これは正しく見えません。もっとエレガントな方法があると確信しています。QMetaObject
名前付きの文字列を使用してindexOfSignal
、シグナルのQtの内部IDを取得できるメソッドがあります。この ID を使用してシグナルを発信できれば、私のコードはずっときれいになります。
によって生成されたシグナル メソッドの実装をのぞいてみたところ、シグナルmoc
ごとに異なるのは 1 桁だけのようです。
ここで、<signal_id>
は信号ごとに一意の整数です。
それで、問題は、どうすればいいemit(int signalIdx)
ですか?QMetaObject::activate
または、プライベート ヘッダーに埋もれているように見えるため、少なくとも を呼び出す機会を得ますか?
c++ - オーバーロードされた演算子で QMetaObject を呼び出す
QObject でオーバーロードされた演算子 << を呼び出そうとした人はいますか。
たとえば、私はクラスを持っています
このように呼び出そうとすると、エラーが発生します。
ErrorMessage は次のようになります: No such method Worker::operator<<(char)(char)
qt - 新しい QObject::connect 構文が機能しない
QObject::connect
信号をスロットに接続するための新しい構文を使用しています。
しかし、私はこの奇妙なエラーを受け取り、その理由がわかりません:
奇妙なことに、古い構文を使用すると、すべて正常に動作します。
また、この接続は正常に機能します。
もvoid onError(QNetworkReply::NetworkError);
ですprivate slot
。
私は何を間違っていますか?
編集:
これは動作するコードではないことに注意してください。このクラスは、問題を切り分けるためだけに作成しました。ただし、コードはコンパイルされるはずです。
myclass.h :
myclass.cpp :
私が得た唯一のエラーはここにあります:
c++ - スロットはありませんが、Qt と C++ を使用すると QMetaObject::connectSlotsByName エラーが発生します
C++ と Qt Creator でプログラミングしていますが、コードは完璧に動作します。それにもかかわらず、コードをコンパイルするときに警告が表示されるという問題があります。
以前はon_but_PrintTab_clicked()という名前のスロットがありましたが、もう存在しません。どうすればこの警告を取り除くことができますか?
c++ - Q_ARG を使用して QMetaObject::newInstance() にポインターを渡す方法
QMetaObject::newInstance メソッドを使用してオブジェクトのコンストラクターを呼び出そうとしています。以下に、使用するコンストラクターの 2 つの例を示します。1 つはポインターを使用し、もう 1 つは基本型のみを使用します。
次を使用してコンストラクター B を呼び出すことができます。
ただし、コンストラクター A の呼び出しは機能しません。
Q_ARG(B*, b_ptr) を含むいくつかのバリエーションを試しました。さらに、クラス B も QObject から継承します。
qt - QMetaObject::invokeMethod と複数の候補による曖昧さの解消
メソッドにこのようなオプションのパラメーターQMetaObject::invokeMethod
がある場合、メソッドを で呼び出すことができるかどうか疑問に思います。
私が試してみました :
しかし、出力は(もちろん)複数の候補があることを示しています:
曖昧さをなくすことは可能invokeMethod
ですmyMethod(int,bool)
か?
EDIT:「nt and
bool」ではなく、カスタムクラスの名前空間に問題があることがわかりました。私は迅速で汚い解決策を書きました。
しかし、これは非常に非常に汚いようです。この問題を処理するための良い解決策はありますか?