2017-10-09 4 views
0

私はQt 5.9を使用しています。Qt 5.9スロット名のバグ

私は2つ以上のアンダースコアで名前を付けると、特にアンダースコアスタイルのスロットを宣言する際に問題が発生しました。たとえば、void on_stop_treatment()スロットの場合、接続しなくてもQMetaObject::connectSlotsByName: No matching signal for on_stop_treatment()となります。

とにかく、私は同じメッセージを受け取っても、スロット信号メカニズムが働きます。 2番目のアンダースコアを削除するとエラーメッセージが表示されず、その仕組みが機能します。 (私もMOCファイルを削除しようとした再構築)

+1

[QMetaObject :: connectSlotsByName:一致する信号がありません](https://stackoverflow.com/questions/24355023/qmetaobjectconnectslotsbyname-no-matching-signal) – eyllanesc

+0

これはバグではありません。 Qt Designerは[connectSlotsByName](http://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName)メソッドを使用します。このメソッドは、 'on_ _ 'という形式のスロットに接続しようとします。そして、あなたのケースであなたのスロットは、それはあなたのクラス – eyllanesc

+0

を探しているしかし、私は、私はconnectSlotsByName :: QMetaObjectを取得する必要がありますあなたの答えから理解しましたからされるように、その形式になっています。QMetaObject停止に該当する信号()とではない:: connectSlotsByName:on_stop_treatment()の一致信号がありません –

答えて

3

は名前on_stop_treatmentを使用してスロットを宣言すると、Signal/Slot Automatic Connections

Qtはあなたのスロットのために、この特定の構文を検出し、かつstopに一致するようにしようとすると呼ばれるQtの機能と衝突しますstoptreatmentという名前のQObjectがあり、その名前の信号はQObjectのクラスで宣言されています。

これを達成するために、Qtは自動シグナル/スロット接続を実行するために内部でQMetaObject::connectSlotsByName(this);を使用します。

+0

この質問は重複していますので、答える必要はありません。 [QMetaObject :: connectSlotsByName:いいえ一致信号]の – eyllanesc

+0

可能な複製(https://stackoverflow.com/questions/24355023/qmetaobjectconnectslotsbyname-no-matching-signal) – eyllanesc

+1

いや、OPのように彼のスロットに名前を付けるとき、彼はこのエラーを取得する理由を尋ねますこの。 jhyの他の質問は彼の信号/スロット自動接続がなぜ彼が望むように動作しないのか尋ねる。そこここに完全OT – Antwane

関連する問題