Cách chính xác để thoát khỏi một chương trình Qt?


129

Tôi nên thoát khỏi Chương trình Qt như thế nào, ví dụ như khi tải tệp dữ liệu và phát hiện ra tệp bị hỏng và người dùng cần thoát khỏi ứng dụng này hoặc khởi tạo lại tệp dữ liệu?

Tôi có nên:

  1. gọi exit(EXIT_FAILURE)
  2. gọi QApplication::quit()
  3. gọi QCoreApplication::quit()

Và sự khác biệt giữa (2) và (3)?

Câu trả lời:


145

QApplication có nguồn gốc từ QCoreApplication và do đó thừa hưởng quit()một vị trí công khai QCoreApplication, do đó không có sự khác biệt giữa QApplication::quit()QCoreApplication::quit().

Như chúng ta có thể đọc trong tài liệu của QCoreApplication::quit()"bảo ứng dụng thoát ra với mã trả về 0 (thành công)." . Nếu bạn muốn thoát vì bạn đã phát hiện ra tham nhũng tệp thì bạn có thể không muốn thoát với mã trả về 0, điều đó có nghĩa là thành công, vì vậy bạn nên gọi QCoreApplication::exit()vì bạn có thể cung cấp returnCode khác không, theo quy ước, chỉ ra lỗi.

Điều quan trọng cần lưu ý là "nếu vòng lặp sự kiện không chạy, hàm này (QCoreApplication :: exit ()) không làm gì cả" , vì vậy trong trường hợp đó bạn nên gọi exit(EXIT_FAILURE).


30

Bạn có thể gọi qApp.exit();. Tôi luôn luôn sử dụng nó và không bao giờ có vấn đề với nó.

Nếu ứng dụng của bạn là một ứng dụng dòng lệnh, bạn thực sự có thể muốn trả về mã thoát. Nó hoàn toàn phụ thuộc vào bạn mã là gì.


3
Tôi cần phải làm như sau:qApp->exit();
Frederick Ollinger

0

Nếu bạn đang sử dụng Qt Jambi, điều này sẽ hoạt động:

QApplication.closeAllWindows();

-2

nếu bạn cần đóng ứng dụng của mình từ main (), bạn có thể sử dụng mã này

int main(int argc, char *argv[]){
QApplication app(argc, argv);
...
if(!QSslSocket::supportsSsl()) return app.exit(0);
...
return app.exec();
}

Chương trình sẽ chấm dứt nếu OpenSSL không được cài đặt


1
Tôi nghĩ rằng điều này không biên dịch. app.exit (0) không trả về int. Sử dụng if(!QSslSocket::supportsSsl()) {return 0;};. Vì app.exec () chưa được gọi ở dòng này, app.exit (0) không làm gì cả, hãy xem tài liệu của QCoreApplication :: exit (): Nếu vòng lặp sự kiện không chạy, hàm này không làm gì cả.
Sacha Guyer

-3
//How to Run App

bool ok = QProcess::startDetached("C:\\TTEC\\CozxyLogger\\CozxyLogger.exe");
qDebug() <<  "Run = " << ok;


//How to Kill App

system("taskkill /im CozxyLogger.exe /f");
qDebug() << "Close";

thí dụ


câu hỏi không phải là về việc tách rời các quy trình mới
viên tân binh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.