バックグラウンドでログ ファイルを読み込んで、テキストを更新しようとしています
QTextEdit
。以下はコードです。しかし、信号を送信すると、UI がフリーズします。ここでQtConcurrentで間違っていることを誰かが指摘できますか?信号をスロットに接続します
connect(this, SIGNAL(SignalUpdateLog(QString)),this,SLOT(SlotUpdateLog(QString)));
ログ ボタン イベントの更新
void on_ButtonClicked()
{
...
//Show busy dialog
QtConcurrent::run(this, &ClassA::UpdateReaderLog);
}
バックグラウンド タスク
void ClassA::UpdateReaderLog()
{
QFile file("/home/Debug.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
in.setCodec("UTF-8");
while (!file.atEnd())
{
emit SignalUpdateLog(in.readLine());
}
emit SignalUpdateLog("finishedReadingFile");
qWarning("\nRead finished");
}
else
{
//! emit signal to show failure pop up
}
}
スロット
void ClassA::SlotUpdateReaderLog(QString str)
{
if(str.contains("finishedReadingFile"))
{
qWarning("\nSetting reader screen");
SetToScreen(SCREEN__READER_LOG);
//Close the busy dialog
}
else
{
ui->textEditReaderLog->append(str);
}
}
編集: ファイルのオープンに失敗した場合に UpdateReaderLog() からポップアップを表示するシグナルを送信するように変更