MyOBject的代码如下:
</pre><pre name="code" class="cpp">class MyObject:public QObject
{
Q_OBJECT
public slots:
void print1()
{
qDebug()<<QThread::currentThreadId()<<endl;
}
void print2()
{
qDebug()<<QThread::currentThreadId()<<endl;
}
};
在主线程中,创建MyObject对象object,创建QThread对象thread,将对象移动到thread,object->moveToThread(thread),thread->start()。
此后,并不意味着所有的MyObject对象都会在thread线程中执行,必须将MyObject的槽连接到信号上,由信号触发执行的函数才会在次线程中执行,直接使用object->func(...)此方法调用的函数都会在主线程中执行。另外,要想将MyObject调用moveToThread成功,此类创建时不能有父对象。
注意:MyOBject函数的几种执行方式,以信号触发的函数会在次线程中执行,不以信号触发直接调用的函数会在主线程中执行,将窗口的信号和MyObject的槽函数连接可以使用自动连接或者队列连接,都是正确的,使用直接连接,函数会就地展开,在主线程中执行。
例子还可以看:
http://blog.csdn.net/sydnash/article/details/7425947