2011-11-06 40 views
96

Làm cách nào để thoát khỏi Chương trình Qt, ví dụ: khi tải tệp dữ liệu và phát hiện tệp tham nhũ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?Cách đúng để thoát khỏi chương trình Qt?

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)?

Trả lời

107

QỨng dụng có nguồn gốc từ QCoreỨng dụng và do đó kế thừa quit() là một nơi công khai của 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 quit()"yêu cầu ứng dụng thoát 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 tệp tham nhũng thì có thể bạn không muốn thoát với mã trả về bằng 0 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 mã trả về khác 0, theo quy ước, cho biết 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, chức năng này (QCoreApplication :: exit()) không có gì", vì vậy trong trường hợp đó bạn nên gọi exit(EXIT_FAILURE).

27

Bạn có thể gọi qApp.exit();. Tôi 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 có thể thực sự muốn trả lại mã thoát. Nó hoàn toàn tùy thuộc vào mã của bạn.

+0

Không hoạt động trong Qt5 – YumYumYum

+1

Qt5 hoạt động này QApplication :: quit() – YumYumYum

+0

Tôi cần làm như sau: 'qApp-> exit(); ' –

1

nếu bạn cần phải đóng ứng dụng của bạn 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 không được cài đặt OpenSSL

+0

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

-2

Nếu bạn đang sử dụng Qt Jambi, điều này cần công việc:

QApplication.closeAllWindows(); 
0
//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"; 

example

+0

Sẽ là dễ đọc hơn nếu bạn sửa định dạng mã. – Shashanth

Các vấn đề liên quan