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);

    运行显示如下:

     

  • 相关阅读:
    万恶之源-03-基本数据类型(int, bool, str)
    万恶之源- 02 运算符和编码
    MSDN地址,记录下来,以防以后使用
    ER图与UML图
    js清空页面控件值
    JQuery一句话实现全选/反选
    jQuery判断checkbox是否选中的3种方法
    未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件
    关于Resharper的使用经验
    24种设计模式的体验
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10762659.html
Copyright © 2011-2022 走看看