zoukankan      html  css  js  c++  java
  • 关于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(
    1100);
    pSpinBox->setValue(
    1);
    addWidget(pWidgetSpinBox);

    运行显示如下:

     

  • 相关阅读:
    maven POM.xml 标签详解
    Spring Boot Starter 的基本封装
    谷歌浏览器屏蔽广告的插件
    关于mysql中触发器old和new
    centos7 安装zookeeper3.4.8集群
    Flink架构、原理与部署测试
    图解Spark API
    汇编器构造
    Oracle11g CentOS7安装记录
    如何创造一门编程语言?
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10762659.html
Copyright © 2011-2022 走看看