QObject :: moveToThread:小部件无法移动到新线程

srd*_*n89 4 c++ multithreading qt5

我的IDE Qt 5.0.1,平台Linux

我有一个关于设置小部件到窗口的问题.(我的意见)

这是我的main.cpp->

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QThread cThread;

    MainWindow w;

    w.doSetup(cThread);
    w.moveToThread(&cThread);

    cThread.start();

    if(cThread.isRunning())
    {
        qDebug() << " Thread is Running...";
    }


    w.show();

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

这是doSetup()方法 - >

void MainWindow::doSetup(QThread &mainThread)
{
    QObject::connect(&mainThread, &QThread::started, this, &MainWindow::activeLoopMainC);
}
Run Code Online (Sandbox Code Playgroud)

我检查了我的信号插槽机制,它的工作原理.

插槽方法 - >

void MainWindow::activeLoopMainC()
{
    qDebug() << " Signal-Slot structure working successfully..";
    mainThreadProc((void*)(instAddr));
}
Run Code Online (Sandbox Code Playgroud)

我通过这个插槽方法从我的main.c调用一个函数.

在调试中,工作代码没有问题.但我的窗户是空白的.只有框架.

我收到一条错误消息:QObject :: moveToThread:小部件无法移动到新线程

我怎么解决这个问题?

提前感谢您的回答.

Nem*_*ric 11

你不能将小部件移动到另一个线程 - 为了保持用户界面的响应,Qt需要在主线程内完成所有GUI工作.

如果您有后台工作要做,那么将后台工作程序移动到其他线程,而不是用户界面.