如何连接Qt中不同对象的信号和插槽?
问题描述:
我在QT疑问C++如何连接Qt中不同对象的信号和插槽?
假设这是main.cpp中
#include "head.h"
#include "tail.h"
int main()
{
head *head_obj = new head();
tail *tail_obj = new tail();
//some code
}
这里是head.h
class head:public QWidget
{
Q_OBJECT
/* some code */
public slots:
void change_number();
};
这里是tail.h
class tail:public QWidget
{
Q_OBJECT
/* some code */
/* some code */
QPushButton *mytailbutton = new QPushButton("clickme");
//this is where i need help
connect(button,SIGNAL(clicked()),?,?);
};
现在我该如何将mytailbutton的信号clicked()连接到head class slot change_number? 我只是觉得这是不可能的。
谢谢你的帮助!
答
您连接实例的信号和插槽,而不是类。
您需要将接收器和发射器对象的地址连接在一起。
connect(button, SIGNAL(clicked()),
pointer_to_instance_of_head, SLOT(change_number()));
(假设“按钮”是一个指针)。
获取该指针是另一个问题,但除非您没有充分的理由不这样做,否则我建议在您导出的QWidget
的构造函数中构造头对象。
答
嗯,你表现出来你真的很abbriated代码假设一切就是这么简单,它应该是简单的
connect(aTailInstance->tailButon, SIGNAL(clicked()), aHeadInstance, SLOT(change_number()));
然而,随着你的代码已经在这里表明它是无法确定什么样的功能你在追求什么,并且不清楚你究竟在问什么。
您是否正在手动删除分配的内存?如果不是,那么这是一个问题。对于QObject派生类,您可以在构造函数中添加一个父对象,并在析构时释放子对象(例如,您正在添加'QPushButton'的QWidget实例)。 – 2011-05-10 16:24:06