关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题
之前学习QT Graphics View框架,除了基本的图元外,还可以通过QGraphicsProxyWidget类添加QT的基本Widget(如按钮、复选框、单选框等),常使用的场景类接口如下:
QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = ...)
为窗口小部件创建一个新的QGraphicsProxyWidget,将其添加到场景中,并返回指向代理的指针。
由于需要3D应用,我在Graphics View上开启了OpenGL渲染:
QGraphicsView view(&scene);
view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
此时,场景中显示的按钮、复选框、单选框、微调框等显示就异常了~
上图显示:按钮没有按钮轮廓,复选框和单选框不显示勾选框,微调框则不显示上下控制箭头,只有在鼠标移入widget时才会显示,感觉由于OpenGL渲染的缘故,将这些widget刷坏了~
我暂时还没有从OpenGL的角度去解释该问题(不知哪位大牛能给解决下,不胜感激!),但是程序中需要OpenGL渲染,又不能关闭它而顾此失彼。
我想的一个障眼法的方法是:将widget设置在一个QDialog上
C++ Code
1
2 3 4 5 6 7 |
QDialog *GraphicsScene::createDialogEx(const QString &windowTitle) const
{ QDialog *dialog = new QDialog(0, Qt::CustomizeWindowHint | Qt::WindowTitleHint); dialog->setWindowOpacity(0.8); dialog->setWindowTitle(windowTitle); return dialog; } |
在场景类中调用代码如下:
C++ Code
1
2 3 4 5 6 7 8 9 |
QWidget *pWidgetCheckBox = createDialogEx(tr("CheckBox"));
QCheckBox *pCheck = new QCheckBox("QCheckBox", pWidgetCheckBox); addWidget(pWidgetCheckBox); QWidget *pWidgetSpinBox = createDialogEx(tr("SpinBox")); QSpinBox *pSpinBox = new QSpinBox(pWidgetSpinBox); pSpinBox->setRange(1, 100); pSpinBox->setValue(1); addWidget(pWidgetSpinBox); |
运行显示如下:
希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯分享时的吝啬。