我有一个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次.... 为什么?
答案 0 :(得分:1)
连续的connect
操作导致事件发生的次数超过了触发信号时的事件。在完成某些操作后,您应该首先disconnect
重复插槽,或者确保connect
代码只运行一次(例如,在构造函数中)。我的意思是,不要将connect
动作放入可重复的代码块中。
答案 1 :(得分:0)
在你的连接调用中,你也可以指定Qt :: UniqueConnection作为连接类型;这确保了相同信号和两个对象的槽之间的给定连接永远不会重复。我也同意上面的说法,最好在构造函数或其他不重复调用的位置进行连接。但是,这样做有时会带来不便或麻烦,特别是当连接由第三个类创建时,UniqueConnection选项可以很好地处理它。