Qt调色板:QPalette说明和示例
Qt调色板:QPalette说明和示例
1. 概述
QPalette(调色板)类相当于对话框或控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个QPalette对象,在显示时按照它的QPalette对象中对各部分各状态下的颜色的描述来进行绘制。
2. 说明
Qt中每个部件都有自己的调色板,通过调色板进行颜色绘制。
3. 基本参数
这里参数只是一部分基本参数,还有一部分参数官方文档或下面的参考文章链接
QPalete参数说明:
- QPalete::Window,通常指窗口部件的背景色;
- QPalette:WindowText,通常指窗口不见的前景色;
- QPalette::Base,指文本输入窗口部件(比如QtextEdit,QLinedit等)的背景色.
- QPalette::Text,与QPalette::Base一块使用,指文本输入窗口部件的前景色;
- QPalette::Button,指按钮窗口部件的背景色;
- QPalette::ButtonText,指按钮窗口部件的前景色;
4. 示例
基于Qt6版本的,其它版本区别不大。
测试实例用了两个QFrame,右边是颜色下拉列表,对于控制左边QFrame中的效果。
对不同的参数创建不同的颜色下拉列表,下拉列表前的label中文本对应QPalette的不同参数:
1.类中方法的定义
class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();
public:void createCtrlFrame();void fillColorList(QComboBox *comboBox);void createContentFrame();
private:QFrame *m_ctrlFrame;QLabel *m_windowLabel;QComboBox *m_windowComboBox;QLabel *m_windowTextLabel;QComboBox *m_windowTextComboBox;QLabel *m_buttonLabel;QComboBox *m_buttonComboBox;QLabel *m_buttonTextLabel;QComboBox *m_buttonTextComboBox;QLabel *m_baseLabel;QComboBox *m_baseComboBox;QFrame *m_contentFrame;QLabel *m_label1;QLabel *m_label2;QComboBox *m_comboBox1;QLineEdit *m_lineEdit;QTextEdit *m_textEdit;QPushButton *m_okBtn;QPushButton *m_cancelBtn;QComboBox *m_baseTexComboBox;QLabel *m_baseTextLabel;public slots:void showWindow(int index);void showWindowText(int index);void showButton(int index);void showButtonText(int index);void showBase(int index);void showBaseText(int index);
};
2. 部件布局、信号与槽方法的连接:
#include "dialog.h"
#include <QGridLayout>Dialog::Dialog(QWidget *parent): QDialog(parent)
{createCtrlFrame();createContentFrame();// 水平布局QHBoxLayout *mainLayout = new QHBoxLayout(this);mainLayout->addWidget(m_ctrlFrame);mainLayout->addWidget(m_contentFrame);
}Dialog::~Dialog()
{}void Dialog::createCtrlFrame()
{m_ctrlFrame = new QFrame;m_ctrlFrame->setFrameStyle(QFrame::Sunken | QFrame::Box);m_windowLabel = new QLabel("QPalette:window:");m_windowComboBox = new QComboBox;fillColorList(m_windowComboBox);// 信号和槽函数连接connect(m_windowComboBox,SIGNAL(activated(int)), this, SLOT(showWindow(int)));m_windowTextLabel = new QLabel("QPalette:WindowText:");m_windowTextComboBox = new QComboBox;fillColorList(m_windowTextComboBox);connect(m_windowTextComboBox, SIGNAL(activated(int)), this, SLOT(showWindowText(int)));m_buttonLabel = new QLabel("QPalette:Button:");m_buttonComboBox = new QComboBox;fillColorList(m_buttonComboBox);connect( m_buttonComboBox,SIGNAL(activated(int)), this, SLOT(showButton(int)));m_buttonTextLabel = new QLabel("QPalette::ButtonText");m_buttonTextComboBox = new QComboBox;fillColorList(m_buttonTextComboBox);connect(m_buttonTextComboBox, SIGNAL(activated(int)), this, SLOT(showButtonText(int)));m_baseLabel = new QLabel("QPalette::Base");m_baseComboBox = new QComboBox;fillColorList(m_baseComboBox);connect(m_baseComboBox,SIGNAL(activated(int)),this, SLOT(showBase(int)));m_baseTextLabel = new QLabel("QPalette::BaseText");m_baseTexComboBox = new QComboBox;fillColorList(m_baseTexComboBox);connect(m_baseTexComboBox,SIGNAL(activated(int)),this, SLOT(showBaseText(int)));//网格布局QGridLayout *mainLayout = new QGridLayout(m_ctrlFrame);mainLayout->setSpacing(20);mainLayout->addWidget(m_windowLabel, 0, 0);mainLayout->addWidget(m_windowComboBox, 0, 1);mainLayout->addWidget(m_windowTextLabel, 1, 0);mainLayout->addWidget(m_windowTextComboBox, 1, 1);mainLayout->addWidget(m_buttonLabel, 2, 0);mainLayout->addWidget(m_buttonComboBox,2, 1);mainLayout->addWidget(m_buttonTextLabel, 3, 0);mainLayout->addWidget(m_buttonTextComboBox, 3, 1);mainLayout->addWidget(m_baseLabel, 4, 0);mainLayout->addWidget(m_baseComboBox, 4, 1);mainLayout->addWidget(m_baseTextLabel, 5, 0);mainLayout->addWidget(m_baseTexComboBox, 5, 1);}void Dialog::fillColorList(QComboBox *comboBox)
{QStringList colorList = QColor::colorNames();QString color;foreach (color, colorList){QPixmap pix(QSize(70,20));pix.fill(QColor(color));comboBox->addItem(QIcon(pix),NULL);comboBox->setIconSize(QSize(70,20));comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);}
}void Dialog::createContentFrame()
{m_contentFrame = new QFrame;m_contentFrame->setAutoFillBackground(true);m_label1 = new QLabel("请选择一个值");m_label2 = new QLabel("请输入字符串");m_comboBox1 = new QComboBox;m_lineEdit = new QLineEdit;m_textEdit = new QTextEdit;m_okBtn = new QPushButton(QString("确认"));m_cancelBtn = new QPushButton(QString("取消"));m_okBtn->setAutoFillBackground(true);QGridLayout *topLayout = new QGridLayout;topLayout->addWidget(m_label1, 0 , 0);topLayout->addWidget(m_comboBox1, 0, 1);topLayout->addWidget(m_label2, 1, 0);topLayout->addWidget(m_lineEdit, 1, 1);topLayout->addWidget(m_textEdit,2, 0, 1, 2);QHBoxLayout *bottomLayout = new QHBoxLayout;bottomLayout->addWidget(m_okBtn);bottomLayout->addWidget(m_cancelBtn);//垂直布局QVBoxLayout *mainLayout = new QVBoxLayout(m_contentFrame);mainLayout->addLayout(topLayout);mainLayout->addLayout(bottomLayout);}
3. 对应的槽函数和示例效果
这里不同的槽函数除了QPalette的参数不一样以外,其它都一样。
- QPalette::Window:
void Dialog::showWindow(int index)
{// index是conboBox获取的颜色的index,因为comboBox里的颜色是通过Color获取的,信号发射后获取activated(int)获取到的int值就是Color的int值QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[index]);QPalette p = m_contentFrame->palette();p.setColor(QPalette::Window, color);m_contentFrame->setPalette(p);m_contentFrame->update();
}
- QPalette::WindowText:
void Dialog::showWindowText(int index)
{QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[index]);QPalette p = m_contentFrame->palette();p.setColor(QPalette::WindowText, color);m_contentFrame->setPalette(p);m_contentFrame->update();
}
- QPalette::Button:
void Dialog::showButton(int index)
{QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[index]);QPalette p = m_contentFrame->palette();p.setColor(QPalette::Button, color);m_contentFrame->setPalette(p);m_contentFrame->update();
}
- QPalette::ButtonText:
void Dialog::showButtonText(int index)
{QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[index]);QPalette p = m_contentFrame->palette();p.setColor(QPalette::ButtonText, color);m_contentFrame->setPalette(p);m_contentFrame->update();
}
- QPalette::Base:
void Dialog::showBase(int index)
{QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[index]);QPalette p = m_contentFrame->palette();p.setColor(QPalette::Base, color);m_contentFrame->setPalette(p);m_contentFrame->update();
}
- QPalette::Text:
void Dialog::showBaseText(int index)
{QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[index]);QPalette p = m_contentFrame->palette();p.setColor(QPalette::Text, color);m_contentFrame->setPalette(p);m_contentFrame->update();
}
- 参考文章:QPalette类的使用和说明
Qt调色板:QPalette说明和示例相关推荐
- Qt Creator构建并运行示例
Qt Creator构建并运行示例 构建并运行示例 构建并运行示例 您可以通过打开现有的示例应用程序项目来测试Qt安装是否成功. 要在Android或iOS设备上运行示例应用程序,必须为Android ...
- 【Qt】进程间通信之QSharedMemory示例
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 编程步骤 04. 写端程序示例 05. 读端程序示例 06. 附录 01. 概述 QSharedMemory提供了多个线程 ...
- 获取计算机最大磁盘,Qt获取电脑磁盘容量(示例代码)
项目中用到了监测某磁盘(如:C盘.D盘等)的总容量和可用容量,查了一下,发现其实挺简单,调用一个Windows自带的API:GetDiskFreeSpaceEx( ... )就可以解决.用Qt做了一个 ...
- qt connect函数_Qt官方示例广播发送器
❝ 本示例使用Qt Network API演示如何通过本地网络向多个客户端广播消息. ❞ 总结了下该例子的使用方法: 创建UDP套接字. udpSocket = new QUdpSocket(th ...
- Qt 3D:线框 QML 示例
实现单通道线框渲染方法的 Qt 3D QML 应用程序. Qt 3D 线框渲染说明了如何使用一组自定义着色器绘制单个实体(三叶结)以实现单通道线框渲染方法.Qt技术交流交流群开通,QQ搜索群号&quo ...
- Qt5.15.2+VLC3.0.14学习笔记(六)Qt Player测试(官方示例 vlc-qt+mingw_64版)
前记: Qt Player是官方源码中的一个示例,好像已经很久没有更新了,今天运行测试了下,需要修改部分内容才能运行 vlc-3.0.14源码下载地址:https://code.videolan.or ...
- 【Qt】创建线程程序示例
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建线程类子类 04. 主窗口和程序 05. 程序执行结果 06. 附录 01. 概述 多线程编程可以有效解决在不冻结一个 ...
- Qt编写监控Onvif综合示例(支持云台/预置位/抓图/事件订阅等)
一.功能特点 广播搜索设备,支持IPC和NVR,依次返回. 可选择不同的网卡IP进行对应网段设备的搜索. 依次获取Onvif地址.Media地址.Profile文件.Rtsp地址. 可对指定的Prof ...
- Qt QInputDialog文本输入对话框示例
1.代码如下 //引入头文件: #include <QInputDialog>//...//...//...//具体用法: bool isOK;//QInputDialog 是否成功得到输 ...
最新文章
- Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
- Caffe CNN特征可视化
- Coherence-Enhancing Shock Filters(附源码)
- 解惑 spring 嵌套事务
- VS 2005/2008 开发工具中 使用正则表达式查找替换的使用说明
- Hbase 高级特性Bloom filter
- 向量除法——标量乘法的逆运算
- ai中如何插入签名_技巧不求人167期 Excel如何打印到1页纸的2种方法 Excel如何插入手写签名...
- 特斯拉超级充电桩亮相:充电5分钟能跑百公里
- 四元数左乘右乘_四元数、欧拉角学习笔记个人理解
- 问号在c语言中运算符,C# 运算符 ?、??、?: 各种问号的用法和说明
- 从properties配置文件中获取到的中文乱码
- Atitit.异常的设计原理与 策略处理 java 最佳实践 p93
- 声律启蒙(上 下卷,珍藏版)
- cortex-m3/m4栈回溯
- 亲测有效,一招解决错误:This application failed to start because not Qt platform plugin could be initialized.
- [附源码]java毕业设计旅游网站
- 如何在共享中添加计算机,如何在网上邻居中添加共享文件夹
- 用iOS/Android实现家庭自动化远程控制
- 用 shell 语言提取文件中的信息到另一个文件夹中
热门文章
- 手机APP界面-UI设计教程
- 某城市的出租车计费标准为起步价10元(3公里内含3公里),在3公里到10公里(含10公里)之间每公里2.1元,超过10公里部分每公里3元。编写程序,用Python实现输入行车距离x,输出车费。
- win10 sandbox
- 个人对于《信号与系统》中利用“奇异函数平衡原理”求解系统响应的过程梳理及结果的理解
- DHS测试使用区块链跟踪跨境人口和商品 防止黑客攻击物联网设备
- 采用rrt进行机械臂轨迹规划得到轨迹的算法步骤
- es修改IK分词器源码 mysql热词动态更新(报错解决x3)
- 树莓派无线网络设置、WLAN0设置
- Mac 版Android studio 分配内存设置方法
- 【邢不行|量化小讲堂系列19-Python量化入门】平均趋向指标(ADX)策略在A股的实证