c++ - QMessageBox 关闭后 Qt MainWindow 退出

标签 c++ qt

<分区>

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

w.showMinimized();
w.hide();

在以隐藏模式调用我的 MainWindow 的 main.cpp 上,但问题是当我调用 FinishSession() 时,它是从当然的 MainWindow 调用的类 ProductDlg 上的一个函数,只要我单击"is",它就会存在或否”来自您在下面看到的 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";
    }
}

这是来 self 调用 ProductsDlg 的 MainWindow.cpp :

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;
    }
}

'pd' 是全局定义的,并在 MainWindow 构造函数上初始化。

最佳答案

在这里找到答案:
Qt 5.1 - QMessageBox Bug? Program Exits(0) if QMessageBox is called while QDialog is hidden

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

关于c++ - QMessageBox 关闭后 Qt MainWindow 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554813/

相关文章:

c++ - 在不锁定的情况下在线程之间复制 std::vector

c++ - Qt:我应该使用哪个对象/项目来创建可点击的图标

c++ - CMake 可以使用 c++ 而不是 mpicxx 来编译我的代码吗?

c++ - 创建没有 HWND 输入参数的 D3D 设备到 MSFT CreateDevice() 函数

c++ - 处理接近大型数据集时加快 QSortFilterProxyModel 过滤

linux - Bluetooth Low Energy [4.2 及更高版本] - Linux 上 Qt 大于 20 字节的特性

c++ - 可变递归模板

c++ - QT .png 文件未显示在屏幕上

c++ - 如何知道 QPlainTextEdit 继承类中是否显示水平滚动条?

Qt Mac (Re)move "Special Characters..."编辑菜单中的操作