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说明和示例相关推荐

  1. Qt Creator构建并运行示例

    Qt Creator构建并运行示例 构建并运行示例 构建并运行示例 您可以通过打开现有的示例应用程序项目来测试Qt安装是否成功. 要在Android或iOS设备上运行示例应用程序,必须为Android ...

  2. 【Qt】进程间通信之QSharedMemory示例

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 编程步骤 04. 写端程序示例 05. 读端程序示例 06. 附录 01. 概述 QSharedMemory提供了多个线程 ...

  3. 获取计算机最大磁盘,Qt获取电脑磁盘容量(示例代码)

    项目中用到了监测某磁盘(如:C盘.D盘等)的总容量和可用容量,查了一下,发现其实挺简单,调用一个Windows自带的API:GetDiskFreeSpaceEx( ... )就可以解决.用Qt做了一个 ...

  4. qt connect函数_Qt官方示例广播发送器

    ❝ 本示例使用Qt Network API演示如何通过本地网络向多个客户端广播消息. ❞   总结了下该例子的使用方法: 创建UDP套接字. udpSocket = new QUdpSocket(th ...

  5. Qt 3D:线框 QML 示例

    实现单通道线框渲染方法的 Qt 3D QML 应用程序. Qt 3D 线框渲染说明了如何使用一组自定义着色器绘制单个实体(三叶结)以实现单通道线框渲染方法.Qt技术交流交流群开通,QQ搜索群号&quo ...

  6. Qt5.15.2+VLC3.0.14学习笔记(六)Qt Player测试(官方示例 vlc-qt+mingw_64版)

    前记: Qt Player是官方源码中的一个示例,好像已经很久没有更新了,今天运行测试了下,需要修改部分内容才能运行 vlc-3.0.14源码下载地址:https://code.videolan.or ...

  7. 【Qt】创建线程程序示例

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建线程类子类 04. 主窗口和程序 05. 程序执行结果 06. 附录 01. 概述 多线程编程可以有效解决在不冻结一个 ...

  8. Qt编写监控Onvif综合示例(支持云台/预置位/抓图/事件订阅等)

    一.功能特点 广播搜索设备,支持IPC和NVR,依次返回. 可选择不同的网卡IP进行对应网段设备的搜索. 依次获取Onvif地址.Media地址.Profile文件.Rtsp地址. 可对指定的Prof ...

  9. Qt QInputDialog文本输入对话框示例

    1.代码如下 //引入头文件: #include <QInputDialog>//...//...//...//具体用法: bool isOK;//QInputDialog 是否成功得到输 ...

最新文章

  1. Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
  2. Caffe CNN特征可视化
  3. Coherence-Enhancing Shock Filters(附源码)
  4. 解惑 spring 嵌套事务
  5. VS 2005/2008 开发工具中 使用正则表达式查找替换的使用说明
  6. Hbase 高级特性Bloom filter
  7. 向量除法——标量乘法的逆运算
  8. ai中如何插入签名_技巧不求人167期 Excel如何打印到1页纸的2种方法 Excel如何插入手写签名...
  9. 特斯拉超级充电桩亮相:充电5分钟能跑百公里
  10. 四元数左乘右乘_四元数、欧拉角学习笔记个人理解
  11. 问号在c语言中运算符,C# 运算符 ?、??、?: 各种问号的用法和说明
  12. 从properties配置文件中获取到的中文乱码
  13. Atitit.异常的设计原理与 策略处理 java 最佳实践 p93
  14. 声律启蒙(上 下卷,珍藏版)
  15. cortex-m3/m4栈回溯
  16. 亲测有效,一招解决错误:This application failed to start because not Qt platform plugin could be initialized.
  17. [附源码]java毕业设计旅游网站
  18. 如何在共享中添加计算机,如何在网上邻居中添加共享文件夹
  19. 用iOS/Android实现家庭自动化远程控制
  20. 用 shell 语言提取文件中的信息到另一个文件夹中

热门文章

  1. 手机APP界面-UI设计教程
  2. 某城市的出租车计费标准为起步价10元(3公里内含3公里),在3公里到10公里(含10公里)之间每公里2.1元,超过10公里部分每公里3元。编写程序,用Python实现输入行车距离x,输出车费。
  3. win10 sandbox
  4. 个人对于《信号与系统》中利用“奇异函数平衡原理”求解系统响应的过程梳理及结果的理解
  5. DHS测试使用区块链跟踪跨境人口和商品 防止黑客攻击物联网设备
  6. 采用rrt进行机械臂轨迹规划得到轨迹的算法步骤
  7. es修改IK分词器源码 mysql热词动态更新(报错解决x3)
  8. 树莓派无线网络设置、WLAN0设置
  9. Mac 版Android studio 分配内存设置方法
  10. 【邢不行|量化小讲堂系列19-Python量化入门】平均趋向指标(ADX)策略在A股的实证