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

    运行显示如下:

     

  • 相关阅读:
    Centos 7安装配置NTP网络时间同步服务器
    Git忽略提交规则 .gitignore配置运维总结
    linux scp放后台执行方法
    《Linux Kernel Development》读书笔记PDF下载(2012.5.7最后更新)
    D4整体架构差不多快出来了
    c#实现IOleCommandTarget接口(原闯)
    centos7一键安装samba服务器
    R语言绘图高质量输出
    R语言与数据分析
    R语言Cairo包的使用
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10762659.html
Copyright © 2011-2022 走看看