【发布时间】:2015-04-15 14:58:47
【问题描述】:
我正在编写一个程序来启用设备上的 WLAN 驱动程序,然后搜索本地 Wi-Fi 连接。使用带有 QProcess 的命令行来打开驱动程序并执行扫描。这一切都很好;问题是我尝试在扫描发生之前更新 UI,让用户知道发生了什么。代码如下:
ui->toolButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
ui->toolButton->setText("Searching, please wait...");
// Enable WLAN drivers
QProcess process;
process.start(turn on WLAN);
process.waitForFinished();
// Get WLAN information for available networks
process.start("iwlist wlan0 scan"); // Find wireless access points
process.waitForFinished();
QString wirelessInfo = process.readAll();
简单地说,用户按下按钮开始扫描,我希望按钮在扫描开始前将文本更改为“正在搜索,请稍候...”,因为扫描需要几秒钟完成。
但是,用户界面不会在扫描开始前更新。系统只是锁定了几秒钟,然后继续程序的其余部分(这会打开一个带有 Wi-Fi 信息的单独窗口)。我尝试在按钮文本更改和扫描之间让线程休眠几秒钟,但结果是一样的。是否存在文本在扫描开始之前不会更新的原因,即使扫描是在代码中的 setText 命令之后进行的?
如果有帮助,我正在使用 Ubuntu 在 Qt Creator 中运行 Qt 4.8.4。
【问题讨论】: