Я пытаюсь напечатать «Some text» в QTextBrowser, непрерывно для «n» времени. Где «n» - целое число. Для этого я использовал QTimer :: SingleShot для синхронизации. После срабатывания таймаута FLAG устанавливается в значение false, и этот «FLAG» контролируется во время цикла, когда ломается, когда FLAG является ложным, и он должен вставлять текст, пока FLAG не будет установлен в FALSE. Исходное значение для FLAG истинно.Вставить текст во время (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;
}
Приложение получает Hang, когда я нажимаю кнопку Pushbutton. После отладки, которую я наблюдал, таймаут не запускается после того, как выполнение введено, пока (1) цикл и приложение не могут вставлять текст внутри while (1). Почему это поведение? Что я делаю не так?
Спасибо.
Хорошее объяснение, проблема решена – learner
Обратите внимание, что '[&]() {...} 'могут быть просто записаны как '[&] {...}'. –
@KubaOber, спасибо за заметку :) – Mike