【发布时间】:2014-03-23 03:20:21
【问题描述】:
我有一个有多个 UI 的 Qt 项目。我想每 20 秒检查一次 wifi 信号强度,并用信号强度值更新我所在的 UI 表单。我创建了一个带有基类 QThread 的 myThread 类并重新实现了运行。这里我有一个超时时间为 20 秒的计时器。线程在 main.cpp 类中启动。
void Thread_UpdateWifiSignal::run()
{
QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(timerHit()), Qt::DirectConnection);
timer.setInterval(20000);
timer.start(); // puts one event in the threads event queue
exec();
qDebug() << "stopping timer";
timer.stop();
}
在 timehit 时隙中,我编写了一个代码来获取 wifi 信号强度,然后使用 wifi 信号强度的更新值发出一个 SIGNAL。
void Thread_UpdateWifiSignal::timerHit()
{
QMutex mutex;
mutex.lock();
int SignalQuality = CheckWifiNetwork();
emit this->UpdatedSignalQuality(SignalQuality);
mutex.unlock();
}
int Thread_UpdateWifiSignal::CheckWifiNetwork()
{
//Code to get wifi signal strength
}
我在所有 UI 中都有一个快捷面板,其中有一个显示 wifi 图标的标签。我想将线程发出的信号连接到 UI 类中的插槽,该插槽根据 wifi 信号强度更新图标 wifi 棒。
我看到线程正在运行,但是虽然我在 UI 表单类中实例化了 myThread 类,以将发出的信号连接到插槽,但我注意到发出的信号没有连接到插槽。
我该怎么做?
【问题讨论】:
标签: multithreading qt signals-slots qthread