0

私はこのクラスを持っています:


class CustomEdit : public QTextEdit
{
    Q_GADGET

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};


CustomEdit::CustomEdit(QWidget* parent)
    : QTextEdit(parent)
{
    connect( this, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
}


void CustomEdit::onTextChanged ()
{
    // ... do stuff
}


onTextChangedエディットコントロールにテキストを入力すると、メソッドが呼び出されることはありません。
私は何が欠けていますか?

4

3 に答える 3

1

シグナルまたはスロットを含むすべてのクラスは、宣言の先頭にQ_OBJECTを記載する必要があります。また、QObjectから(直接的または間接的に)派生する必要があります。

Q_OBJECTを使用してみてください

于 2010-06-10T05:41:17.457 に答える
1

他のいくつかの可能性:

1)信号を発信しているオブジェクトがブロックされています(QObject :: blockSignals()を参照)

2)レシーバーにはスレッドアフィニティがありません。レシーバーが作成されたスレッドオブジェクトがなくなり、レシーバーが別のスレッドに移動されない場合、イベントは処理されません(スロットは特殊なケースです)。

于 2011-08-10T20:52:06.193 に答える
1

自分のコードで解決するのに約1日かかったもう1つの可能性:

  • 信号は、スーパークラスとそのサブクラスで定義されます。connect()呼び出しはサブクラスポインターで動作していましたが、シグナルはスーパークラスコードから発行されました。解決策は、とにかく誤ってそこにあったサブクラスからシグナル宣言を削除することでした。
于 2014-03-03T18:36:39.103 に答える