6

我的 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();
}

这是 doSetup() 方法->

void MainWindow::doSetup(QThread &mainThread)
{
    QObject::connect(&mainThread, &QThread::started, this, &MainWindow::activeLoopMainC);
}

我检查了我的信号槽机制,它工作正常。

插槽方法->

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

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

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

我收到一条错误消息:QObject::moveToThread: Widgets cannot be move to a new thread

我怎么解决这个问题?

预先感谢您的回答。

4

1 回答 1

13

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

如果您有后台工作要做,则将后台工作人员移至其他线程,而不是用户界面。

于 2013-08-15T14:28:13.803 回答