メソッドに非常に奇妙な問題がありQObject::connect
ます。まず、この非常に単純なコードを見てください。
class B : public QWidget {
Q_OBJECT
public:
explicit B(QWidget* parent = 0) : QWidget(parent) { }
signals:
void event();
}
class A : public QObject {
Q_OBJECT
public:
explicit A(QWidget* parent = 0) : QObject(parent) { b = new B(parent); init(); }
void init() { QObject::connect(b, SIGNAL(event()), this, SLOT(handler())); }
public slots:
void handler() { /*spit out some text*/ }
private:
B* b;
}
のオブジェクトは、 のオブジェクトから発信された信号に応答しA
ませんB
。期待通りに信号が発信されていると確信しています。成功を示すメソッドのQObject::connect
戻り値。qmake、moctrue
を実行しましたが、moc_ .cpp* ファイルは正しいようです。
どこで間違えたのだろうか?
編集I:
ここに私が取り組んでいるコードがあります。関連する部分だけが表示されるように削除されています:
class ListController : public QObject {
Q_OBJECT
public:
explicit ListController(Model* model, QWidget* parent = 0) : QObject(parent) { compositeView = new CompositeView(parent); initConnections(); }
void initConnections() { QObject::connect(compositeView->getListView(), SIGNAL(event()), this, SLOT(handler())); }
public slots:
void handler() { qDebug()<<"signal is received ..."; }
private:
CompositeView* view;
};
class CompositeView: public QGroupBox {
Q_OBJECT
public:
explicit CompositeView(QWidget* parent = 0) : QGroupBox(parent) { listView = new ListView(this); }
ListView* getListView() const { return listView; }
private:
ListView* listView;
};
class ListView : public QListWidget {
Q_OBJECT
public:
explicit ListView(QWidget* parent = 0) : QListWidget(parent) { }
protected:
void dropEvent(QDropEvent *event) { emit signal(); }
signals:
void signal();
};
自分自身を親として渡し、適切なオブジェクトを提供するサブクラス内に新しいListController
オブジェクトを作成します。QWidget
Model
編集Ⅱ
オブジェクトをメイン ウィジェットに返しListController
ます。CompositeView
メイン ウィジェットは、複合ビューをそのレイアウトに追加します。この時点で、CompositeView
とその子の親が変更されます。これが問題の原因である可能性があります。