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 に答える