C++ QApplication在我关闭所有QWidget后不退出
我正在编程一个使用QWidget::exec返回值的应用程序,但似乎无法正确关闭该类(我需要显式地调用Gate::~Gate来删除该类),并且QApplication::exec永远不会退出。 大门是我申请的主要窗口C++ QApplication在我关闭所有QWidget后不退出,c++,qt5,C++,Qt5,我正在编程一个使用QWidget::exec返回值的应用程序,但似乎无法正确关闭该类(我需要显式地调用Gate::~Gate来删除该类),并且QApplication::exec永远不会退出。 大门是我申请的主要窗口 Gate::Gate(List *opciones, QWidget *parent): QDialog(parent), ui(new Ui::Gate) { ParseOption *ctmp; int retvalue,i; ui->setupU
Gate::Gate(List *opciones, QWidget *parent):
QDialog(parent),
ui(new Ui::Gate)
{
ParseOption *ctmp;
int retvalue,i;
ui->setupUi(this);
validUser = false;
setAttribute(Qt::WA_QuitOnClose);
errno = 0; // no se de donde sale el error...
[...code...]
QObject::connect(ui->closeButton,&QAbstractButton::clicked,this,&QDialog::close);
QObject::connect(ui->passwordField,&QLineEdit::textChanged,this,&hellGate::enableopenButton);
QObject::connect(ui->openButton,&QAbstractButton::clicked,this,&hellGate::certificateUser);
QObject::connect(this,&hellGate::validateUser,this,&QDialog::done);
}
当mi程序调用时:
emit validateUser(QDialog::Accepted);
然后退出,但门关闭时不要调用析构函数,我在main中调用此函数,但带有WA_QuitonClose标志的门将自动关闭:
int main(int argc, char *argv[])
{
QWidgetList list;
QApplication a(argc, argv);
Gate w(configOptions);
if(w.exec() == QDialog::Accepted) {
w.~Gate();
qDebug("enter");
} else {
qDebug("No enter");
}
list = a.topLevelWidgets();
if(!list.isEmpty()) {
for(int i = 0;i<list.size();i++) {
qDebug("window: %i",list[i]->close());
}
} else {
qDebug("ALL closed");
}
return a.exec();
}
我需要调用w.exec,当windows w(类门)关闭时,a.exec完成。
我做错了什么
p.D抱歉,如果文本很难理解,我不太懂英语。您创建了两个事件循环:
w.exec()
a.exec()
show()
,也可以根本不使用QApplication事件循环:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Gate w(configOptions);
if(w.exec() == QDialog::Accepted)
{
qDebug("enter");
}
else
{
qDebug("No enter");
}
}
创建两个事件循环:
w.exec()
a.exec()
show()
,也可以根本不使用QApplication事件循环:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Gate w(configOptions);
if(w.exec() == QDialog::Accepted)
{
qDebug("enter");
}
else
{
qDebug("No enter");
}
}
Gate是您的应用程序的主窗口吗?你能解释一下为什么需要显式调用它的析构函数吗?通常调用主窗口的show(),然后调用应用程序主窗口的appIs Gate的exec()?你能解释一下为什么需要显式调用它的析构函数吗?通常调用主窗口的show(),然后调用应用程序主窗口的appIs Gate的exec()?你能解释一下为什么需要显式调用它的析构函数吗?通常你调用主窗口的show(),然后调用app的exec()。我需要QApplication,因为Gate从QDialogthne继承,现在我用a.quit强制完成,因为我需要w.exec返回一个值。这个响应为什么a.exec永远不退出,但不知道我如何正确执行我的程序。@JVM为什么你需要
QApplication
?如果我退出QApplicationi需要QApplication,因为Gate继承自QDialogthne现在我用a.quit强制完成,因为我需要w.exec返回一个值这个响应为什么a.exec不退出从不,但是我没有办法正确地执行我的程序。@JVM为什么需要QApplication
?如果我退出QApplicationi需要QApplication,因为Gate继承自QDialogthne现在我用a.quit强制完成,因为我需要w.exec返回一个值这个响应为什么a.exec不退出从不,但是我没有办法正确地执行我的程序。@JVM为什么需要QApplication
?如果退出QApplication,程序throw:QWidget:必须在QWidget之前构造QApplication