`
tubaluer
  • 浏览: 1500115 次
文章分类
社区版块
存档分类
最新评论
  • 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虽然很好用,但是其中存在诸多问题,而且对于一些特殊情况:帮助文档上也没有给出说明,这些如若不注意都会出现很多问题。

分享到:
评论

相关推荐

    QT 黑色风格+白色风格+淡蓝色风格样式表

    在QT中,样式表(QSS,Qt Style Sheets)类似于网页开发中的CSS(层叠样式表),用于控制Qt界面元素的外观。QSS允许开发者以一种声明式的方式定义窗口、按钮、文本框等各种控件的样式,包括颜色、字体、边框、阴影、...

    Qt Qss三套样式文件 qss.zip

    Qt QSS,全称为Qt Style Sheets,是Qt框架提供的一种样式表语言,类似于网页开发中的CSS,用于控制Qt应用程序的用户界面外观。QSS允许开发者通过文本文件定义UI元素的颜色、字体、边框、背景、布局等样式,使得UI...

    Qt+BackgroundRole+改变窗口背景颜色

    1. 创建一个窗口:首先,我们需要创建一个`QWidget`对象,它是Qt中所有用户界面组件的基础。我们可以通过继承`QWidget`类并重写必要的方法来自定义我们的窗口。 2. 添加按钮:接着,我们需要在窗口上添加一个`...

    Qt标准对话框设置,设置字体、调色板、进度条

    本文将深入探讨如何在Qt中设置标准对话框,包括修改字体、应用自定义调色板以及使用进度条。我们将通过具体的代码示例来阐述这些知识点。 首先,让我们了解Qt中的标准对话框。常见的标准对话框有消息框...

    基于Qt 调色板 MinGw

    在实际开发中,我们还可以使用样式表(QSS,Qt StyleSheet)来进一步定制界面,它可以与QPalette结合使用,提供更灵活的界面设计。QSS类似于网页的CSS,可以控制控件的布局、颜色、字体等属性。 总的来说,Qt的...

    学习QT中设置字体和更改字体颜色.pdf

    在 QT 中,还可以使用样式表来设置字体颜色。例如,下面是一个简单的示例代码: ```c label->setStyleSheet("color: white"); ``` 在上面的代码中,我们使用样式表来设置标签控件的字体颜色为白色。 结论 在 QT 中...

    qt实现的调色板

    首先,我们来了解Qt中的QPalette类。QPalette类代表了一个调色板,包含了各种不同用途的颜色,如背景色、前景色、高亮色、按钮色等。通过设置QPalette,可以改变窗口部件的外观,使其与桌面环境或其他视觉要求相协调...

    Qt学习笔记之QPalette调色板类

    QPalette调色板类是Qt框架中的一种重要组件,主要用于设置控件或窗口的颜色样式。通过QPalette类,可以设置控件或窗口的不同状态下的颜色,例如获得焦点、未获得焦点、不可用的状态等。同时,也可以设置不同部位的...

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

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

    QT3转QT4总结

    6. 类的继承关系变化:QThread Qt3中从Qt继承,Qt4中从Object继承,因此可以在QThread中直接使用信号和槽。 Qt的变化给QT3转换QT4带来的影响 1. 类和接口等名称的改变使得转换后的代码有很多类、接口、枚举等等找...

    Qt做的折叠菜单,新手必备.rar

    新手必备.rar"提供了一个使用Qt框架实现的折叠菜单界面,涉及到的知识点包括但不限于:Qt的图形用户界面组件(如QTreeWidgetItem、QMenu、QStackedWidget)、自定义样式和颜色(QStyle和QPalette)、信号与槽机制,...

    基于QT的调色板

    在Qt中,调色板(QPalette)是一个关键的类,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过...

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

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

    Qt 模仿QQ登陆,QQ好友列表,QQ聊天窗口。完全复原QQ界面,可以学习Qt基础,Qt界面美化,自定义树形控件等知识。

    在本文中,我们将深入探讨如何使用Qt框架来模仿QQ的登录、好友列表和聊天窗口,以帮助初学者理解和掌握Qt的基础、界面美化以及自定义控件的创建。 首先,让我们了解Qt。Qt是一个跨平台的应用程序开发框架,由The Qt...

    Qt开发的360界面.rar

    背景效果可能涉及到了QPalette和QSS(Qt样式表)的使用。QPalette可以改变控件的颜色方案,为界面添加个性化色彩。QSS类似于HTML/CSS中的样式表,可以用来定义界面元素的外观,包括背景颜色、边框样式、字体等,让...

    Qt5背景设置方式

    在Qt5中,我们可以使用QGraphicsView、QWidget或QQuickView等类来构建界面,并通过样式表(QSS,Qt Style Sheets)或者编程的方式来改变控件的外观,包括背景。 **一、设置背景颜色** 在Qt5中,可以使用QSS来设置...

    Qt GUI 5.10 界面外观

    样式表使用类似于 CSS 的语法,可以应用于任何 Qt 应用程序中。样式表可以定义在一个字符串中,然后通过 `QWidget::setStyleSheet()` 函数设置到部件上。 ##### 6.2 样式表语法基础 样式表语法与 CSS 类似,但有...

    QPalette QColor 窗体颜色主题案例

    `palette.h`头文件可能定义了相关的类或函数,如`QPalette`的设置方法,以便在其他类中方便地使用。例如: ```cpp class CustomPalette { public: void setCustomColors(QWidget* widget); }; void CustomPalette...

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

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

Global site tag (gtag.js) - Google Analytics