QT在线程中创建定时器
时间: 2024-01-27 13:22:24 浏览: 87
在 Qt 中,在线程中创建定时器需要注意以下几点:
1. 定时器是属于 GUI 线程的,如果在线程中创建定时器,则需要使用信号和槽机制把定时器的信号连接到 GUI 线程中的槽函数中处理。
2. 在线程中创建定时器时,需要设置定时器的类型为 Qt::CoarseTimer,因为 Qt::PreciseTimer 类型的定时器会在纳秒级别上进行计时,会影响线程的性能。
下面是一个在线程中创建定时器的示例代码:
```cpp
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread(QObject *parent = nullptr) : QThread(parent) {}
signals:
void timeout();
protected:
void run() override
{
QTimer timer;
timer.setTimerType(Qt::CoarseTimer); // 设置定时器类型为 Qt::CoarseTimer
connect(&timer, &QTimer::timeout, this, &MyThread::timeout); // 把定时器的信号连接到线程的 timeout 信号中
timer.start(1000); // 启动定时器,每隔 1 秒触发一次 timeout 信号
exec(); // 启动线程事件循环
}
};
```
在主线程中创建 MyThread 对象,并连接它的 timeout 信号到 GUI 线程中的槽函数中处理即可。
阅读全文