QT信号&第二课内的老虎机

时间:2015-03-14 14:24:11

标签: c++ qt signals slot

我做了一个简单的程序:

哪个运行主程序 - >课程 - >第二课

让我们看一下代码:

主程序:

QApplication a(argc, argv);
testqtc w; // this one intresting i call this 'first_class'
w.show();
return a.exec();
}

在' first_class'我有:

    testqtc::testqtc(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QTimer *timer = new QTimer(this);
    bool p = connect(timer, SIGNAL(timeout()), this, SLOT(updateCaption2()));
    std::cout << p;
    timer->start(1000);

    class1 class1(this); // i call this 'second class' which run under first class
}
void testqtc::updateCaption2(){
    std::cout << "first_class" << std::endl;
}

在第二课&#39;我有:

class1::class1(QObject *parent)
    : QObject(parent)
{
    QTimer *timer = new QTimer(this);
    bool p = connect(timer, SIGNAL(timeout()), this, SLOT(updateCaption()));
    std::cout << p;
    timer->start(1000);
}
void class1::updateCaption(){
    std::cout << "second class" << std::endl;
}

输出:

11first_class
first_class
first_class (-> and only first_class per second)

很明显,第二类连接器不会启动。 函数connect返回true,但插槽没有执行。

如何在&#39; second_class&#39;中使用连接功能吗

1 个答案:

答案 0 :(得分:1)

class1实例在testqtc构造函数的堆栈上分配,这意味着它在调用超时槽之前被销毁,解决它在堆上分配它:

class1* class1_ptr = new class1 (this);