信号にQMessageBox
接続されたスロットに「OK」ボタン1つでインスタンスを作成し、関数を使用して表示しましたが、ボタンを押してボックスを閉じるまでタイマーが停止しているようです。ローカルイベントループを作成してタイマーメッセージをディスパッチすることを期待していましたが、タイマーが停止しました(信号が送信されませんでした)。誰か説明できますか?PS私の英語でごめんなさい。QTimer
timeout()
exec
exec
timeout()
更新:サンプルコード:
#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;
}