Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QApplication在我关闭所有QWidget后不退出_C++_Qt5 - Fatal编程技术网

C++ QApplication在我关闭所有QWidget后不退出

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

我正在编程一个使用QWidget::exec返回值的应用程序,但似乎无法正确关闭该类(我需要显式地调用Gate::~Gate来删除该类),并且QApplication::exec永远不会退出。 大门是我申请的主要窗口

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