1

Qt アプリで奇妙な問題が発生しています。私はQMainWindow便利に、を持っていますMainWindow

次のコードは、関数からmain()機能します。

int main(int argc, char *argv[])

{
    ..
    MainWindow mainWindow;
    mainWindow.show();
    ..
}

ただし、次の場合、MainWindow はまったく表示されません。

int main(int argc, char *argv[])
{
    AnotherClass::staticFunction();
}


class AnotherClass: public QObject {
Q_OBJECT
public:
    static void staticFunction();
}

void AnotherClass::staticFunction() {
    MainWindow mainWindow;
    mainWindow.show();
    return ;
}
4

2 に答える 2

2

ああ、悪い!これは、メインが返されず、exec ループに入ることがないためです。ただし、関数がすぐに返されたため、ウィンドウが破棄されていました。MainWindow mainWindow;私の問題をMainWindow* mainWindow = new MainWindow(); 解決するために変更:

于 2012-07-13T06:33:18.833 に答える
1

このコードでは

void AnotherClass::staticFunction() {
    MainWindow mainWindow;
    mainWindow.show();
    return ;
}

インスタンスmainWindowはクローズ後にスコープ外に}なり、破棄されます。newを使用してヒープに割り当てる必要がありますstaticFunction()

void AnotherClass::staticFunction() {
    MainWindow * mainWindow = new MainWindow;
    mainWindow->show();
    return ;
}

また、何らかの方法でポインターを追跡し、delete後でそれを取得する必要があります (おそらくスマートポインターを使用)。

もちろん、メイン イベント ループを開始するには、 QApplicationand を呼び出す必要があります。exec()

于 2012-07-13T06:34:12.370 に答える