C++ Qt Main窗口在QMessageBox关闭后退出

C++ Qt Main窗口在QMessageBox关闭后退出,c++,qt,C++,Qt,我正在尝试制作一个启动时必须隐藏的小工具,因此我正在做: w.showMinimized(); w.hide(); 在main.cpp上,它以隐藏模式调用我的MainWindow,但问题是,当我调用FinishSession()时,它是从MainWindow调用的ProductDlg类上的一个函数,当然,当我从下面的QMessageBox中单击“是或否”时,它就会存在 void ProductsDlg::FinishSession() { if(Session) {

我正在尝试制作一个启动时必须隐藏的小工具,因此我正在做:

w.showMinimized();
w.hide();
在main.cpp上,它以隐藏模式调用我的MainWindow,但问题是,当我调用FinishSession()时,它是从MainWindow调用的ProductDlg类上的一个函数,当然,当我从下面的QMessageBox中单击“是或否”时,它就会存在

void ProductsDlg::FinishSession()
{
    if(Session)
    {
        if(this->isActiveWindow())
        {
            this->hide();
        }

        QMessageBox::StandardButton _finishSession = QMessageBox::question(this , "Question" , "Do you wanna Finish the Session ?" , QMessageBox::Yes | QMessageBox::No); // THIS MESSAGEBOX - IT EXISTS AFTER THIS

        if(_finishSession == QMessageBox::Yes)
        {
            Session = false;
        }
    }
    else
    {
        qDebug() << "No Session is Running";
    }
}
void ProductsDlg::FinishSession()
{
国际单项体育联合会(届会)
{
如果(此->isActiveWindow())
{
这个->隐藏();
}
QMessageBox::StandardButton _finishSession=QMessageBox::question(此,“问题”,“您想完成会话吗?”,QMessageBox::Yes | QMessageBox::No);//此MESSAGEBOX-在此之后存在
如果(_finishSession==QMessageBox::Yes)
{
会话=假;
}
}
其他的
{
qDebug()消息==WM_热键)
{
如果(msg->wParam==0)
{
如果(!pd->isVisible())
{
QRect rect=QApplication::desktop()->availableGeometry();
pd->show();
pd->setFocus();
pd->激活窗口();
pd->move(rect.width()-pd->width(),rect.height());
QPropertyAnimation*ani=新的QPropertyAnimation(pd,“pos”);
ani->setDuration(700);
ani->setStartValue(pd->pos());
ani->setEndValue(QPoint(rect.width()-pd->width(),rect.height()-pd->height());
ani->start();
}
如果(!pd->isActiveWindow()),则为else
{
pd->激活窗口();
}
如果(pd->isActiveWindow())发生异常
{
pd->hide();
}
}
else if(msg->wParam==1)
{
pd->FinishSession();
}
否则如果(msg->wParam==2)
{
如果(pd->isActiveWindow())
{
pd->hide();
}
}
其他的
{
返回false;
}
}
其他的
{
返回false;
}
}

“pd”是全局定义的,并在主窗口构造函数上初始化。

在此处找到答案:

我在main.cpp中添加了
qApp->setQuitOnLastWindowClosed(false);
,问题解决了

bool MainWindow::nativeEvent(const QByteArray &eventType , void *message , long *result)
{
    Q_UNUSED(eventType);
    Q_UNUSED(result);

    MSG * msg = static_cast<MSG*>(message);
    if(msg->message == WM_HOTKEY)
    {
        if(msg->wParam == 0)
        {
            if(!pd->isVisible())
            {
                QRect rect = QApplication::desktop()->availableGeometry();
                pd->show();
                pd->setFocus();
                pd->activateWindow();
                pd->move(rect.width() - pd->width() , rect.height());
                QPropertyAnimation *ani = new QPropertyAnimation(pd , "pos");
                ani->setDuration(700);
                ani->setStartValue(pd->pos());
                ani->setEndValue(QPoint(rect.width() - pd->width() , rect.height() - pd->height()));
                ani->start();
            }
            else if(!pd->isActiveWindow())
            {
                pd->activateWindow();
            }
            else if(pd->isActiveWindow())
            {
                pd->hide();
            }
        }

        else if(msg->wParam == 1)
        {
            pd->FinishSession();
        }

        else if(msg->wParam == 2)
        {
            if(pd->isActiveWindow())
            {
                pd->hide();
            }
        }

        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}