2

1.) QT4 アプリケーションを再起動したいと思います。通常のシャットダウンと同じアプリケーションの起動だけです。

2.) なぜ?さて、すべてを「リセット」するオプションが必要です。これを行う最も簡単な方法は、アプリケーションを再起動することです。問題は、たくさんのクラスとすべてがあることです。それらのすべての設定を標準に戻し、すべてのテキストボックス、ウィジェットをクリアする時間がありません...アプリケーションの再起動が最善の方法ではないことはわかっています。別の方法は何だと思いますか?

ありがとうございました

4

6 に答える 6

4

startDetachedプロセスを終了した後に使用できるアプリケーションを再起動するには:

#include <QApplication>
#include <QProcess>

...

// restart the app:
qApp->quit();
QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
于 2011-10-30T20:12:01.773 に答える
2

1) スクリプトを実行し、後でアプリを起動するように OS をスケジュールできます。

2) すべてのアプリケーション設定を含む別のクラスを作成します。必要に応じてリセットしてください。

于 2011-02-26T15:14:05.150 に答える
2

面白いリクエスト。「再起動」の終了コードを予約して、次のようなことを行うだけです(テストされていません):

int main(int argc, char **argv)
{
 QApplication app(argc, argv);
 ...
 int ret = app.exec();
 if (ret == EXIT_RESTART) {
   ::execve(...);
 }
 return ret;
}

次に、どこでも QApplication::exit(EXIT_RESTART) を呼び出すだけで、準備完了です。または、ラッパー スクリプトを使用して同じことを行います。(どちらの場合も、アプリがコマンド ライン引数を受け取る場合は、十分に処理できることを確認してください。)

よりクリーンなアプローチは、リセットする必要があるすべてのものを同じ信号に接続することです。

于 2011-02-26T15:20:59.593 に答える
1

クラスを削除して、同じ QApplication の下のmain()で新しいクラスを作成できます

于 2011-02-26T15:06:25.620 に答える
1

このような場合に行うべき賢明なことは、ウィジェットなどを作成/初期化するすべてのものを単一の関数に入れることです (もちろん、サブ関数を呼び出すことができます)。すべてをリセットする必要がある場合は、それを呼び出すだけです。正確な実装によっては、最初にそれらを削除/初期化解除する必要がある場合があります。

于 2011-02-26T16:25:03.253 に答える
0

このメソッドは PyQt で動作します。すべての設定を消去し、クリーンな設定でアプリケーションを再起動するために書きました。application_mainがメインのメソッドでclearSettings、設定をクリアするスロットです。

class GuiMain

    #Most of implementation missing

    def clearSettings(self):
        """Deletes all settings, and restarts the application"""
        #TODO: save changes
        setting_store = QSettings()
        setting_store.clear()
        setting_store.sync()
        QApplication.exit(GuiMain.restart_code)

    restart_code = 1000

    @staticmethod
    def application_main():
        """
        The application's main function. 
        Create application and main window and run them.
        """
        while True:
            app = QApplication(sys.argv)
            window = GuiMain()
            window.show()
            ret = app.exec_()
            if ret != GuiMain.restart_code:
                break
            del window
            del app
于 2013-03-12T20:57:34.883 に答える