十三、QPalette的简单使用(Qt5 GUI系列)

这篇具有很好参考价值的文章主要介绍了十三、QPalette的简单使用(Qt5 GUI系列)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

十三、QPalette的简单使用(Qt5 GUI系列),C++/Qt GUI Demo仓库,qt,开发语言


目录

一、设计需求

二、实现代码

三、代码解析

四、总结


一、设计需求

        在实际应用中,经常需要改变某个控件的颜色外观,如背景、文字颜色等。Qt提供的调色板类 QPalette 专门用于管理对话框的外观显示。QPalette 类相当于对话框或是控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个 QPalette 对象,在显示时按照它的 QPalette 对象中对各部分各状态下的颜色的描述进行绘制。

二、实现代码

#include "palette.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Palette w;
    w.show();
    
    return a.exec();
}
#ifndef PALETTE_H
#define PALETTE_H

#include <QDialog>
#include <QComboBox>
#include <QLabel>
#include <QTextEdit>
#include <QPushButton>
#include <QLineEdit>

class Palette : public QDialog
{
    Q_OBJECT
    
public:
    Palette(QWidget *parent = 0);
    ~Palette();
    void createCtrlFrame();				//完成窗体左半部分颜色选择区的创建
    void createContentFrame();			//完成窗体右半部分的创建
    void fillColorList(QComboBox *comboBox);	//完成向颜色下拉列表框中插入颜色的工作
private slots:
    void ShowWindow();
    void ShowWindowText();
    void ShowButton();
    void ShowButtonText();
    void ShowBase();
private:
    QFrame *ctrlFrame;                  //颜色选择面板
    QLabel *windowLabel;
    QComboBox *windowComboBox;
    QLabel *windowTextLabel;
    QComboBox *windowTextComboBox;
    QLabel *buttonLabel;
    QComboBox *buttonComboBox;
    QLabel *buttonTextLabel;
    QComboBox *buttonTextComboBox;
    QLabel *baseLabel;
    QComboBox *baseComboBox;
    QFrame *contentFrame;              	//具体显示面板
    QLabel *label1;
    QComboBox *comboBox1;
    QLabel *label2;
    QLineEdit *lineEdit2;
    QTextEdit *textEdit;
    QPushButton *OkBtn;
    QPushButton *CancelBtn;
};

#endif // PALETTE_H
#include "palette.h"
#include <QHBoxLayout>
#include <QGridLayout>

Palette::Palette(QWidget *parent)
    : QDialog(parent)
{
    createCtrlFrame();
    createContentFrame();
    QHBoxLayout *mainLayout =new QHBoxLayout(this);
    mainLayout->addWidget(ctrlFrame);
    mainLayout->addWidget(contentFrame);
}

Palette::~Palette()
{
    
}
//完成窗体左半部分颜色选择区的创建
void Palette::createCtrlFrame()
{
    //创建QFrame容器
    ctrlFrame =new QFrame;                                   //颜色选择面板

    windowLabel =new QLabel(tr("QPalette::Window: "));
    windowComboBox =new QComboBox;
    fillColorList(windowComboBox);
    connect(windowComboBox,SIGNAL(activated(int)),this,SLOT(ShowWindow()));

    windowTextLabel =new QLabel(tr("QPalette::WindowText: "));
    windowTextComboBox =new QComboBox;
    fillColorList(windowTextComboBox);
    connect(windowTextComboBox,SIGNAL(activated(int)),this,SLOT(ShowWindowText()));

    buttonLabel =new QLabel(tr("QPalette::Button: "));
    buttonComboBox =new QComboBox;
    fillColorList(buttonComboBox);
    connect(buttonComboBox,SIGNAL(activated(int)),this,SLOT(ShowButton()));

    buttonTextLabel =new QLabel(tr("QPalette::ButtonText: "));
    buttonTextComboBox =new QComboBox;
    fillColorList(buttonTextComboBox);
    connect(buttonTextComboBox,SIGNAL(activated(int)),this,SLOT(ShowButtonText()));

    baseLabel =new QLabel(tr("QPalette::Base: "));
    baseComboBox =new QComboBox;
    fillColorList(baseComboBox);
    connect(baseComboBox,SIGNAL(activated(int)),this,SLOT(ShowBase()));

    QGridLayout *mainLayout=new QGridLayout(ctrlFrame);
    mainLayout->setSpacing(20);
    mainLayout->addWidget(windowLabel,0,0);
    mainLayout->addWidget(windowComboBox,0,1);
    mainLayout->addWidget(windowTextLabel,1,0);
    mainLayout->addWidget(windowTextComboBox,1,1);
    mainLayout->addWidget(buttonLabel,2,0);
    mainLayout->addWidget(buttonComboBox,2,1);
    mainLayout->addWidget(buttonTextLabel,3,0);
    mainLayout->addWidget(buttonTextComboBox,3,1);
    mainLayout->addWidget(baseLabel,4,0);
    mainLayout->addWidget(baseComboBox,4,1);
}

void Palette::createContentFrame()
{
    contentFrame =new QFrame;                                //具体显示面板

    //setAutoFillBackground(true)方法来启用自动填充控件背景色的功能
    contentFrame->setAutoFillBackground(true);

    //添加控件
    label1 =new QLabel(tr("请选择一个值:"));
    comboBox1 =new QComboBox;

    label2 =new QLabel(tr("请输入字符串:"));
    lineEdit2 =new QLineEdit;

    textEdit =new QTextEdit;

    //添加布局
    QGridLayout *TopLayout =new QGridLayout;
    TopLayout->addWidget(label1,0,0);
    TopLayout->addWidget(comboBox1,0,1);
    TopLayout->addWidget(label2,1,0);
    TopLayout->addWidget(lineEdit2,1,1);
    TopLayout->addWidget(textEdit,2,0,1,2);

    OkBtn =new QPushButton(tr("确认"));
    CancelBtn =new QPushButton(tr("取消"));

    QHBoxLayout *BottomLayout =new QHBoxLayout;
    BottomLayout->addStretch(1);
    //启用自动填充控件背景色的功能
    OkBtn->setAutoFillBackground(true);
    CancelBtn->setAutoFillBackground(true);

    //设置按钮为扁平化
    OkBtn->setFlat(true);
    CancelBtn->setFlat(true);

    BottomLayout->addWidget(OkBtn);
    BottomLayout->addWidget(CancelBtn);

    QVBoxLayout *mainLayout =new QVBoxLayout(contentFrame);
    mainLayout->addLayout(TopLayout);
    mainLayout->addLayout(BottomLayout);
}

void Palette::ShowWindow()
{
    //获取选中的颜色
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList[windowComboBox->currentIndex()]);

    //获得右部窗体 contentFrame 的调色板信息
    QPalette p = contentFrame->palette();
    //设置 contentFrame 窗体的 Window 类颜色,即背景色, 的第一个参数为设置的颜色主题,第二个参数为具体的颜色值
    p.setColor(QPalette::Window,color);
    contentFrame->setPalette(p);
    //更新显示
    contentFrame->update();
}

void Palette::ShowWindowText()
{
    QStringList colorList = QColor::colorNames();
    QColor color = colorList[windowTextComboBox->currentIndex()];

    QPalette p = contentFrame->palette();
    p.setColor(QPalette::WindowText,color);
    contentFrame->setPalette(p);
}

void Palette::ShowButton()
{
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList[buttonComboBox->currentIndex()]);

    QPalette p = contentFrame->palette();
    p.setColor(QPalette::Button,color);
    contentFrame->setPalette(p);

    contentFrame->update();
}

void Palette::ShowButtonText()
{
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList[buttonTextComboBox->currentIndex()]);

    QPalette p = contentFrame->palette();
    p.setColor(QPalette::ButtonText,color);
    contentFrame->setPalette(p);
}

void Palette::ShowBase()
{
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList[baseComboBox->currentIndex()]);

    QPalette p = contentFrame->palette();
    p.setColor(QPalette::Base,color);
    contentFrame->setPalette(p);
}

//完成向颜色下拉列表框中插入颜色的工作
void Palette::fillColorList(QComboBox *comboBox)
{
    //获取可用颜色的名称列表
    QStringList colorList = QColor::colorNames();
    QString color;
    //遍历QStringList
    foreach(color,colorList)
    {
        QPixmap pix(QSize(70,20));
        pix.fill(QColor(color));
        /*
         * QComboBox::addItem(const QIcon &icon, const QString &text, const QVariant &userData)
         * icon:一个 QIcon 对象,用于指定添加的项目在下拉列表中的图标。
         * text:一个字符串类型的参数,用于指定添加的项目在下拉列表中的显示文本。
         * userData:一个 QVariant 类型的参数,用于指定与添加的项目相关的数据。这可以是任何类型的数据,例如整数、字符串、自定义对象等。
        */
        comboBox->addItem(QIcon(pix),NULL);
        comboBox->setIconSize(QSize(70,20));
        //设置大小调整策略,下拉列表的大小将根据其内容自动调整
        comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
    }
}




效果展示:

十三、QPalette的简单使用(Qt5 GUI系列),C++/Qt GUI Demo仓库,qt,开发语言

三、代码解析

(1)使用setColor(QPalette::Button,color)设置Button背景颜色无效

十三、QPalette的简单使用(Qt5 GUI系列),C++/Qt GUI Demo仓库,qt,开发语言

        按照Qt帮助文档上的陈述来看setColor(QPalette::Button,color)可以改变Button的背景颜色,但是程序运行之后却只能改变按钮边框的颜色。解决办法可以使用样式表来设置背景颜色或者把按钮扁平化OkBtn->setFlat(true)。

四、总结

        使用上来说把感觉样式表会比这个QPalette更加灵活实用一点。可以根据不同的情况选择合适的方式。文章来源地址https://www.toymoban.com/news/detail-798901.html

到了这里,关于十三、QPalette的简单使用(Qt5 GUI系列)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130381428 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…   mysql驱动版本msvc2015x32版本调

    2023年04月26日
    浏览(80)
  • Qt之调色板(QPalette)

    在实际应用中,经常需要改变某个控件的颜色外观,如背景、文字颜色等。Qt提供的调色板类​​QPalette​​​专门用于管理对话框的外观显示。​​QPalette​​​类相当于对话框或控件的调色板,它管理着控件或窗体的所有颜色信息。每个窗体或控件都包含一个​​QPalette​

    2024年02月06日
    浏览(70)
  • 本仓库主要用来收集一些 Android 开发中常用的第三方 UI 库及其简单 Demo

    | 第三方库 | 介绍 | Demo | 使用说明 | | — | — | — | — | | CircleImageView | 显示圆形图片 | CircleImageViewDemo | Android UI Libs 之 CircleImageView.md | | android-gif-drawable | 显示 gif 图片 | android-gif-drawabledemo | Android UI Libs 之 android-gif-drawable.md | | AndroidSwipeLayout | 滑动布局,可以实现侧滑菜单与侧

    2024年04月15日
    浏览(49)
  • qt5使用msvc2017

    我自己电脑装了vs2022,如果你们装了vs2017,这步估计可以跳过 点开自己的visual studio installer 修改 点单个组件 搜索msvc 勾上这两个 点击修改 然后装msvc调试器 https://download.microsoft.com/download/4/2/2/42245968-6A79-4DA7-A5FB-08C0AD0AE661/windowssdk/winsdksetup.exe 直接全部下一步就好了 点开自己的

    2024年02月05日
    浏览(42)
  • 100个Python实战项目(十三)使用 Tkinter GUI 库构建闹钟应用程序

    本文主要是使用 Python 的 Tkinter 库创建一个简单的闹钟程序,它可以在指定的时间播放一个声音来提醒你。这个程序界面比较简单,只有一个标签、三个选项菜单和一个按钮,用户可以通过选项菜单设置闹钟的时间,然后点击按钮开始计时,直到闹钟时间到达时,程序会播放

    2023年04月16日
    浏览(43)
  • Qt5兼容使用之前Qt4接口 intersect接口

    项目卡中遇到编译报错, 错误 C2039 “intersect”: 不是“QRect”的成员 。 排查到依赖的第三方代码,使用 intersect 接口, 跟踪排查到头文件中使用了***#if QT_DEPRECATED_SINCE(5, 0)*** #if QT_DEPRECATED_SINCE(5, 0) 表示qt 5.0版本已经弃用这个接口,这个问题 就是使用弃用的版本接口,那么问

    2024年02月13日
    浏览(33)
  • Qt5.12实战之正则与QregExp使用

    1.普通字符匹配: ab+ : 匹配一个a和任意个b 如: ab abb abbbbbb c : 匹配一个c 如 : abcde 匹配内容: c 匹配开始索引:2 匹配结束索引 3 bcd : 匹配字符串 bcd 如: abcde 匹配内容是: bcd 匹配开始索引是:1 匹配结束索引是:4 2.转换符匹配: :转义字符匹配 如: r n t \\\\ ^ $ . 匹配的内容分别是 回

    2024年02月06日
    浏览(37)
  • 在Qt5中SQLite3的使用

    什么是SQLite SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态

    2024年02月09日
    浏览(45)
  • Qt5.12实战之使用QLabel控件显示图像与动画

    演示效果: 显示图像前先添加资源到qrc 直接复制到res目录 然后添加已存在目录 直接显示图像 加载图像成功后显示 显示gif动画 显示超链接

    2024年01月18日
    浏览(40)
  • 1.1.4 Qt信号槽之再谈Qt4与Qt5中信号槽使用的差异

    Differences between String-Based and Functor-Based Connections 通过上面的示例和分析,我们已经明显感受到Qt4和Qt5中connect的不同之处,但是Qt文档中有一篇文章专门叙述了Qt4和Qt5中connect的差异,这里根据此篇文章带着大家再深入了解拓展一下。 从Qt5开始,Qt提供了两种不同方法的信号槽连

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包