QPalette学习笔记

2023-11-11 14:30
文章标签 学习 笔记 qpalette

本文主要是介绍QPalette学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

QPalette类有两个基本的数据类型:一个是ColorGroup,用来区分不同状态下空间或窗体的颜色信息;另一个是ColorRole,用来区分控件或窗体的不同组成的颜色信息。其具体的解释如下:

ColorGroup:

QPalette::Disabled不可用状态
QPalette::Active活跃状态(获得焦点)
QPalette::Inactive不活跃状态(未获得焦点)

ColorRole:

QPalette::Window一个常规的背景颜色
QPalette::Background这个值是废弃的,使用window代替
QPalette::WindowText一个一般的前景颜色(文本颜色 )
QPalette::Foreground这个值是废弃的,使用windowText代替.
QPalette::Base主要用作文本输入小部件(QTextEdit、QListView等)的背景颜色,也可以用于其他,如combobox下拉列表和toolbar。
QPalette::Text与QPalette::Base对应,主要用作文本输入小部件(QTextEdit、QListView等)的文本颜色
QPalette::AlternateBase被用来作视图行交替的背景颜色(当视图设置了行背景色交替属性setAlternatingRowColors(true)),与QPalette::Base进行区分
QPalette::ToolTipBase被用来作为背景颜色为QToolTip和QWhatsThis。工具尖端使用QPalette不活跃的颜色组,因为工具尖端不是活跃的窗口.
QPalette::ToolTipText被用来作为前景颜色为QToolTip和QWhatsThis.工具尖端使用QPalette不活跃的颜色组,因为工具尖端不是活跃的窗口.
QPalette::Buttonbutton背景颜色。这个背景颜色能是不同于window作为一些风格,要求一个不同的背景颜色作为button
QPalette::ButtonText一个前景颜色被用来作为button颜色.
QPalette::BrightText一个text颜色是很不同于windowText,很好的对比与dark。典型的被用来为text,需要被画,在text或者windowText将给差的对比,就像在按下的button。注意text颜色能被用来为事情,而不只是单词;text颜色通常被用来为text,但是他是相当普通的使用text颜色角色为行,图标,等等。

QPalette主要通过以下四个函数来实现对控件或窗体的颜色设置:

void QPalette::setColor ( ColorRole role, const QColor & color );

void QPalette::setColor ( ColorGroup group, ColorRole role, const QColor & color );

void QPalette::setBrush ( ColorRole role, const QBrush & brush );

void QPalette::setBrush ( ColorGroup group, ColorRole role, const QBrush & brush );

其中,setBrush可以通过设置QBrush的图片来设置控件或窗体的背景图片。另外,需要注意的是在设置对话框和控件(QPushButton、QFrame等)的背景色时需要使用

void setAutoFillBackground ( bool enabled );设置其背景可填充。

接下来给出一个示例(Qt创建一个QWidget项目):

//Wdiget.h#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QComboBox>
#include <QFrame>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private://成员变量QFrame *sFrame;QFrame *cFrame;QComboBox *cbWin;QComboBox *cbWinText;QComboBox *cbBtn;QComboBox *cbBtnText;QComboBox *cbBase;QComboBox *cbText;QComboBox *cbAlter;//成员函数void seletFrame();void contentFrame();void fillComboBox(QComboBox *);private slots:void cbWin_s();void cbWinText_s();void cbBtn_s();void cbBtnText_s();void cbBase_s();void cbText_s();void cbAlter_s();};#endif // WIDGET_H
//Widget.cpp#include "widget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QTextEdit>
#include <QStringList>
#include <QListView>
#include <QStringListModel>
#include <QLabel>
#include <QGroupBox>
#include <QPixmap>
#include <QIcon>
#include <QSizePolicy>
#include <QDebug>
#include <QLineEdit>Widget::Widget(QWidget *parent): QWidget(parent)
{seletFrame();contentFrame();QHBoxLayout *gHblayout = new QHBoxLayout(this);gHblayout->addWidget(sFrame);gHblayout->addWidget(cFrame);gHblayout->setMargin(10);gHblayout->setSpacing(5);gHblayout->setSizeConstraint(QLayout::SetFixedSize);}Widget::~Widget()
{
}void Widget::seletFrame()
{sFrame = new QFrame;QLabel *label1 = new QLabel("Qt::Window");cbWin = new QComboBox;fillComboBox(cbWin);connect(cbWin,SIGNAL(activated(int)),this,SLOT(cbWin_s()));QLabel *label2 = new QLabel("Qt::WindowText");cbWinText = new QComboBox;fillComboBox(cbWinText);connect(cbWinText,SIGNAL(activated(int)),this,SLOT(cbWinText_s()));//connect(cbWinText,&QComboBox::activated,this,&Widget::cbWinText_s());QGridLayout *s1Layout = new QGridLayout;s1Layout->addWidget(label1,0,0);s1Layout->addWidget(cbWin,0,1);s1Layout->addWidget(label2,1,0);s1Layout->addWidget(cbWinText,1,1);s1Layout->setSizeConstraint(QLayout::SetFixedSize);QGroupBox *s1GroupBox = new QGroupBox("Window corlor");s1GroupBox->setLayout(s1Layout);QLabel *label3 = new QLabel("Qt::Button");cbBtn = new QComboBox;fillComboBox(cbBtn);connect(cbBtn,SIGNAL(activated(int)),this,SLOT(cbBtn_s()));QLabel *label4 = new QLabel("Qt::ButtonText");cbBtnText = new QComboBox;fillComboBox(cbBtnText);connect(cbBtnText,SIGNAL(activated(int)),this,SLOT(cbBtnText_s()));QLabel *label5 = new QLabel("Qt::Base");cbBase = new QComboBox;fillComboBox(cbBase);connect(cbBase,SIGNAL(activated(int)),this,SLOT(cbBase_s()));QLabel *label6 = new QLabel("Qt::Text");cbText = new QComboBox;fillComboBox(cbText);connect(cbText,SIGNAL(activated(int)),this,SLOT(cbText_s()));QLabel *label7 = new QLabel("Qt::AlternateBase");cbAlter = new QComboBox;fillComboBox(cbAlter);connect(cbAlter,SIGNAL(activated(int)),this,SLOT(cbAlter_s()));QGridLayout *sgLayout =new QGridLayout(sFrame);sgLayout->addWidget(s1GroupBox,0,0,1,2);   //合并单元格,从(0,0)格开始,占有1行2列sgLayout->addWidget(label3,1,0);sgLayout->addWidget(cbBtn,1,1);sgLayout->addWidget(label4,2,0);sgLayout->addWidget(cbBtnText,2,1);sgLayout->addWidget(label5,3,0);sgLayout->addWidget(cbBase,3,1);sgLayout->addWidget(label6,4,0);sgLayout->addWidget(cbText,4,1);sgLayout->addWidget(label7,5,0);sgLayout->addWidget(cbAlter,5,1);sgLayout->setMargin(5);}void Widget::contentFrame()
{cFrame = new QFrame();cFrame->setLineWidth(2);cFrame->setFrameStyle(QFrame::Box|QFrame::Raised);QLabel *labString = new QLabel("please input a string");QLineEdit *edtString = new QLineEdit;QHBoxLayout *stringWidget = new QHBoxLayout;stringWidget->addWidget(labString);stringWidget->addWidget(edtString);stringWidget->setSpacing(5);QListView *cListV = new QListView;QStringList cstrL;cstrL << "男儿立志岀乡关"<<"学不成名誓不还"<<"青山处处埋忠骨"<<"何须马革裹尸还";QStringListModel *cListM = new QStringListModel(cstrL);cListV->setModel(cListM);cListV->setAlternatingRowColors(true);QTextEdit *cTextE = new QTextEdit("葡萄美酒夜光杯");cTextE->append("欲饮琵琶马上催");cTextE->append("醉卧沙场君莫笑");cTextE->append("古来征战几人回");QPushButton *okBtn = new QPushButton("确认");QPushButton *cancalBtn = new QPushButton("取消");QHBoxLayout *cHLayout = new QHBoxLayout;cHLayout->addStretch(1);cHLayout->addWidget(okBtn);cHLayout->addWidget(cancalBtn);QVBoxLayout *cVLayout = new QVBoxLayout(cFrame);cVLayout->addLayout(stringWidget);cVLayout->addWidget(cListV);cVLayout->addWidget(cTextE);cVLayout->addLayout(cHLayout);cVLayout->setMargin(15);cVLayout->setSpacing(5);okBtn->setAutoFillBackground(true);cancalBtn->setAutoFillBackground(true);cFrame->setAutoFillBackground(true);
}void Widget::fillComboBox(QComboBox *c)
{QStringList colorList = QColor::colorNames();QString colorName;foreach(colorName,colorList){QPixmap s_color = QPixmap(70,20);s_color.fill(QColor(colorName));//QIcon s_color  = QIcon(colorName);c->addItem(QIcon(s_color),NULL);c->setIconSize(QSize(70,20));c->setSizeAdjustPolicy(QComboBox::AdjustToContents);}}void Widget::cbWin_s()
{qDebug()<<"进入cbWin_s()槽函数";QStringList colors = QColor::colorNames();QPalette p = cFrame->palette();p.setColor(QPalette::Window,QColor(colors[cbWin->currentIndex()]));cFrame->setPalette(p);}void Widget::cbWinText_s()
{QStringList colors = QColor::colorNames();QPalette p = cFrame->palette();p.setColor(QPalette::WindowText,QColor(colors[cbWinText->currentIndex()]));cFrame->setPalette(p);}void Widget::cbBtn_s()
{QStringList colors = QColor::colorNames();QPalette p = cFrame->palette();p.setColor(QPalette::Button,QColor(colors[cbBtn->currentIndex()]));cFrame->setPalette(p);
}void Widget::cbBtnText_s()
{QStringList colors = QColor::colorNames();QPalette p = cFrame->palette();p.setColor(QPalette::ButtonText,QColor(colors[cbBtnText->currentIndex()]));cFrame->setPalette(p);
}void Widget::cbBase_s()
{QStringList colors = QColor::colorNames();QPalette p = cFrame->palette();p.setColor(QPalette::Base,QColor(colors[cbBase->currentIndex()]));cFrame->setPalette(p);
}void Widget::cbText_s()
{QStringList colors = QColor::colorNames();QPalette p = cFrame->palette();p.setColor(QPalette::Text,QColor(colors[cbText->currentIndex()]));cFrame->setPalette(p);
}void Widget::cbAlter_s()
{QStringList colors = QColor::colorNames();QPalette p = cFrame->palette();p.setColor(QPalette::AlternateBase,QColor(colors[cbAlter->currentIndex()]));cFrame->setPalette(p);
}

 

结果图:

本文本质是对https://www.cnblogs.com/hanzhaoxin/archive/2012/11/18/2775918.html文章的转载

根据自己的学习理解,为方便自己查看,做了些许调整。

               

这篇关于QPalette学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390717

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件