首页 > 其他 > 详细

关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题

时间:2019-04-24 15:49:58      阅读:256      评论:0      收藏:0      [点我收藏+]

之前学习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(
1100);
pSpinBox->setValue(
1);
addWidget(pWidgetSpinBox);

运行显示如下:

 技术分享图片

关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题

原文:https://www.cnblogs.com/MakeView660/p/10762659.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!