如何在Minimalegl下使用QT控件用到了QOpenGLWindow时显示标准控件?因为OpenGL是独占的
时间: 2023-07-14 09:14:16 浏览: 88
QT通过创建openglwidget类添加OpenGL窗口
在使用QOpenGLWindow时,OpenGL确实会占用整个窗口,无法直接显示标准控件。不过,你可以考虑在QOpenGLWindow的子类中绘制OpenGL场景,并在窗口中添加一个QWidget控件作为标准控件,两者重叠在一起。
具体实现可以参考以下步骤:
1. 在QOpenGLWindow的子类中重写initializeGL、resizeGL和paintGL函数,用于初始化OpenGL环境、响应窗口大小变化和绘制OpenGL场景。
2. 在QOpenGLWindow的子类中添加一个成员变量,代表标准控件,例如:
```cpp
private:
QWidget *m_widget;
```
3. 在QOpenGLWindow的子类的构造函数中创建标准控件,并设置其父控件为QOpenGLWindow,例如:
```cpp
MyOpenGLWindow::MyOpenGLWindow(QWidget *parent)
: QOpenGLWindow(parent), m_widget(new QWidget(this))
{
// 设置标准控件的位置和大小
m_widget->setGeometry(10, 10, 100, 100);
}
```
4. 在QOpenGLWindow的子类中重写resizeEvent函数,用于调整标准控件的位置和大小,例如:
```cpp
void MyOpenGLWindow::resizeEvent(QResizeEvent *event)
{
QOpenGLWindow::resizeEvent(event);
// 调整标准控件的位置和大小
m_widget->setGeometry(10, 10, 100, 100);
}
```
5. 最后,在QOpenGLWindow的子类中重写paintEvent函数,用于在OpenGL场景绘制完成后,将标准控件绘制到窗口上,例如:
```cpp
void MyOpenGLWindow::paintEvent(QPaintEvent *event)
{
QOpenGLWindow::paintEvent(event);
// 绘制OpenGL场景
makeCurrent();
glClear(GL_COLOR_BUFFER_BIT);
// ...
// 绘制标准控件
QPainter painter(this);
m_widget->render(&painter);
}
```
这样,你就可以在使用QOpenGLWindow时显示标准控件了。需要注意的是,由于标准控件是在窗口上绘制的,因此可能会有一些不同于常规窗口的绘制逻辑和响应方式,需要根据具体情况进行调整。
阅读全文