「n」回連続して「一部のテキスト」を QTextBrowser に出力しようとしています。「n」は整数です。このために、タイミングのために QTimer::SingleShot を使用しました。タイムアウトがトリガーされると、FLAG が false に設定され、この「FLAG」が while ループで監視され、FLAG が false の場合に中断され、FLAG が FALSE に設定されるまでテキストが挿入されます。FLAG の初期値は true です。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
FLAG = true;
}
void MainWindow::on_pushButton_clicked()
{
ui->pushButton->setEnabled(false);
RunTheTimer();
int counter = 0;
do
{
ui->textBrowser->insertPlainText(QString("Inside While loop %1 \n").arg(counter++));
counter++;
}while(FLAG);
FLAG = true;
}
void MainWindow::RunTheTimer()
{
ui->textBrowser-> insertPlainText("Timer Started");
QTimer::singleShot(60000, this, SLOT(Update()));// One Minute
}
void MainWindow::Update()
{
ui->textBrowser-> insertPlainText("Timeout signal triggered");
ui->pushButton->setEnabled(true);
FLAG = false;
}
MainWindow::~MainWindow()
{
delete ui;
}
プッシュボタンをクリックすると、アプリケーションがハングします。デバッグ後、実行が while(1) ループに入るとタイムアウトがトリガーされず、アプリケーションは while(1) ループ内にテキストを挿入できません。なぜこの動作ですか?私は何を間違っていますか?
ありがとう。