QPalette类

QPalette类包含每个控件状态的颜色组,专门用于管理控件的外观显示。


Header:#include <QPalette>
CMake:find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake:QT += gui

【详细描述】

每个窗体和控件都包含一个QPalette对象

Qt中的所有控件都包含一个调色板QPalette,并使用各自的调色板来绘制自己,这使用户界面易于配置并保持风格的统一。

QPalette对象由三个颜色组构成:Active (激活/有焦点)、Disabled禁用和Inactive(非激活/无焦点)。活动窗口和非活动窗口都可以包含禁用控件。除禁用外,大多数样式中的“活动”和“非活动”看起来相同。

可以使用 setColor() 和 setBrush() 为调色板的任何颜色组中的特定角色设置颜色和画笔。颜色组包含控件用于绘制自身的一组颜色。我们建议控件使用QPalette对象中的颜色组角色,例如“前景”和“基础”,而不是“红色”或“绿色”等文字颜色。颜色角色在文档中枚举定义。

我们强烈建议您使用当前样式的默认调色板(由 QGuiApplication::palette() 返回),并根据需要进行修改。这是由Qt的控件在绘制时完成的。

设置控件颜色的方法是先调用QWidget::palette()获取当前面板,修改它为自定义的值后再通过方法QWidget::setPalette设置为新修改的面板。

QPalette palette = widget->palette();  
palette.setColor(QPalette::Window, Qt::lightGray);  //改变控件背景色  
palette.setColor(QPalette::WindowText, Qt::blue);   //改变控件字体颜色  
...  
widget->setPalette(palette); 

若要修改颜色组,请调用函数setColor() 和 setBrush(),具体取决于您想要的是纯颜色还是像素图图案。还有对应的color()和brush() 获取函数 ,以及一个常用的 ColorRole函数来获取当前颜色组的颜色角色:window(), windowText(), base()等。

您可以使用复制构造函数复制调色板,并使用 isCopyOf() 测试两个调色板是否相同。

QPalette 通过使用隐式共享进行了优化,因此将 QPalette 对象作为参数传递非常有效。

警告: 某些样式不会将调色板用于所有绘图,例如,如果它们使用本机主题引擎。

参见QApplication::setPalette(), QWidget::setPalette(), and QColor.



【公共类型】

enumColorGroup { Disabled(禁用), Active(激活), Inactive(非活动), Normal(等价于激活) }
enumColorRole { Window, WindowText, Base, AlternateBase, ToolTipBase, …, NoRole }

ColorRole 枚举定义当前 GUI 中使用的不同符号颜色角色。

核心角色是:

枚举名描述
QPalette::Window10一般背景色。
QPalette::WindowText0一般前景色。
QPalette::Base9主要用作文本输入控件的背景色,但也可用于其他绘画,例如组合框下拉列表和工具栏手柄的背景。它通常是白色或其他浅色。
QPalette::AlternateBase16在具有交替行颜色的视图中用作备用背景色(请参见QAbstractItemView::setAlternatingRowColors())。
QPalette::ToolTipBase18用作 QToolTip and QWhatsThis的背景色。工具提示使用 的“非活动”颜色组,因为工具提示不是活动窗口。
QPalette::ToolTipText19用作 QToolTip and QWhatsThis的前景色。工具提示使用 的“非活动”颜色组,因为工具提示不是活动窗口。
QPalette::PlaceholderText20用作各种文本输入控件的占位符颜色。这个枚举值已经在Qt 5.12中引入
QPalette::Text6与Base一起使用的前景色。这通常与WindowText相同,在这种情况下,它必须提供与Window和Base的良好对比度。
QPalette::Button1常规按钮背景颜色。此背景可能不同,因为某些Window样式要求按钮使用不同的背景颜色。
QPalette::ButtonText8与Botton颜色一起使用的前景色。
QPalette::BrightText7

一种与WindowText非常不同的文本颜色,与Dark(黑暗)有很好的对比。通常用于需要绘制的文本,其中文本或窗口文本会比较差,如按下按钮。注意,文本颜色可以用于单词以外的其他用途;文本颜色通常用于文本,但将文本颜色角色用于线条、图标等是很常见的。

有一些颜色角色主要用于 3D 斜角和阴影效果。所有这些通常都派生自Window,并且以依赖于该关系的方式使用,按钮依赖于它来使斜面看起来更有吸引力。

枚举名描述
QPalette::Light2Button颜色浅。
QPalette::Midlight3ButtonLight 之间。
QPalette::Dark4Button更暗。
QPalette::Mid5ButtonDark之间。
QPalette::Shadow11一种非常深的颜色。默认情况下,阴影颜色为Qt::black

选定(标记)项目有两个角色:

枚举名描述
QPalette::Highlight12用于指示选定项或当前项的颜色。默认情况下,突出显示颜色为Qt::darkBlue
QPalette::Accent21通常与“基本”Base、“窗口”Window和“按钮”Button颜色形成对比或互补的颜色。它通常代表用户对桌面个性化的选择。交互式组件的样式是一个典型的用例。除非显式设置,否则默认为“突出显示”。
QPalette::HighlightedText13Highlight形成对比的文本颜色。默认情况下,突出显示的文本颜色为 。

有两种颜色角色与超链接相关:

枚举名描述
QPalette::Link14用于未访问超链接的文本颜色。默认link颜色为Qt::blue
QPalette::LinkVisited15用于已访问超链接的文本颜色。默认linkvisited 颜色为Qt::magenta

请注意,在Qt中渲染富文本时,我们不会使用Link和 LinkVisited 角色,我们建议您使用CSS和QTextDocument::setDefaultStyleSheet()函数来改变链接的外观。例如:

QTextBrowser browser;
    QColor linkColor(Qt::red);
    QString sheet = QString::fromLatin1("a { text-decoration: underline; color: %1 }").arg(linkColor.name());
    browser.document()->setDefaultStyleSheet(sheet);
枚举名描述
QPalette::NoRole17没有角色。此特殊角色通常用于指示尚未分配角色。

【公有函数】

QPalette()

构造一个没有设置颜色角色的空QPalette对象。

当把它用作QWidget的调色板时,颜色按QWidget::setPalette()所述进行解析。

QPalette(const QColor &button)
QPalette(Qt::GlobalColor button)
依据button颜色构造QPalette。其他颜色根据该颜色自动计算。窗口也将是button的颜色。
QPalette(const QColor &button, const QColor &window)
依据buttonwindow窗口颜色构造QPalette。其他颜色根据该颜色自动计算。
QPalette(const QBrush &windowText, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &window)
构造一个QPalette。您可以为windowText、button、light、dark、mid、Text、bright_text、base和window传递画笔、位图或平面。
QPalette(const QPalette &p)
构造p的副本,由于隐式共享,这个构造很快。
QPalette(QPalette &&other)

移动构造一个QPalette实例,使它指向另一个对象所指向的同一对象。

从移动构造后,只能分配或销毁other,任何别的操作都将导致未定义的行为。

析构。~QPalette()
const QBrush &accent() const
返回当前颜色组的强调(accent)画笔。
const QBrush &alternateBase() const
返回当前颜色组的交替基本笔刷(alternate base brush)。
const QBrush &base() const
返回当前颜色组的基本笔刷。
const QBrush &brightText() const
返回当前颜色组的亮文本前景画笔(bright text foreground brush)。
const QBrush &brush(QPalette::ColorGroup group, QPalette::ColorRole role) const
返回指定的group颜色组中的role颜色角色的笔刷。
const QBrush &brush(QPalette::ColorRole role) const
返回当前颜色组中的role颜色角色的笔刷。
const QBrush &button() const
返回当前颜色组的按钮画笔。
const QBrush &buttonText() const
返回当前颜色组的按钮文本前景画笔。
qint64cacheKey() const
返回一个标识此QPalette对象内容的数字。如果不同的QPalette对象引用相同的内容,则它们可以具有相同的键。当QPalette改变时,cacheKey()也会改变。
const QColor &color(QPalette::ColorGroup group, QPalette::ColorRole role) const
返回group指定QPalette中用于给定颜色角色role的颜色。
const QColor &color(QPalette::ColorRole role) const
返回当前QPalette中用于给定颜色角色role的颜色。
QPalette::ColorGroupcurrentColorGroup() const
返回当前QPalette。
const QBrush &dark() const
返回当前颜色组的dark笔刷。
const QBrush &highlight() const
返回当前颜色组的 highlight 笔刷。
const QBrush &highlightedText() const
返回当前颜色组的 highlighted text 笔刷。
boolisBrushSet(QPalette::ColorGroup cg, QPalette::ColorRole cr) const

如果先前已在此调色板上设置了颜色组cg和颜色角色cr,则返回true,否则返回false。

颜色组cg应属于QPalette::NColorGroups,也可以使用QPalette::Current,这种情况下,会使用先前设置的当前颜色组。

ColorRole cr 应属于QPalette::NColorRoles

boolisCopyOf(const QPalette &p) const
如果当前QPalette和p是作为彼此的副本创建,并且之后都没有被修改,则返回true,否则返回false。此函数比“==”严格得多。
boolisEqual(QPalette::ColorGroup cg1, QPalette::ColorGroup cg2) const
如果颜色组cg1等于cg2,则返回true(通常很快返回),否则返回false。
const QBrush &light() const
返回当前颜色组的light笔刷。
const QBrush &link() const
返回当前颜色组的未访问链接文本画笔。
const QBrush &linkVisited() const
返回当前颜色组的已访问链接文本画笔。
const QBrush &mid() const
返回当前颜色组的mid画笔。
const QBrush &midlight() const
返回当前颜色组的midlight画笔。
const QBrush &placeholderText() const
返回当前颜色组的占位符文本画笔。
QPaletteresolve(const QPalette &other) const
返回一个新的QPalette,它是this实例和other实例的并集。以this实例中设置的颜色角色优先。
voidsetBrush(QPalette::ColorRole role, const QBrush &brush)
将给定角色role的画笔设置为调色板中所有组的brush
voidsetBrush(QPalette::ColorGroup group, QPalette::ColorRole role, const QBrush &brush)
将给定角色role的画笔设置为调色板中group组的brush
voidsetColor(QPalette::ColorGroup group, QPalette::ColorRole role, const QColor &color)
为指定的color设置group颜色组中的role角色。
voidsetColor(QPalette::ColorRole role, const QColor &color)
为指定的color设置所有颜色组中的role角色。
voidsetColorGroup(QPalette::ColorGroup cg, const QBrush &windowText, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &window)
将组设置为cg,您可以为windowText、button、light、dark、mid、Text、bright_text、base和window传递画笔、位图或平面颜色。
voidsetCurrentColorGroup(QPalette::ColorGroup cg)
将调色板的当前颜色组设置为cg。
const QBrush &shadow() const
返回当前颜色组的shadow画笔。
voidswap(QPalette &other)
将此QPalette实例与other实例交换。这个功能非常快,且不会失败。
const QBrush &text() const
返回当前颜色组的文本前景 text foreground 画笔。
const QBrush &toolTipBase() const

返回当前颜色组的工具提示基本 tool tip base画笔。该画笔由QToolTip和 QWhatsThis使用。

注意:工具提示使用QPalette的非活动颜色组,因为工具提示不是活动窗口。

const QBrush &toolTipText() const
返回当前颜色组的工具提示文本 tool tip text画笔。(其余同上)
const QBrush &window() const
返回当前颜色组的 window(全局背景)画笔。
const QBrush &windowText() const
返回当前颜色组的 window text(全局前景)画笔。
QVariantoperator QVariant() const
以QVariant形式返回调色板。
booloperator!=(const QPalette &p) const
QPalette &operator=(const QPalette &p)
QPalette &operator=(QPalette &&other)
booloperator==(const QPalette &p) const

QDataStream &operator<<(QDataStream &s, const QPalette &p)
QDataStream &operator>>(QDataStream &s, QPalette &p)

<<< 返回根页面

  • 22
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值