【发布时间】:2013-02-03 19:00:10
【问题描述】:
我创建了一个QMessageBox 实例,在连接到QTimer 信号timeout() 的插槽中使用单个按钮“OK”并使用exec 函数显示它,似乎计时器暂停直到按下按钮并关闭框。我希望exec 创建本地事件循环并发送定时器消息,但是定时器被暂停(没有信号timeout() 发出)。谁能解释一下? P.S 对不起我的英语。
更新: 示例代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTimer *tm1=new QTimer(this),
*tm2=new QTimer(this);
connect(tm1,SIGNAL(timeout()),this,SLOT(tslot1()));
connect(tm2,SIGNAL(timeout()),this,SLOT(tslot2()));
tm1->start(1000);
tm2->start(1000);
}
void MainWindow::tslot1(void)
{
static int cnt;
qWarning(QString("slot 1 called %1 time(s)").arg(++cnt).toAscii().data());
}
void MainWindow::tslot2(void)
{
static int cnt;
qWarning(QString("slot 2 called %1 time(s)").arg(++cnt).toAscii().data());
if (3==cnt)
{
QMessageBox *mb=new QMessageBox(QMessageBox::Critical,tr("Error"),tr("tm2 halted !"),QMessageBox::Ok,this);
mb->exec();
}
}
MainWindow::~MainWindow()
{
delete ui;
}
【问题讨论】:
-
在答案中查看我的编辑。
标签: qt