我试图向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