Использование QFileDialog с QWindow

Я пытаюсь реализовать приложение с OpenGL, поэтому, как показано в следующем примере, я использовал QWindow для создания контекста OpenGL.

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

В этом приложении я хочу создать диалоговое окно файла, когда я нажимаю клавишу S. Тем не мение, QFileDialog::getSaveFileName требует родителя QWidget, Документация говорит, что если 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 ответ

Да, это должно быть безопасно. Поскольку вы не распределяете память динамически, вам не нужно ничего удалять. Если вы настроите родителей, Qt самостоятельно удалит виджеты. Здесь он просто влияет на модальность и положение окна. Если вы хотите установить родителя, вы можете просто использовать "это" в вашем контексте.

Другие вопросы по тегам