วิธีที่ถูกต้องในการออกจากโปรแกรม Qt?


129

ฉันจะออกจากโปรแกรม Qt ได้อย่างไรเช่นเมื่อโหลดไฟล์ข้อมูลและค้นพบความเสียหายของไฟล์และผู้ใช้จำเป็นต้องออกจากแอพนี้หรือเริ่มไฟล์ข้อมูลใหม่

ฉันควร:

  1. โทร exit(EXIT_FAILURE)
  2. โทร QApplication::quit()
  3. โทร QCoreApplication::quit()

และความแตกต่างระหว่าง (2) และ (3)?

คำตอบ:


145

QApplication มาจาก QCoreApplication และจึงสืบทอดquit()ซึ่งเป็นช่องของประชาชนQCoreApplicationจึงไม่มีความแตกต่างระหว่างและQApplication::quit()QCoreApplication::quit()

ในขณะที่เราสามารถอ่านได้ในเอกสารประกอบของQCoreApplication::quit()มัน"บอกให้แอปพลิเคชันออกด้วยรหัสส่งคืน 0 (สำเร็จ)" . หากคุณต้องการออกเพราะคุณค้นพบความเสียหายของไฟล์คุณอาจไม่ต้องการออกด้วยรหัสส่งกลับศูนย์ซึ่งหมายถึงความสำเร็จดังนั้นคุณควรโทรหาQCoreApplication::exit()เพราะคุณสามารถระบุ returnCode ที่ไม่เป็นศูนย์ซึ่งตามหลักการแล้วจะระบุข้อผิดพลาด

มันเป็นสิ่งสำคัญที่จะทราบว่า"ถ้าห่วงกรณีที่ไม่ได้ทำงานฟังก์ชั่นนี้ (QCoreApplication :: ทางออก ()) ไม่ทำอะไรเลย"exit(EXIT_FAILURE)ดังนั้นในกรณีที่คุณควรจะเรียก


30

qApp.exit();คุณสามารถโทรหา ฉันมักจะใช้มันและไม่เคยมีปัญหากับมัน

หากแอปพลิเคชันของคุณเป็นแอปพลิเคชันบรรทัดคำสั่งคุณอาจต้องการส่งคืนรหัสออก มันขึ้นอยู่กับคุณอย่างสมบูรณ์ว่ารหัสคืออะไร


3
ฉันต้องทำสิ่งต่อไปนี้:qApp->exit();
Frederick Ollinger


-2

หากคุณต้องการปิดแอปพลิเคชันของคุณจาก main () คุณสามารถใช้รหัสนี้

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

โปรแกรมจะยุติหากไม่ได้ติดตั้ง OpenSSL


1
ฉันคิดว่านี่ไม่ได้รวบรวม app.exit (0) ไม่ส่งคืนค่า int if(!QSslSocket::supportsSsl()) {return 0;};ใช้ เนื่องจาก app.exec () ไม่ได้ถูกเรียกที่บรรทัดนี้ app.exit (0) ไม่ได้ทำอะไรเลยให้ดูเอกสารของ QCoreApplication :: exit (): ถ้าวงเหตุการณ์ไม่ทำงานฟังก์ชันนี้จึงไม่ทำอะไรเลย
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";

ตัวอย่าง


คำถามไม่ได้เกี่ยวกับการแยกกระบวนการใหม่
rookie coder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.