Qt C++ 自定义槽不起作用

问题描述 投票:0回答:1

我正在尝试将按钮与在名为

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

我希望有人有线索或提示! 谢谢

qt slot
1个回答
3
投票

看起来你的

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
对象。

© www.soinside.com 2019 - 2024. All rights reserved.