我試圖向QTextBrowser輸出「Some text」,連續「n」次。其中「n」是整數。爲此,我使用QTimer :: SingleShot進行計時。一旦超時被觸發,FLAG被設置爲假,並且當FLAG爲假時,在「循環」中監視該「標記」,並且它應該插入文本直到標記被設置爲假。 FLAG的初始值爲true。在while(1)循環中插入文本到QT中的文本編輯器
#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)循環和應用程序無法在(1)循環內插入任何文本時,超時不會被觸發。爲什麼會這樣?我究竟做錯了什麼?
謝謝。
很好的解釋,問題解決 – learner
注意'[和](){...}'可以簡單地寫成'[&] {...}'。 –
@KubaOber,感謝您的注意:) – Mike