Tag: qthread

什么是正确的方式来实现一个QThread …(例如请…)

QThread的Qt文档说从QThread创build一个类,并实现run方法。 以下是取自4.7 Qthread文档… 要创build自己的线程,创build子类QThread并重新实现run()。 例如: class MyThread : public QThread { public: void run(); }; void MyThread::run() { QTcpSocket socket; // connect QTcpSocket's signals somewhere meaningful … socket.connectToHost(hostName, portNumber); exec(); } 所以在我创build的每一个线程中,我已经完成了这个工作,对于大多数事情来说它工作得很好(我没有在我的任何对象中实现moveToThread(this),而且效果很好)。 上周我遇到了一个麻烦(设法通过在我创build我的对象的地方工作来解决这个问题),并发现了以下博客post 。 这里基本上说,子类化QThread真的不是正确的方法来做到这一点(和文档是不正确的)。 这是来自Qt开发人员,所以乍一看我感兴趣,经过进一步思考,同意他的观点。 遵循面向对象的原则,你真的只想要inheritance一个类,以进一步增强这个类…不只是直接使用类的方法…这就是为什么你实例… 比方说,我想移动一个自定义的QObject类到一个线程…什么是“正确”的方式呢? 在那个博客文章中,他说:“他有一个例子,但如果有人可以进一步向我解释它,将不胜感激! 更新: 由于这个问题得到了如此多的关注,下面是4.8文档的复制和粘贴,以“适当”的方式来实现一个QThread。 class Worker : public QObject { Q_OBJECT QThread workerThread; public slots: void doWork(const QString […]

PyQt:将信号连接到一个插槽以开始后台操作

我有以下代码执行后台操作( scan_value ),同时更新ui( progress )中的进度条。 scan_value迭代obj某个值,每当该值发生变化时都会发出一个信号( value_changed )。 由于在这里不相关的原因,我不得不把它包装在另一个线程中的对象( Scanner )。 扫描器在clickedbuttonscan时被调用。 这里是我的问题…下面的代码工作正常(即进度条按时更新)。 # I am copying only the relevant code here. def update_progress_bar(new, old): fraction = (new – start) / (stop – start) progress.setValue(fraction * 100) obj.value_changed.connect(update_progress_bar) class Scanner(QObject): def scan(self): scan_value(start, stop, step) progress.setValue(100) thread = QThread() scanner = Scanner() scanner.moveToThread(thread) thread.start() scan.clicked.connect(scanner.scan) […]

后台线程与QThread在PyQt

我有一个程序,它通过我在PyQt中编写的gui使用的无线电接口。 很明显,收音机的主要function之一就是传输数据,但是为了连续这样做,我必须循环写入,这会导致gui挂起。 由于我从来没有处理线程,我试图摆脱这些挂起使用QCoreApplication.processEvents(). 收音机需要在传输之间睡觉,所以gui仍然挂在这些睡眠持续多久。 有一个简单的方法来解决这个使用QThread? 我已经find了关于如何使用PyQt实现multithreading的教程,但是其中大部分都是关于设置服务器的,并且比我需要的要先进得多。 我真的不需要我的线程在运行时更新任何东西,我只需要启动它,让它在后台传输,然后停止。