Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
timer.setSingleShot(true);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(openTimer()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::openTimer()
{
timer.setInterval(5*1000);
timer.start();
qDebug() << " now timer is start";
connect(&timer,SIGNAL(timeout()),this,SLOT(handleProc()));
}
void Dialog::handleProc()
{
qDebug() << "hello now is handleProc";
timer.stop();
}
上面的程序为何触发openTimer时会执行两次handleProc。stop不是关闭了定时器了吗?
------解决方案--------------------
我觉得是
到了5秒时候
timeout()触发的比
handleProc()早。所以触发了两次。。
只想做一次为什么不用singleShot
------解决方案--------------------
如楼上说的,时间到了第二个5秒时,还没stop timer。
想只触发一次可以用 QTimer::singleShot(5000, this, SLOT(handleProc()));