如果你有一个简单的QMainWindow
甚至是单QWidget
的应用,你可以将任意按钮连接到它上面的close()
插槽,它将关闭该程序。您甚至可以在没有任何编码的情况下在设计师中执行此操作:
但是,如果你有一个更复杂的结构,MainMenu
是另一个小部件的子节点,这将停止工作。在这种情况下,close
插槽仅隐藏MainMenu
(因此您只看到黑屏),但应用程序仍在运行。我想知道是否有非hacky方式终止程序而不管小部件层次结构。
调用abort
或类似方法被认为是hacky。总而言之,必须进行一些清理工作。
答案 0 :(得分:1)
只需将QPushButton::clicked()
信号连接到QCoreApplication::quit()广告位即可。这将在单击按钮时关闭应用程序。
注意:QCoreApplication
可以通过qApp
全局对象访问。
connect( myButton, SIGNAL(clicked()), qApp, SLOT(quit()) );
你在OP中提到过:
您可以将任何按钮连接到其上的关闭()插槽,它将关闭程序
请注意,这不一定是真的。只有QGuiApplication::quitOnLastWindowClosed()为true
时才会出现这种情况(默认情况下,我必须承认)。
答案 1 :(得分:0)
大致是:
QCoreApplication::exit
。它在主(GUI)线程上调用QEventLoop::exit
。它会触发顶级对象及其子级的破坏或者,如果您启动工作线程,请使用movetoThread design执行此操作。然后QThread对象的所有者只需要执行以下操作:
QThread workthread;
workthread.exit(code);
workthread.wait(time_ms);
if(workthread.isRunning())
{
workthread.terminate();
}
一般情况下,您不想使用终止。