在QWindow中使用QFileDialog

时间:2015-09-09 10:05:28

标签: c++ qt qfiledialog qwindow

我尝试用OpenGL实现一个应用程序, 因此,如下面的示例所示,我使用QWindow创建了一个OpenGL上下文。

http://doc.qt.io/qt-5/qtgui-openglwindow-example.html

在这个应用程序中,我想按S键时创建一个文件对话框。 但是,QFileDialog::getSaveFileName需要QWidget的父级。 The documentation表示如果parent为0,则对话框将以父窗口小部件为中心显示。 我想知道在这种情况下 只需将nullptr用作parent

即可

示例:

#include <QApplication>
#include <QMainWindow>
#include <QKeyEvent>
#include <QDebug>
#include <QFileDialog>
#include <QtGui/QWindow>

class DisplayWindow final : public QWindow
{
    Q_OBJECT

public:
    DisplayWindow(QWindow* parent = 0)
        : QWindow(parent)
    {
        // Setup OpenGL context
        // ...
    }

protected:
    virtual void keyPressEvent(QKeyEvent* event) override
    {
        if (event->key() == Qt::Key_S)
        {
            //                                          ???????
            QString path = QFileDialog::getSaveFileName(nullptr, "Save", "", "");
            qDebug() << path;
        }
    }

};

class MainWindow final : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0)
        : QMainWindow(parent)
    {
        displayWindow = new DisplayWindow;
        auto* container = QWidget::createWindowContainer(displayWindow, this);
        container->setMinimumSize(200, 200);
        setCentralWidget(container);
    }

private:
    DisplayWindow* displayWindow;

};

int main(int argc, char** argv)
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

#include "moc_test.cpp"

1 个答案:

答案 0 :(得分:0)

是的,它应该是安全的。由于您不动态分配内存,因此您不必删除任何内容。如果您设置父母,Qt将自行删除小部件。 在这里它只影响窗口模态和位置。 如果你想设置父母,你可以使用&#34;这个&#34;在你的背景下。