我在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
方法返回true
表示成功。我跑了qmake,moc并且moc_ .cpp* 文件似乎是正确的。
我想知道我在哪里犯错了?
编辑我:
这是我正在处理的代码,它被剥离,所以只显示相关部分:
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
及其子级发生了变化。这可能是问题的根源。