c++ - 最小化父级时保持 QDialog 打开?

标签 c++ qt qmainwindow qdialog

我有一个 QMainWindow 打开一个 QDialog(非模态)。当我最小化主窗口时,对话框也会关闭。我能以某种方式让它保持打开状态吗? (反过来,如 Keep QMainWindow minimized when QDialogs show() )。

我尝试过的一件事是忽略 事件,但令我惊讶的是我从未见过这样的状态。实际上,我在那里只看到了 ActivationChange (0n99)

    void CMyDialog::changeEvent(QEvent *evt)
    {
        QEvent::Type t = evt->type();
        if (t == QEvent::WindowStateChange)
        {
            evt->ignore();
            hide();
        }
        else
        {
            QDialog::changeEvent(evt);
        }
    }

Qt 中心中处理类似主题的问题: http://www.qtcentre.org/threads/24765-Intercept-minimize-window-event


这里我创建它作为成员:

QScopedPointer<MyDialog> m_navigator{new MyDialog(this)}; // this here is the main application window

它由公共(public)插槽显示:

void MyDialog::toogleNavigator()
{
   this->setVisible(!this->isVisible());
}

并且是一个QDialog派生类:

class MyDialog : public QDialog { ...

---- 编辑 2 ------

首先 Wouter 提到了它,然后是 Alexander。就像你们说的那样,如果我传递 no parent(如 Alexander 的最小示例),对话框将保持打开状态 - 与 parent 一起最小化它的 parent。我向 Wouter 道歉。

但是,在我的例子中,它不是那样工作的。所以我没有在没有检查或恶意的情况下转过 Wouter 的评论。现在我有责任找出原因。我怀疑某些实用程序类会改变对话框。找到根本原因后,我会在这里报告。

好的,这是windows标志。如果对话框是一个工具窗口,它总是被最小化,作为普通窗口它取决于父窗口。

最佳答案

尝试像父级那样在没有this(MainApplication)的情况下创建MyDialog 并且可以使用构造函数的第二个参数。

new MyDialog(0/*, ?*/);

添加它是工作代码

主窗口.cpp

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    QScopedPointer<Dialog> dialog;
};

主窗口.hpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    dialog(new Dialog(0))
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    dialog->setVisible(!dialog->isVisible());
}

关于c++ - 最小化父级时保持 QDialog 打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863434/

相关文章:

c++ - 隐藏容器的类的更好接口(interface)

c++ - 定义静态成员的默认参数

c++ - strcat() 中奇怪的返回行为

c++ - 在 C++ 中使用 sizeof 的奇怪行为

c++ - Qwt moc 问题(找不到 moc.exe)

python - 为什么我的标签在我的 QHBoxLayout 中堆叠在一起?

QToolBar位置(如何让它停留在固定位置)

c++ - Qt5 应用程序在关闭时崩溃 (QWidget::show)

c++ - Qt:所有接口(interface)的joinMulticastGroup

c++ - 单击按钮显示另一个 ui 文件