Qt中的线程无法正常工作

时间:2017-02-08 13:05:55

标签: qt

我有一个qt应用程序,主要旁边有一个主题。 单击按钮时线程启动: 在主要:

void MainWindow::on_Start_Sampling_clicked()
{  My_drawing_object1->start();}

并在线程中:

#include "my_drawing_object.h"

#include <QDebug>
#include "mainwindow.h"
#include <QTimer>
My_drawing_object::My_drawing_object(QObject *parent) : QObject(parent)
{
}

My_drawing_object::~My_drawing_object()
{
}
int timer_shot_num=0;
QTimer *timer = new QTimer;

void My_drawing_object::start()
{
    connect(timer, SIGNAL(timeout()), this, SLOT(Draw_new_set_of_Data()));
    timer->start(10);
}

void My_drawing_object::Draw_new_set_of_Data(){
    // logic sample points
    timer_shot_num++;
    if (timer_shot_num==1){
        timer->stop();
        timer_shot_num=0;
    }
....

我期待的是,对于每个按钮点击,踏板应该运行一次。但是在第一次单击时它运行一次,在第二次单击时它运行2次,在第三次单击它运行3次.... 为什么?

2 个答案:

答案 0 :(得分:1)

连续的connect操作导致事件发生的次数超过了触发信号时的事件。在完成某些操作后,您应该首先disconnect重复插槽,或者确保connect代码只运行一次(例如,在构造函数中)。我的意思是,不要将connect动作放入可重复的代码块中。

答案 1 :(得分:0)

在你的连接调用中,你也可以指定Qt :: UniqueConnection作为连接类型;这确保了相同信号和两个对象的槽之间的给定连接永远不会重复。我也同意上面的说法,最好在构造函数或其他不重复调用的位置进行连接。但是,这样做有时会带来不便或麻烦,特别是当连接由第三个类创建时,UniqueConnection选项可以很好地处理它。