我正在尝试将按钮与在名为
simu
的外部类中定义的插槽连接。槽是一个名为 startSimu()
的函数。对象 simulation
在我希望连接按钮的同一个类中实例化。下面是代码:
QPushButton *btn1 = new QPushButton("start simulation");
simu simulation;
QObject::connect(btn1, SIGNAL(clicked()), &simulation, SLOT(startSimu()));
代码编译并运行,但是当我单击按钮时没有任何反应。函数
startSimu()
如下:
void simu::startSimu() {
std::cout << "aaaa" << std::endl;
}
simu
类的标题:
#ifndef SIMU_H
#define SIMU_H
#include <QObject>
class simu : public QObject
{
Q_OBJECT
public:
simu();
double timer() {return time;}
public slots:
void startSimu();
private:
double time;
};
#endif // SIMU_H
我希望有人有线索或提示! 谢谢
看起来你的
simulation
对象在调用槽之前就被销毁了,因为你在堆栈中分配了它:
simu simulation; // Will be destroyed as the execution leave the scope.
QObject::connect(btn1, SIGNAL(clicked()), &simulation, SLOT(startSimu()));
要解决此问题,您可能需要执行以下操作:
simu *simulation = new simu; // Will be destroyed soon
QObject::connect(btn1, SIGNAL(clicked()), simulation, SLOT(startSimu()));
请不要忘记在需要时删除
simulation
对象。