我是靠谱客的博主 幸福芹菜,最近开发中收集的这篇文章主要介绍(三十一)Qt中的调色板QPaletteQt中的调色板QPale,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Qt中的调色板QPale

QPalette类:

1、  QPalette类是Qt窗口中组件的调色板,管理着Qt组件的所有颜色信息,控制着组件的颜色(QPalette是Qt中标志颜色信息的数据结构)

2、  每个窗口组件都拥有一个QPalette对象(QPalette对象为QWidget类的成员)

3、  窗口组件外观所使用的颜色都定义于调色板中

4、  重新设置窗口组件调色板的值能够改变特定区域的颜色

 

颜色组与颜色角色:

QPalette中的两个概念:颜色组(enumQPalette::ColorGroup)、颜色角色(enum QPalette::ColorRole),颜色组决定什么时候采用指定配色方案,颜色角色决定为谁采用指定配色方案

 

颜色组:

1、激活颜色组(QPalette::Active)组件获得焦点时使用的配色方案

2、非激活颜色组(QPalette::Inactive)组件未获得焦点时使用的配色方案

3、失效颜色组(QPalette::Disabled)组件处于不可用状态使用的配色方案

 

颜色角色:

主要角色:

QPalette::Window

一个常规的背景颜色

QPalette::Background

这个值是废弃的,使用window代替

QPalette::WindowText

一个一般的前景颜色

QPalette::Foreground

这个值是废弃的,使用windowText代替.

QPalette::Base

主要用于文本输入组件的背景色,但也能用于其他的配色,比如combobox的下拉列表的背景和工具栏控件。它通常是白的或者其他亮的颜色.

QPalette::AlternateBase

和交替的行颜色一起作为交替的背景颜色使用

QPalette::ToolTipBase

被用来作为QToolTip和QWhatsThis的背景颜色。Tooltips使用QPalette的非激活颜色组,因为Tooltips不是活跃的窗口.

QPalette::ToolTipText

被用来作为QToolTip和QWhatsThis的前景颜色. Tooltips使用QPalette的非激活颜色组,因为Tooltips不是活跃的窗口.

QPalette::Text

和Base一起使用的前景色.这通常和windowText相同,这种情况下,他需要跟Window与Base有良好的对比度

QPalette::Button

普通button的背景颜色。这个背景可以与window不同,因为一些风格中按钮需求不同的背景色

QPalette::ButtonText

与Button颜色一起使用的按钮前景色(文本颜色)

QPalette::BrightText

一个与windowText非常不同的文本颜色,并且此文本颜色与Dark对比鲜明,典型的,用在使用Text或windowText将会绘制出弱对比度文本的地方,比如一个按下的按钮。注意,此文本颜色还可以用于其他事件而不仅仅是文字,文本颜色通常用于文本,但是使用文本颜色作为行、图标等的文本颜色角色是非常普遍的

 

一些颜色角色最常使用在3D斜面与阴影效果,所有这些颜色角色都继承自window,并且使用方式依赖于这种关系。比如,按钮依赖它来产生吸引人的斜面外观,主题滚动条依赖mid来变得与window轻微不同

QPalette::Light

比Button颜色更亮

QPalette::Midlight

在Button与Light之间

QPalette::Dark

比Button更暗

QPalette::Mid

在Button与Dark之间

QPalette::Shadow

一个非常暗的颜色,默认的.Shadow颜色为Qt::black

 

被选择(被标记)的项有两个角色:

QPalette::Highlight

一个表明选择的项或是当前项的颜色,默认的,Highlight的颜色是Qt::darkBlue

QPalette:: HighlightedText

一个与Highlight对比鲜明的文本颜色,默认的,HighlightedText颜色是Qt::white

 

两个与超链接有关的角色:

QPalette::Link

未访问超链接的文本颜色,默认的,Link颜色为Qt::blue

QPalette:: LinkVisited

已访问超链接的文本颜色,默认的,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:: NoRole

没有角色,这个特殊的角色经常用于表明一个角色还未指定

 

 

使用方式:

QPalette的关键成员函数

void

setBrush ( ColorRole role, const QBrush & brush )

void

setBrush ( ColorGroup group, ColorRole role, const QBrush & brush )

void

setColor ( ColorGroup group, ColorRole role, const QColor & color )

void

setColor ( ColorRole role, const QColor & color )

 

注意:当使用QPalette为窗口设定背景并使用QPalette::Window时,必须在使用QPalette之前,以true调用QWidget成员函数voidsetAutoFillBackground ( bool enabled )

 

使用:

QPalette p = widget.palette();
//获得Widget的调色板
P.setColor(QPalette::Active,QPalette::WindowText, Qt::blue);
p.setColor(QPalette::Inactive, QPalette::WindwoText,Qt::red);
widget.setPalette(p);
//将颜色信息设置回widget



//widget.h

 

#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
class Widget : public QWidget
{
Q_OBJECT
QPushButton m_button;
QLineEdit m_edit;
QLabel m_label;
protected slots:
void onButtonClicked();
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H

//widget.cpp

 

#include "Widget.h"
#include <QPalette>
Widget::Widget(QWidget *parent)
:QWidget(parent), m_button(this), m_edit(this), m_label(this)
{
m_label.move(10, 10);
m_label.resize(150, 25);
m_label.setText("Test");
m_edit.move(10, 45);
m_edit.resize(150, 25);
m_button.move(10, 80);
m_button.resize(150, 25);
m_button.setText("Test");
connect(&m_button, SIGNAL(clicked()), this,SLOT(onButtonClicked()));
QPalette p = m_button.palette();
//获取m_button的调色板信息
p.setColor(QPalette::Active, QPalette::ButtonText, Qt::red);
//设置调色板对象的激活态时按钮文本的颜色为红色
p.setColor(QPalette::Inactive, QPalette::ButtonText, Qt::red);
//设置调色板对象的非激活态时按钮文本的颜色为红色
m_button.setPalette(p);
//将调色板信息设置回去,改变m_button的调色板
p= m_edit.palette();
p.setColor(QPalette::Inactive, QPalette::Highlight, Qt::blue);
//设置非激活态的被选中文本背景色为高亮的蓝色
p.setColor(QPalette::Inactive, QPalette::HighlightedText, Qt::white);//设置非激活态的被选中文本正文为的白色
m_edit.setPalette(p);
}
void Widget::onButtonClicked()
{
QPalette p = m_label.palette();
p.setColor(QPalette::Active, QPalette::WindowText, Qt::green);
p.setColor(QPalette::Inactive, QPalette::WindowText, Qt::green);
m_label.setPalette(p);
}
Widget::~Widget()
{
}


 

 声明:
此文根据 狄泰学院唐老师的《QT实验分析教程》创作,并根据自身理解与官方文档对其进行了少许的扩展

 

 

最后

以上就是幸福芹菜为你收集整理的(三十一)Qt中的调色板QPaletteQt中的调色板QPale的全部内容,希望文章能够帮你解决(三十一)Qt中的调色板QPaletteQt中的调色板QPale所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部