QT4: Bagaimana cara memulai ulang aplikasi? Setel ulang pengaturan? [duplikat]

1.) Saya ingin memulai ulang aplikasi QT4 saya. Hanya mematikan dan memulai aplikasi yang sama secara normal.

2.) Mengapa? Saya memerlukan Opsi untuk "mengatur ulang" semuanya. Memulai ulang aplikasi tampaknya merupakan cara termudah untuk melakukan ini. Masalahnya, kelasnya BANYAK dan segalanya. Saya tidak punya waktu untuk mengembalikan setiap pengaturan ke standar, setiap Kotak teks, Widget untuk dihapus... Saya Tahu memulai ulang aplikasi bukanlah cara terbaik, menurut Anda apa ada cara lain?

Terima kasih


person Revollt    schedule 26.02.2011    source sumber


Jawaban (6)


Untuk memulai ulang aplikasi, Anda dapat menggunakan startDetached setelah keluar dari proses:

#include <QApplication>
#include <QProcess>

...

// restart the app:
qApp->quit();
QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
person masoud    schedule 30.10.2011
comment
Solusi ini tidak berfungsi pada perangkat, hanya berfungsi pada emulator, tetapi tidak dapat dimulai ulang pada nokia E7 - person abhishek; 21.04.2012
comment
Saya sebenarnya tidak tahu tentang berbagai perangkat, tapi saya mengujinya di Windows dan berhasil - person masoud; 25.04.2012

1) Anda dapat menjalankan Skrip, Jadwalkan OS untuk memulai aplikasi Anda nanti.

2) Tulis kelas terpisah yang berisi semua Pengaturan aplikasi Anda. Setel ulang kapan pun diperlukan.

person MSKOnline    schedule 26.02.2011

Permintaan lucu. Cukup pesan kode keluar untuk "restart" dan lakukan sesuatu seperti (belum diuji):

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

Kemudian Anda cukup memanggil QApplication::exit(EXIT_RESTART) di mana saja dan Anda siap melakukannya. Atau gunakan skrip pembungkus untuk melakukan hal yang sama. (Pastikan dalam kedua kasus Anda menangani argumen baris perintah dengan memuaskan jika aplikasi Anda memerlukannya.)

Pendekatan yang lebih bersih adalah dengan menghubungkan semua hal yang perlu diatur ulang ke sinyal yang sama.

person Mat    schedule 26.02.2011
comment
Anda juga dapat menggunakan try-catch di sini sebagai pengganti kode pengembalian. Saat Anda merasa sudah waktunya untuk memulai ulang, berikan pengecualian yang diketahui. Keuntungannya adalah memungkinkan Anda memulai ulang bahkan dalam kondisi mogok. - person j4x; 04.03.2011
comment
Qt tidak cocok dengan pengecualian dalam kasus umum. Beberapa penggunaan aman, tetapi sejauh yang saya tahu tidak disarankan. Lihat Keamanan pengecualian Qt. - person Mat; 04.03.2011

Anda dapat menghapus kelas dan membuat kelas baru di main() di bawah QApplication yang sama

person yolo    schedule 26.02.2011

Hal yang masuk akal untuk dilakukan dalam kasus seperti ini adalah meletakkan semua hal yang membuat/menginisialisasi widget, dll., dalam satu fungsi (tentu saja, dapat memanggil sub-fungsi). Saat Anda perlu mengatur ulang semuanya, panggil saja. Bergantung pada implementasi sebenarnya, Anda mungkin perlu menghapus/membatalkan inisialisasi terlebih dahulu.

person Daggerstab    schedule 26.02.2011

Metode ini berfungsi di PyQt. Saya menulisnya untuk menghapus semua pengaturan dan memulai ulang aplikasi dengan pengaturan bersih. application_main adalah metode utama, dan clearSettings adalah slot yang menghapus pengaturan.

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
person Eike    schedule 12.03.2013