之前学习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 = , Qt::CustomizeWindowHint | Qt::WindowTitleHint);
    dialog->setWindowOpacity();
    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();
pSpinBox->setValue();
addWidget(pWidgetSpinBox);

运行显示如下:

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

  1. 在qt的QOpenGLWidget开启opengl的抗锯齿

    在QOpenGLWidget的构造函数添加下面几句代码即可 QSurfaceFormat surfaceFormat; surfaceFormat.setSamples();//多重采样 setFor ...

  2. checkbox复选框和div click事件重叠,点击div后复选框也被选中,同时改变div颜色,否则则不选中

     checkbox复选框和div click事件重叠,点击div后复选框也被选中,同时改变div颜色,否则则不选中 <!DOCTYPE html> <html lang=" ...

  3. qt Graphics View Framework(非重点)

    Graphics View 提供了一种接口,用于管理大量自定义的 2D 图形元素,并与之进行交互:还提供了用于将这些元素进行可视化显示的观察组件,并支持缩放和旋转. 说明;Graphics View ...

  4. ExtJS4.2学习(五)表格渲染与复选框

    鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-10/174.html --------------- ...

  5. Qt Examples - Boxes (在Qt场景视图中结合OpenGL渲染)

    QT自带例程Boxes使用QT Graphics View框架实现了2D图形和3D图形的混合渲染,综合性比较强,整合知识较多,值得学习. 可以使用鼠标通过以下方式控制演示中的元素: 按住鼠标左键的同时 ...

  6. pyqt5 graphics view简单使用

    Graphics View提供了一个平面,用于管理和交互大量自定义的2D图形图元,以及一个用于可视化图元的视图窗口小部件,支持缩放和旋转. 该框架包括一个事件传播架构,允许场景中图元的精确双精度交互功 ...

  7. Qt之QHeaderView添加复选框

    简述 前面分享了QTableView中如何添加复选框.本节主要介绍QTableView中的表头-QHeaderView添加复选框的功能,下面以水平表头为例,垂直表头类似! 简述 效果 QHeaderV ...

  8. Qt之QHeaderView加入复选框

    简述 前面分享了QTableView中怎样加入复选框. 本节主要介绍QTableView中的表头-QHeaderView加入复选框的功能,以下以水平表头为例.垂直表头相似! 简述 效果 QHeader ...

  9. PyQt(Python+Qt)学习随笔:复选框checkBox的tristate属性

    在Qt Designer中,tristate属性是复选框checkBox相比较于QAbstractButton多出来的唯一属性. tristate属性表示复选框是三种状态还是两种状态,如果trista ...

随机推荐

  1. yii2 配合bootstrap添加按钮

    新增一个按钮 1.bootstrap 官网:http://getbootstrap.com/ 2.bootstrap 中文官网:http://v3.bootcss.com/ 在视图文件中: <? ...

  2. Java 不变模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述不变(Immutable)模式的:一个对象的状态在对象被创建之后就不再变化,这就是所谓的不变模式. 不变模式的结构 不变模式可增强对象的健 ...

  3. PAT Basic 1008

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N ...

  4. Linux 删除用户,用户主目录

    删除用户的命令是:userdel 用户名比如我刚建立的用户是:zhyh,则命令为:userdel zhyh执行以上命令成功后利用rm -rf /home/zhyh/就可以了 也可以用:userdel ...

  5. ESP8266 NOOS SDK libat.a Functions

    at_baseCmd.o custom_infoat_baseCmd.o at_exeCmdNullat_baseCmd.o at_setupCmdEat_baseCmd.o at_exeCmdRst ...

  6. set non-stop on

    # Enable the async interface. set target-async 1 # If using the CLI, pagination breaks non-stop. set ...

  7. javaScript系列 [06]-javaScript和this

    在javaScript系列 [01]-javaScript函数基础这篇文章中我已经简单介绍了JavaScript语言在函数使用中this的指向问题,虽然篇幅不长,但其实最重要的部分已经讲清楚了,这篇文 ...

  8. Unity中调用DLL库

    DLL -- Dynamic Link Library(动态链接库文件),这里以Window平台为例. Unity支持的两种语言生成的DLL库(C++.C#),这里以C#为例,C++网上可以搜索很详细 ...

  9. PHP异步扩展Swoole笔记(1)

    安装Swoole扩展 通过pecl安装, 系统中最好已经有http2依赖, 如果是Ubuntu, 可以直接通过apt安装nghttp2, 如果是Centos或者需要自己编译, 在Github下载ngh ...

  10. C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑

    看了很多资料终于搞明白cache中absoluteExpiration,slidingExpiration这两个参数的含义. absoluteExpiration:用于设置绝对过期时间,它表示只要时间 ...