Qt多线程中调用QTimer

单独使用QThread多线程和QTimer定时器很简单,今天要利用子线程读取视频并显示,在QThread的派生类中使用QTimer,在触发QTimer的timeout()信号之后总是无法触发其槽函数,费了很大力气,终于解决,希望能对遇到同样问题的一定的帮助。
首先,创建一个简单的工程,基类选择QDialog。
其次,添加一个QThread的子类,其头文件如下:

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QtCore/QThread>
class QTimer ;
class MyThread : public QThread
{
    Q_OBJECT

public:
    MyThread();
    ~MyThread();
protected:
    void run() ;
public slots:
    void s
PyQt5中的多线程定时器可以通过使用`QTimer`类和Python的`threading`模块来实现。由于直接在GUI线程中执行长时间运行的任务可能会导致界面冻结,因此使用多线程可以避免这种情况。下面是如何在PyQt5中使用多线程定时器的基本方法: 1. 首先,创建一个`QTimer`对象,并设置其超时时间。 2. 然后,创建一个工作线程,用于在定时器超时时执行任务。 3. 使用信号与槽机制,将定时器的超时信号连接到工作线程中的槽函数,这样定时器触发时可以通知工作线程执行任务。 4. 最后,启动定时器和工作线程。 下面是一个简单的示例代码,展示了如何使用PyQt5中的多线程定时器: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton from PyQt5.QtCore import QTimer, QThread, pyqtSignal import time class Worker(QThread): change_text = pyqtSignal(str) def run(self): """线程的任务,这里是一个简单的无限循环,每隔一定时间改变窗口中的文本""" for i in range(10): time.sleep(1) # 模拟耗时操作 self.change_text.emit(str(i)) # 发射信号 class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.button = QPushButton('启动定时器', self) self.button.clicked.connect(self.startTimer) self.label = QLabel('定时器未启动') self.setCentralWidget(self.label) self.timer = QTimer(self) self.timer.setInterval(2000) # 定时器每2秒触发一次 self.timer.timeout.connect(self.updateLabel) # 定时器超时调用updateLabel def startTimer(self): if not self.timer.isActive(): self.worker = Worker() self.worker.change_text.connect(self.updateLabel) self.worker.start() def updateLabel(self, text=''): self.label.setText(text) if __name__ == '__main__': app = QApplication(sys.argv) mainWin = MainWindow() mainWin.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个`Worker`类,它继承自`QThread`并重写了`run`方法。`run`方法中包含一个无限循环,每隔一秒钟发射一个信号,该信号携带要更新的文本。`MainWindow`类中有一个定时器,每隔两秒触发一次,并调用`updateLabel`方法来更新标签的文本。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值