天天看点

qt 线程接收线程 moveToThread 特性qt 线程槽函数代码示例

qt 线程槽函数

假定一个线程继承QThread,那么这个线程的槽函数接收信号启动后,是在线程里执行否,答案并不是,只有run 函数才是执行在线程中的,要让槽函数执行在线程中,必须使用qt moveToThread函数,并且要正确的使用方法,下面是正确的使用方法。

代码示例

#include <QtCore/QCoreApplication>
#include <QtCore/QObject>
#include <QtCore/QThread>
#include <QtCore/QDebug>

class Dummy:public QObject
{
    Q_OBJECT
public:
    Dummy(QObject* parent=0):QObject(parent)     {}
public slots:
    void emitsig()
    {
        emit sig();
    }
signals:
    void sig();
};

class Object:public QObject
{
    Q_OBJECT
public:
    Object(){}
public slots:
    void slot()
    {
        qDebug()<<"from thread slot:" <<QThread::currentThreadId();
    }
};



int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug()<<"main thread:"<<QThread::currentThreadId();
    QThread thread;
    Object obj;
    Dummy dummy;
    obj.moveToThread(&thread);
    QObject::connect(&dummy, SIGNAL(sig()), &obj, SLOT(slot()));
    thread.start();
    dummy.emitsig();
    return a.exec();
}
#endif
           

继续阅读