在qt文档中演示启用线程的唯一方法是继承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();
}
我想知道是否有任何方法可以使用qt线程而不从任何qt对象继承?
答案 0 :(得分:10)
您可以使用多线程而无需使用QtConcurrent :: run()继承QObject:
QFuture QtConcurrent :: run(功能函数,......)
在单独的线程中运行函数。该线程取自全局QThreadPool。请注意,该功能可能无法立即运行;该函数仅在线程可用时运行。
答案 1 :(得分:3)
QThread本身源自QObject。您需要覆盖其run方法才能使用它,因此您必须从QObject继承才能使用QThread。
为什么不想继承QObject?
答案 2 :(得分:2)
如果您不希望继承QThread,您可以创建一个继承QThread的包装器并将您的对象作为参数,例如通过一个IRunnable接口(你创建并让你的线程类继承)。