QDockWidget中插入QOpenGLWidget导致resize不可用

qdw的大小由其插入控件大小决定,但为什么插入的qow无法调整大小?

img

img


其初始大小无法调整只能通过拖拽实现放大缩小
用resize没有效果,但是如果不把他放到浮动窗口上而放到主窗口上就没有问题,这是什么原因?

如果初始大小没有自动设置,建议设置最小尺寸, qdw->setMinimumSize(QSize(800, 600));

#include <QApplication>
#include <QDockWidget>
#include <QOpenGLWidget>
#include <QMainWindow>
#include <QMdiArea>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QMainWindow *mainWin = new QMainWindow;
    QDockWidget *dockWidget = new QDockWidget(mainWin);
    QOpenGLWidget *glWidget = new QOpenGLWidget(dockWidget);
    glWidget->setMinimumSize(QSize(400, 400));
    dockWidget->setWidget(glWidget);
    mainWin->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
    QMdiArea *mdiArea = new QMdiArea(mainWin);
    mainWin->setCentralWidget(mdiArea);
    mainWin->show();
    return app.exec();
}

int main(int argc, char *argv[])
{
//需要设置共享上下文不然停靠窗体从正常到浮动后QOpenGLWidget窗体会失效
#if (QT_VERSION > QT_VERSION_CHECK(5,4,0))
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
#endif
QApplication a(argc, argv);
...
}

使用dock 控件需要注意上下文切换,
mian函数追加
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
不切换上下文你调用一些函数状态也会有问题。

Enables resource sharing between the OpenGL contexts used by classes like QOpenGLWidget and QQuickWidget. This allows sharing OpenGL resources, like textures, between QOpenGLWidget instances that belong to different top-level windows. This attribute must be set before QGuiApplication is constructed. This value was added in Qt 5.4.