Qt之对话框设计——利用QPalette改变控件颜色

2023-10-29

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

QPalette类有两个基本的概念,一个是ColorGroup,另一个是ColorRole。

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 );

ColorGroup:

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

ColorRole:

QPalette::Window 一个常规的背景颜色
QPalette::Background 这个值是废弃的,使用window代替
QPalette::WindowText 一个一般的前景颜色
QPalette::Foreground 这个值是废弃的,使用windowText代替.
QPalette::Base 最长使用来作为text背景颜色为整个widget,但是也能被用来为其他的绘画,像combobox的上下清单的背景和工具栏句柄。它通常是白的或者其他亮的颜色.
QPalette::AlternateBase 被用来作为轮流的背景颜色,轮流的行颜色
QPalette::ToolTipBase 被用来作为背景颜色为QToolTip和QWhatsThis。工具尖端使用QPalette不活跃的颜色组,因为工具尖端不是活跃的窗口.
QPalette::ToolTipText 被用来作为前景颜色为QToolTip和QWhatsThis.工具尖端使用QPalette不活跃的颜色组,因为工具尖端不是活跃的窗口.
QPalette::Text 前景颜色使用base.这通常和windowText相同,它一定提供好的对比window和base
QPalette::Button button背景颜色。这个背景颜色能是不同于window作为一些风格,要求一个不同的背景颜色作为button
QPalette::ButtonText 一个前景颜色被用来作为button颜色.
QPalette::BrightText 一个text颜色是很不同于windowText,很好的对比与dark。典型的被用来为text,需要被画,在text或者windowText将给差的对比,就像在按下的button。注意text颜色能被用来为事情,而不只是单词;text颜色通常被用来为text,但是他是相当普通的使用text颜色角色为行,图标,等等。

另外,在设置对话框和控件的背景色时还会用到:

void setAutoFillBackground ( bool enabled );


image

maindlg.h

#ifndef MAINDLG_H
#define MAINDLG_H

#include <QtGui/QDialog>
#include <QFrame>
#include <QComboBox>


class MainDlg : public QDialog
{
	Q_OBJECT

public:
	MainDlg(QWidget *parent = 0, Qt::WFlags flags = 0);
	~MainDlg();

	void createCtrlFrame();
	void createContentFrame();
	void fillColorList(QComboBox *);

public slots:
	void sl_window();
	void sl_windowText();
	void sl_button();
	void sl_buttonText();
	void sl_base();

private:
	QFrame *ctrlFrame;	//颜色选择面板
	QFrame *contentFrame;	//具体显示面板
	QComboBox *cbbWindow;
	QComboBox *cbbWindowText;
	QComboBox *cbbButton;
	QComboBox *cbbButtonText;
	QComboBox * cbbBase;
	
};

#endif // MAINDLG_H

maindlg.cpp

#include "maindlg.h"
#include <QPalette>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QStringList>
#include <QColor>
#include <QPixmap>
#include <QSpinBox>
#include <QTextEdit>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>

MainDlg::MainDlg(QWidget *parent, Qt::WFlags flags)
	: QDialog(parent, flags)
{
	createCtrlFrame();
	createContentFrame();

	QHBoxLayout *mainLayout = new QHBoxLayout(this);
	mainLayout->addWidget(ctrlFrame);
	mainLayout->addWidget(contentFrame);
	mainLayout->setMargin(10);
	mainLayout->setSpacing(5);
	mainLayout->setSizeConstraint(QLayout::SetFixedSize);
}

MainDlg::~MainDlg()
{

}

void MainDlg::fillColorList(QComboBox *cbb)
{
	QStringList colorNameList = QColor::colorNames();

	QString colorName;
	foreach(colorName,colorNameList)
	{
		QPixmap pix_color(70,20);
		pix_color.fill(QColor(colorName));

		cbb->addItem(QIcon(pix_color),NULL);
		cbb->setIconSize(QSize(70,20));
		cbb->setSizeAdjustPolicy(QComboBox::AdjustToContents);	//设置下拉列表的尺寸符合内容的大小
	}
}

void MainDlg::createCtrlFrame()
{
	ctrlFrame = new QFrame;

	QLabel *labWindow = new QLabel(tr("QPalette::Window:"));
	QLabel *labWindowText = new QLabel(tr("QPalette::WindowText:"));
	QLabel *labButton = new QLabel(tr("QPalette::Button:"));
	QLabel *labButtonText = new QLabel(tr("QPalette::ButtonText:"));
	QLabel *labBase = new QLabel(tr("QPalette::Base:"));

	cbbWindow = new QComboBox;
	fillColorList(cbbWindow);
	connect(cbbWindow,SIGNAL(activated(int)),this,SLOT(sl_window()));
	cbbWindowText = new QComboBox;
	fillColorList(cbbWindowText);
	connect(cbbWindowText,SIGNAL(activated(int)),this,SLOT(sl_windowText()));
	cbbButton = new QComboBox;
	fillColorList(cbbButton);
	connect(cbbButton,SIGNAL(activated(int)),this,SLOT(sl_button()));
	cbbButtonText = new QComboBox;
	fillColorList(cbbButtonText);
	connect(cbbButtonText,SIGNAL(activated(int)),this,SLOT(sl_buttonText()));
	cbbBase = new QComboBox;
	fillColorList(cbbBase);
	connect(cbbBase,SIGNAL(activated(int)),this,SLOT(sl_base()));
	
	int col_lab = 0;
	int col_cbb = 1;
	QGridLayout *ctrlLayout = new QGridLayout(ctrlFrame);
	ctrlLayout->addWidget(labWindow,0,col_lab);
	ctrlLayout->addWidget(labWindowText,1,col_lab);
	ctrlLayout->addWidget(labButton,2,col_lab);
	ctrlLayout->addWidget(labButtonText,3,col_lab);
	ctrlLayout->addWidget(labBase,4,col_lab);
	ctrlLayout->addWidget(cbbWindow,0,col_cbb);
	ctrlLayout->addWidget(cbbWindowText,1,col_cbb);
	ctrlLayout->addWidget(cbbButton,2,col_cbb);
	ctrlLayout->addWidget(cbbButtonText,3,col_cbb);
	ctrlLayout->addWidget(cbbBase,4,col_cbb);
	ctrlLayout->setMargin(5);
	ctrlLayout->setSpacing(5);
}

void MainDlg::createContentFrame()
{
	contentFrame = new QFrame;
	
	QLabel *labValue = new QLabel(tr("Please select one of the values:"));
	QSpinBox *spbValue = new QSpinBox;
	QHBoxLayout *valueLayout = new QHBoxLayout;
	valueLayout->addWidget(labValue);
	valueLayout->addWidget(spbValue);
	valueLayout->setSpacing(5);

	QLabel *labString = new QLabel(tr("Please input a string"));
	QLineEdit *edtString = new QLineEdit;
	QHBoxLayout *stringLayout = new QHBoxLayout;
	stringLayout->addWidget(labString);
	stringLayout->addWidget(edtString);
	stringLayout->setSpacing(5);

	QTextEdit *edtHelloQt = new QTextEdit(tr("Hello Qt!"));
	
	QPushButton *btnOk = new QPushButton(tr("OK"));
	QPushButton *btnCancel =new QPushButton(tr("Cancel"));
	QHBoxLayout *buttonLayout = new QHBoxLayout;
	buttonLayout->addStretch(1);
	buttonLayout->addWidget(btnOk);
	buttonLayout->addWidget(btnCancel);
	buttonLayout->setSpacing(5);

	QVBoxLayout *contentLayout = new QVBoxLayout(contentFrame);
	contentLayout->addLayout(valueLayout);
	contentLayout->addLayout(stringLayout);
	contentLayout->addWidget(edtHelloQt);
	contentLayout->addLayout(buttonLayout);
	contentLayout->setMargin(5);
	contentLayout->setSpacing(5);

	btnOk->setAutoFillBackground(true);
	btnCancel->setAutoFillBackground(true);
	contentFrame->setAutoFillBackground(true);
}

void MainDlg::sl_window()
{
	QStringList colorList = QColor::colorNames();
	QColor color = QColor(colorList[cbbWindow->currentIndex()]);
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::Window,color);
	contentFrame->setPalette(p);
}

void MainDlg::sl_windowText()
{
	QStringList colorList = QColor::colorNames();
	QColor color = QColor(colorList[cbbWindowText->currentIndex()]);
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::WindowText,color);
	contentFrame->setPalette(p);
}

void MainDlg::sl_button()
{
	QStringList colorNameList = QColor::colorNames();
	QColor m_color = QColor(colorNameList[cbbButton->currentIndex()]);
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::Button,m_color);
	contentFrame->setPalette(p);
}

void MainDlg::sl_buttonText()
{
	QStringList colorNameList = QColor::colorNames();
	QColor m_color = QColor(colorNameList[cbbButtonText->currentIndex()]);
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::ButtonText,m_color);
	contentFrame->setPalette(p);
}


void MainDlg::sl_base()
{
	QStringList colorNameList = QColor::colorNames();
	QColor m_color = QColor(colorNameList[cbbBase->currentIndex()]);
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::Base,m_color);
	contentFrame->setPalette(p);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt之对话框设计——利用QPalette改变控件颜色 的相关文章

  • nacos的安装、启动、控制台的打开

    官网 https nacos io zh cn docs quick start html 1 下载nacos包 目前稳定版本1 4 1 方式一 在github上对应下载其中一个即可 https github com alibaba nac
  • Amazon Lightsail——兼具亚马逊云科技的强大功能与 VPS 的简易性

    对于开发者而言 当你想构建系统架构时 你的面前就出现了两种选择 选择一 花时间去亲手挑选每个亚马逊云科技组件 云服务器 存储 IP 地址等 然后自己组装起来 选择二是只需要一个预先配置且预先组装的系统 就可以运行自己的 Web 应用程序 而
  • java 企业工程管理系统软件源码 自主研发 工程行业适用

    工程项目管理软件 工程项目管理系统 对建设工程项目管理组织建设 项目策划决策 规划设计 施工建设到竣工交付 总结评估 运维运营 全过程 全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一 系统管理 1 数据字典 实现对数据字典标签
  • 我的漫长python之路

    1 为什么我用一个remove却删了两个数
  • 区间预测

    区间预测 MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测 目录 区间预测 MATLAB实现QRFR随机森林分位数回归多输入单输出区间预测 效果一览 基本介绍 模型描述 程序设计 参考资料 效果一览 基本介绍 MATLAB实现
  • 什么是gradle

    目录 一 什么是Gradle 二 Gradle的基本组成 1 Project与Task 2 插件 3 Gradle配置文件 4 构建脚本 三 常见配置 1 依赖第三方库 2 导入本地jar包 3 依赖其它模块 4 构建输出为aar文件 5
  • day03 homework

    统计正数和负数的个数然后计算这些数的平均值 编写一个程序来读入不指定个数的整数 然后决定已经读取的整数中有多少个正数和多少个负数并计算这些输入值 不统计0 的总和 最终得出他们的平均值 这个程序以输入值0来结束 使用浮点数显示这个平均值 执
  • VC++公安指纹识别系统

    论文编号 VC 039 论文题目 公安指纹识别系统 开发语言 VC 包括内容 论文 可执行程序 源码 外文翻译 程序操作演示录像 数 据 库 无 论文字数 39000字以上
  • 多系统U盘启动盘的制作,成功启动win8PE,ubuntu,deepin2013,deepin2014,以及通过U盘启动电脑已装系统。

    以前的用U盘装系统都是用ultraISO 直接制作启动盘 有的时候一连着好几天都得捣鼓着装系统 今天是windows 明天是ubuntu 后天就可能是其它linux发行版了 很不方便 所以就想利用一个U盘做一个多系统的启动盘 经过N天不断的
  • 【python基础知识】6.布尔值和四种语句(break、continue、pass、else)

    文章目录 前言 用数据做判断 布尔值 两个数值做比较 直接用数值做运算 布尔值之间的运算 四种新的语句 break语句 continue语句 pass语句 else语句 循环小练习 前言 Hi 你来了 上一关我们学习了for循环和while
  • U盘安装系统----缺少所需的CD/DVD驱动器设备驱动程序

    用U盘启动盘安装系统 首先用软碟通制作启动盘 惠普电脑安装开机的时候 按F9 选择USB启动即可 如果不行的話 开机时按F2或者F10 进入高级设置 英文好像是advanced 选择first什么的 再选择带usb的那个选项即可然后按F10
  • 6-1 JAVA成绩比较 (10分) java pta

    本题要求实现Student类 该类实现Comparable接口 用于计算两个同学的JAVA成绩差 其中一个同学的数据已经输入 只需要从键盘输入第二个同学的信息 只有姓名和JAVA成绩两项 最终返回成绩差 裁判测试程序样例 在这里给出该类被调
  • 攻防世界(pwn)echo_back writeup

    checksec 保护全开 漏洞 利用要点 泄露关键信息 pie开启 gt 泄露elf base 泄露libc base 攻击scanf 修改 IO buf base扩大可输入字符串数 进一步修改 IO buf base与 IO buf e
  • Netty4框架的初步使用

    Netty4框架的初步使用 Netty4的基本概念网上有很多 这里就不多说 这仅仅只是一个小例子 功能模块分三部分 1 Handler 消息处理 2 Client 客户端 3 Server 服务端 结构目录 代码如下 公用的Handler
  • xss-labs/level10

    我们试试看输入以下代码 从界面上看确实只有一个输出点 但是不要被事物的表面所蒙蔽 我们的去更深层的源代码部分详究 从源代码层面上去看输出点 也只有一个输出点 不会吧 判断失误啦 应该不会 因为我从源代码看到了三个表单标签 而且还是设置隐藏属
  • 训练19 加权并查集

    做事情要有始有终 昨天下午暑期集训画上了句号 我整个人也就随着懈怠了下来 这篇题解是我最后的惯性了吧 之前拉下的题我是不打算继续写了 下一阶段依然是刷题 准备回洛谷去 白天学习正经东西 晚上研究副业 Virtual Friends A Bu
  • php全局变量作用域,thinkphp定义全局变量

    本文收集整理关于thinkphp定义全局变量的相关议题 使用内容导航快速到达 内容导航 Q1 thinkphp 视图模型中怎么用全局变量或者是点语法 先说下 关联模型 如你所说 关联模型和jion类似 实际上 thinkphp的关联模型 就
  • 遥感基础知识1

    1 地物波谱特征 在可见光 380 750nm 和近红外波段 850 880nm 地表物体自身的辐射几乎为0 地物发出的波谱主要以反射太阳辐射为主 太阳辐射达到地面后 物体除了反射作用外 还有对电磁辐射的吸收作用 到达地面的太阳辐射能量 反
  • AI写作可以写什么,分别有哪些工具

    1 开源CLUE AI社区 智能对话模型large v3 是目前最为先进的语言模型 可用于生成各种类型的文本 包括文章 自动回复邮件 自动生成代码等 2 Hugging Face Transformers 是一个面向NLP和AI的开源平台
  • 性价比排序

    链接 https ac nowcoder com acm contest 329 D 来源 牛客网 处女座靠着自己的家教本领赚够了去比赛的钱 于是开启了疯狂训练 在每个夜深人静第二天不收作业的夜晚 他都会开始刷题 今日又是一个刷题的夜晚 他

随机推荐

  • Vulnhub靶机渗透之环境搭建及JIS-CTF入门

    Vulnhub靶机渗透之环境搭建及JIS CTF入门 目录 Vulnhub靶机渗透之环境搭建及JIS CTF入门 一 JIS CTF题目描述 二 Vulnhub环境配置 三 Vulnhub靶机渗透详解 1 信息收集 2 First flag
  • K8s卸载

    sudo kubeadm reset f systemctl stop kubelet kubeadm kubectl yum y remove kubelet kubeadm kubectl sudo rm rvf HOME kube s
  • 基于GEC6818的智能火锅点餐系统

    本次项目开发环境 gec6818 QT5 14 2 SecureCRT 所使用的相关技术 c s架构 STL库 C 封装 标准化代码编写 实现的功能 用户登录页面 食品分区在不同页面 用户点餐页面 用户买单页面 数据整合并发送至后台 后台成
  • 请勿私信或者留言,请写信给我:i@brightguo.com

    请勿留言或者私信给我 一来csdn通知系统经常不及时通知我收到了你们的信息 二来我越来越少上csdn了 这两个原因导致您发了信息给我 我过几个月看到也是正常的 所以请邮件 实时看到您的邮件 像收到短信一样 有空就回复你 i brightgu
  • 操作系统主要知识点

    1 进程管理 1 进程是具有独立功能程序在某个数据集合上的一次执行过程 线程是进程内的一个执行实体或执行单元 进程和线程的区别 a 不同进程的地址空间是独立的 而同一进程内的线程共享同一地址空间 一个进程的线程在另一个进程内是不可见的 b
  • MySQL 数据库 (实现JDBC工具类)

    JDBC工具类 package com itcast ma import java sql Connection import java sql DriverManager import java sql PreparedStatement
  • 用c++写一个贪吃蛇的游戏

    写一个贪吃蛇游戏需要涵盖以下几个方面的知识 图形绘制 使用控制台的图形绘制函数 例如在 Windows 中使用的是 conio h 中的图形绘制函数 游戏逻辑 包括贪吃蛇的移动 食物的生成 检测蛇是否撞墙或撞到自己等 数据存储 使用数组或链
  • 缓存知多少?详解@Cacheable@CacheEvict@Caching

    缓存注解 一 基础概念 1 Cache介绍 2 Cacheable CachePut CacheEvict 的主要参数 二 Cacheable使用demo 三 CacheEvict使用demo 四 Caching使用demo 一 基础概念
  • 代理IP和Socks5代理:跨界电商与爬虫的智能引擎

    跨界电商 作为全球市场的一部分 对数据的需求越来越大 同时 随着互联网的发展 爬虫技术也在不断演进 成为了跨界电商的关键工具之一 然而 随之而来的是网站的反爬虫机制和网络安全风险 在这种情况下 代理IP和Socks5代理应运而生 为企业提供
  • 安卓代码获取系统属性值

    安卓代码获取系统属性值 前言 代码实现 前言 大家可能知道 使用adb shell getprop命令可以直接获取系统属性值 但有时候需要在JAVA代码中获取系统属性 接下来说一下如何实现 代码实现 在build gradle的androi
  • C++获取CPUID

    include
  • 客户流失预测--基于R语言C5.0

    对于中国各大电信运营商而言 在整体市场规模相对稳定的情况下 能否维护好现有的客户是保证其收益的重中之重 因此 预测客户流失的可能性与否 直接关系到运营商的客户维护的重点正确与否 本文将基于 狗熊会 基础案例 收集客户流失 来演示基于C5 0
  • flutter webview 在iOS上不显示的问题

    使用的插件是 webview flutter 0 3 22 1 在android中可以正常显示 但是在ios端中既没有报错 又没有显示出来 后来查看插件使用说明才发现 忘记在ios端中端配置文件中进行配置了 此时我们需要在ios的runne
  • java 包扫描器

    java 包扫描器 扫描指定包下的所有java文件 并返回class数组 直接上代码 import java io File import java net URISyntaxException import java net URL im
  • 【Linux】gcc编译过程、make和makefile的概念与区别、Linux简单进度条实现

    文章目录 1 gcc编译过程 1 1预处理 1 2编译 1 3汇编 1 4链接 2 自动化构建工具 make和makefile 2 1使用背景 2 2两者的概念和区别 2 3项目清理 3 Linux简单进度条的实现 1 gcc编译过程 1
  • ubuntu安装qt

    ubuntu安装qt 第一步 下载安装包https download qt io archive qt 5 14 5 14 2 第二步 更改权限 sudo chmod x qt opensource linux x64 5 12 12 ru
  • JS中使用正则表达式g模式和非g模式的区别

    g是global的缩写啊 就是匹配全部可匹配结果 如果你不带g 在正则过程中 字符串是从左至右匹配的 如果匹配成功就不再继续向右匹配了 如果你带g 它会重头到尾的把正确匹配的字符串挑选出来 例如 1 2 3 4 5 var str aaaa
  • C++ std::vector删除元素的几种方式及区别

    容器vector在删除过程中 常用的函数 函数 作用 pop back 删除 vector 容器中最后一个元素 该容器的大小 size 会减 1 但容量 capacity 不会发生改变 erase iter 删除 vector 容器中ite
  • 机器学习——Kmeans聚类算法

    目录 简介 手肘法 手肘法核心思想 轮廓系数 代码举例1 代码举例2 实例 简介 K均值聚类算法是先随机选取K个对象作为初始的聚类中心 然后计算每个对象与各个种子聚类中心之间的距离 把每个对象分配给距离它最近的聚类中心 聚类中心以及分配给它
  • Qt之对话框设计——利用QPalette改变控件颜色

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