1

私は OpenGL でアプリケーションを実装しようとしているので、次の例が示すように、QWindow を使用して OpenGL コンテキストを作成しました。

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

このアプリケーションでは、S キーを押したときにファイル ダイアログを作成したいと考えています。ただし、QFileDialog::getSaveFileNameの親が必要ですQWidgetドキュメントによると、parent0 の場合、ダイアログは親ウィジェットの中央に表示されます。nullptrこの場合、単にasを使用しても問題ないのだろうか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"
4

1 に答える 1

0

ええ、安全なはずです。メモリを動的に割り当てないため、何も削除する必要はありません。親を設定すると、Qt は独自にウィジェットを削除します。ここでは、ウィンドウのモダリティと位置に影響を与えるだけです。親を設定したい場合は、コンテキストで「this」を使用できます。

于 2015-09-09T10:10:23.930 に答える