Qt 的 Lambda 捕获局部变量导致 UI 更新异常的分析与解决
1. 问题描述
在 Qt 开发中,我们通常会使用 QTimer
进行周期性 UI 更新。例如,下面的代码用于在检测游戏窗口时,在 UI 界面上显示动态变化的“正在检测游戏窗口...”的文本,每 300 毫秒更新一次。
void MainWindow::detectAndPopulateGameList()
{
ui->game_record_stackedWidget->setCurrentIndex(2);
ui->dectecting_game_label->setText(QStringLiteral("正在检测游戏窗口."));
QTimer *timer = new QTimer(this);
timer->setInterval(300);
int dotCount = 1;
connect(timer, &QTimer::timeout, this, [this, timer, &dotCount]() {
dotCount++;
if (dotCount > 6) {
dotCount = 1;
}
QString baseText = QStringLiteral("正在检测游戏窗口");
QString dots(dotCount, QChar('.'));