`
tubaluer
  • 浏览: 1440585 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

Qt中如何使用样式表QPalette以及相关注意事项

 
阅读更多

设置一个widget的背景图片/颜色,我们可以使用调色板QPalette,而设置最重要的就是setBrush()画刷。刚google搜索了一下,发现用setBrush基本都只用了它的一种方法,但实际上其有两种用法。

QPalette palette;

用法一:palette.setBrush(QPalette::Base, brush);

palette1.setBrush(QPalette::Active, QPalette::Base, brush);

上述两种方式大同小异,除去group这一参数歪,其余两个参数一模一样,其中第二个参数代表颜色角色

其主要通过枚举变量QPalette::ColorRole来定义,常用的枚举值有:

QPalete::Window,通常指窗口部件的背景色;

QPalette:WindowText,通常指窗口不见的前景色;

QPalette::Base,指文本输入窗口部件(比如QtextEdit,QLinedit)的背景色.

QPalette::Text,QPalette::Base一块使用,指文本输入窗口部件的前景色;

QPalette::Button,指按钮窗口部件的背景色;

QPalette::ButtonText,指按钮窗口部件的前景色.

(上段枚举引用自博文:http://hi.baidu.com/tpxc/blog/item/4e7c72277682ba09918f9da8.html

从上边这些枚举变量可知:针对不同的Qt控件,当我们用QPalette设置其背景/前景颜色时:需要指定不同的颜色角色参数

比如:对于QTextEdit,设置其背景时要使用QPalette::Base ; 对于QWidget则使用QPalette::Window 。如果指定错了,则这个调色板的使用会不生效!!

(我用QPalette::Button来设置一个QPushButton的背景,却一直不能生效,谁可以告诉我原因还是系统BUG?)

用法二: palette.setBrush(ptr->backgroundRole(),brush())

此时第一个参数直接取某一个窗口的颜色角色,而不是人为的去设置!用这种方式的好处在于:不用去考虑哪种控件该用哪个角色参数,这样避免出错!但是这里有一个很重要的问题需要去注意:对于QTextEdit的背景角色,按照上边所说应该是QPalette::Base这个枚举值,其value为9。 但是当我们队QTextEdit控件调用backgrounRole()返回其角色值时:却发现这个值为10.显然二者不对应,但是对于QPushButton却是对应的! 对于这一点我感到很困惑!但是却一直没找到合理的解释,只有一种可能,那就是:这是一个系统BUG !

所以上边提示我们:当用QPalette调色板来设置QTextEdit这个控件的背景颜色时:不要调用其自己的backgrounRole()来设置颜色角色,而应该自己手动设置成QPalette::Base !切记切记!!!!

===============================================================================

那转回到QGraphicsWidget体系中QTextEdit背景颜色的设置上来:

我们将一个QWidget或其子类的控件用addWidget加入到到scene场景中时,我们可以认为其做了两步:

首先:其建了一个代理item窗口,并将这个QWidget控件放到这个代理item窗口中去!

而后:它再讲这个代理item像常规那样放到scene场景中!!!

所以:当将一个QTextEdit放到scene场景中后,我们可以认为其前后有三层:最底下一层是场景所在的view,中间一层是代理item窗口,最上边一层才是真正的QTextEdit编辑框。 那么:要想让编辑框透明,看到view这一层,则不仅仅需要将QTextEdit本身设置为背景透明,而且还要将其所在的代理item窗口也设置为背景透明!

将QTextEdit设置为背景透明就用QPalette::Base为参来设置即可!而对于代理item窗口,其背景颜色角色枚举值为:QPalette::Window (这个是我挨个试出来的,毕竟代理Item窗口QGraphicsProxyWidget类没有backgroundRole()函数 )。

总结:QPalette虽然很好用,但是其中存在诸多问题,而且对于一些特殊情况:帮助文档上也没有给出说明,这些如若不注意都会出现很多问题。

分享到:
评论

相关推荐

    QPalette的简单使用工程源码.7z

    Qt提供的调色板类 QPalette 专门用于管理对话框的外观显示。QPalette 类相当于对话框或是控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个 QPalette 对象,在显示时按照它的 QPalette ...

    Qt学习笔记之QPalette调色板类

    QPalette通过获取控件或窗口的调色板对象(palette)对该控件或窗口进行色彩设置 可设置该widget不同状态的色彩...QPalette::WindowText 对窗体中的文字(比如Label中的文字进行设置,无法影响Edit QPalette::Button 

    Qt5开发及实例-CH404.rar,Qt5利用QPalette改变控件颜色的方法代码

    Qt5开发及实例,实例CH404,利用QPalette改变控件颜色的方法。本实例实现的窗体分为两部分:左边部分用于对不同主题颜色的选择,右边部分用于显示选择的颜色对窗体外观的改变。运行效果如图4.11所示。 实现步骤如下。 ...

    Qt5开发及实例-CH405.rar,Qt5实现QPalette设置时钟背景的代码

    Qt5开发及实例,实例CH405,QPalette设置时钟背景,新建一个定时器对象,初始时间显示,设置电子时钟显示的尺寸,显示转换好的字符串时间,定义的Palette类继承自QDialog类,打开“palette.h”文件,声明实例中所用到的函数...

    qt 一个有关时间线的使用代码

    qt 时间线 对初学者很有帮助 /*************************************************************************** * Copyright (C) 2009 by shiroki@www.cuteqt.com* * shiroki@cuteqt.com * * * ****************...

    QPalette QColor 窗体颜色主题案例

    展示不同 QPalette颜色角色所改变的颜色内容(QPalette::ColorRole)

    qt电子相册

    #include #include #include #include QString imageList[200];... QPalette palette;//调色板 palette.setBrush(this->backgroundRole(),QBrush(image)); this->setPalette(palette);......

    QT的贪吃蛇小游戏开发

    QPalette palet; palet.setBrush(QPalette::Background, \ QBrush(QPixmap(":/new/prefix1/img/green.jpg").scaled(580, 370))); this->setPalette(palet); //蛇头产生随机的位置和随机的方向 QTime cur = ...

    Qt扫雷代码

    用Qt写的扫雷,比较简单,可以实现 #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { this->setWindowIcon(QIcon(tr(":/images/ico.png"))); menuBar=new QMenuBar(this)...

    使用Qt实现的C++画板(包含源码,可执行exe文件)

    // 使用 pixmap,也就是把这个控件加到ui里面 ui->pixmap_label->setPixmap(*pixmap); //这里关联信号和槽 connect(ui->linecolor_r_slider,SIGNAL(valueChanged(int)),this,SLOT(linecolor_changed())); ...

    Qt 桌面数字电子钟(可拖曳)

    使用Qt制作一个简单的桌面电子钟, 电子钟大小固定, 显示当前时间(时间格式: 小时/分钟), 使用鼠标左键可拖曳电子钟, 在电子钟上右击, 会将其关闭

    C++小程序,登录页面,查看学生信息

    使用QMainWindow、QDialog、QLineEdit、QPushButton、QTableView、QPalette组件实现对数据库表的增删改查;有登录界面和学生信息列表页面。连接数据库使用的mysql驱动使用QSqlTableModel对表进行操作;使用信号槽...

    class47.ui

    【QTdesigner】课时47.颜色对话框(QColorDialog)(QPalette)【pyqt5+QTdesigner模式】

    程序员表白神器源码.zip

    窗口背景图片使用了QPalette类来设置。 窗口中有三个按钮,分别是“同意”、“考虑考虑”和“拒绝”。点击不同的按钮会触发不同的消息框弹出,并且可以移动“拒绝”按钮到随机位置。 重写了closeEvent函数,当点击...

    Qt 实现桌面雪花飘落代码

    代码很简单, 贴个主要的实现过程吧. 理应支持windows和linux桌面版的,... 代码如下:#include “widget.h”#include “ui_widget.h”#include <QDesktopWidget>#include <QPalette>#include #include #ifdef Q_OS_LINU

    python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    在QSS中,我们可以使用Background或者background-color的方式来设置背景色,设置窗口背景色之后,子控件默认会继承父窗口的背景色,如果想要为控件设置背景图片或图标,则可以使用setPixmap或则setIcon来完成。...

    baseMainApp.cpp

    //---------编码表 const char EncodeTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //0-63 //--------- string str; unsigned int Tmp[4]={0}; //初始化,无符号移位 for...

    PyQt5实现仿QQ贴边隐藏功能的实例代码

    QPalette( [ˈpælət] 调色板)类相当于对话框或控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个QPalette对象,在显示时按照它的QPalette对象中对各部分各状态下的颜色的描述来进行绘制...

Global site tag (gtag.js) - Google Analytics