Использование 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"

0

Решение

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

0

Другие решения


По вопросам рекламы [email protected]