Qt——HighLight篇

        用HighLight绘制高亮按钮,之前有一篇讲述绘制pushButton按钮颜色的QpushButton绘制圆角矩形并绘制背景颜色-CSDN博客,这个是扩展,另一种实现方案。

        想要将按钮的背景颜色设置为 Qt 的高亮显示颜色。可以使用 QPalette::Highlight 来获取 Qt 的高亮显示颜色。以下是修改后的代码示例:

void CustomButton::paintEvent(QPaintEvent *event) {
    QPushButton::paintEvent(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿

    // 获取 Qt 的高亮显示颜色并设置为按钮的背景颜色
    painter.setBrush(palette().color(QPalette::Highlight));

    // 绘制按钮的背景
    painter.drawRoundedRect(rect(), 4, 4);

    // 设置文本颜色为高亮显示颜色
    painter.setPen(palette().color(QPalette::HighlightedText));

    // 手动绘制按钮的文本
    painter.drawText(rect(), Qt::AlignCenter, text());
}

        在这个示例中,我们使用了 palette().color(QPalette::Highlight) 来获取 Qt 的高亮显示颜色,并将其设置为按钮的背景颜色。这样可以确保按钮的背景颜色与 Qt 的高亮显示颜色一致。

        QPalette 是 Qt 中用于管理控件外观的类之一。它定义了一组颜色(比如背景颜色、前景颜色等)以及其他外观属性,这些属性可以应用于 Qt 程序中的各种控件。

        QPalette::Highlight 是 QPalette 中的一个角色,用于指定突出显示的颜色,例如选中文本或者具有焦点的控件背景颜色。通常情况下,默认的突出显示颜色是蓝色。

        当你在 QPushButton 中使用 QPalette::Highlight 作为背景颜色时,它会应用默认的突出显示颜色,也就是蓝色。这是因为 QPushButton 默认使用系统的 QPalette,其中 QPalette::Highlight 是默认的突出显示颜色。

        如果你想要自定义 QPushButton 的突出显示颜色,你可以在设置 QPalette 时为 QPalette::Highlight 角色指定自定义的颜色。以下是一个示例:

QPalette pal = button->palette();
pal.setColor(QPalette::Highlight, QColor("#FF0000")); // 设置突出显示颜色为红色
button->setPalette(pal);

        这样设置之后,按钮的突出显示颜色将会是红色,而不是默认的蓝色。

        但是这种设置按钮颜色会有一个问题,就是窗口失去焦点的时候,按钮的颜色会变化,可以用以下方法解决:

        要实现按钮在失去焦点时依然显示高亮颜色,可以通过重写按钮的focusOutEvent事件,并在其中更新按钮的绘制状态以保持高亮颜色。以下是一个示例代码,演示了如何在按钮失去焦点时依然显示高亮颜色:

#include <QPushButton>
#include <QPainter>
#include <QFocusEvent>

class CustomButton : public QPushButton
{
public:
    CustomButton(QWidget *parent = nullptr) : QPushButton(parent)protected:
    void paintEvent(QPaintEvent *event) override
    {
        QPushButton::paintEvent(event);

        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        // 检查按钮是否具有焦点,如果没有焦点,则设置高亮颜色
        if (!hasFocus()) {
            painter.setBrush(palette().color(QPalette::Highlight));
            painter.setPen(palette().color(QPalette::HighlightedText));
        }

        painter.drawRoundedRect(rect(), 4, 4);
        painter.drawText(rect(), Qt::AlignCenter, text());
    }

    void focusOutEvent(QFocusEvent *event) override
    {
        QPushButton::focusOutEvent(event);

        // 重绘按钮以更新颜色
        update();
    }
};

        在这段代码中,我们首先重写了CustomButton的paintEvent函数,并在其中检查按钮是否具有焦点。如果按钮失去焦点,我们设置按钮的背景颜色为高亮颜色(Highlight)并设置文本颜色为高亮文本颜色(HighlightedText)。接着,我们绘制按钮的背景和文本。

        另外,我们还重写了focusOutEvent函数,当按钮失去焦点时,调用update()函数来触发重绘,以更新按钮的颜色状态。

        通过这种方式,按钮在失去焦点时会保持高亮颜色的显示效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/607937.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ZYNQ MPSoC zcu102 PS端运行helloworld

文章目录 一、参考资料二、需要注意的步骤三、运行结果 一、参考资料 1.zcu102 zynq Mpsoc uart hello world——CSDN博客 2.zcu102自学 —— 第一个实验 &#xff08;纯PS 串口打印 Hello world&#xff09;——CSDN博客 3.【02】ALINX Zynq MPSoC XILINX FPGA视频教程 SDK 裸…

Linux:进程信号(一)信号的产生

目录 一、信号是什么&#xff1f; 二、Linux信号 三、信号处理方式 四、信号的产生 1、 通过终端按键产生信号 2、调用系统函数向进程发信号 3、 硬件异常产生信号 一、信号是什么&#xff1f; 在生活中&#xff0c;有许多信号&#xff0c;比如红绿灯&#xff0c;下课铃声…

如何使用Transformer-TTS语音合成模型

1、技术原理及架构图 ​ Transformer-TTS主要通过将Transformer模型与Tacotron2系统结合来实现文本到语音的转换。在这种结构中&#xff0c;原始的Transformer模型在输入阶段和输出阶段进行了适当的修改&#xff0c;以更好地处理语音数据。具体来说&#xff0c;Transformer-TT…

【Docker】新手教程的第一个demo:Wordpress

1 任务简单介绍 WordPress是什么&#xff1a; 是一个常用博客软件简单易部署&#xff0c;只需要两个容器&#xff08;业务容器 数据库容器&#xff09; 本文借鉴博客&#xff0c;使用自建 WordPress 容器方法在Docker上部署Wordpress&#xff0c;本地环境为Mac时使用该博客…

C语言leetcode刷题笔记2

C语言leetcode刷题笔记2 第4题&#xff1a;283.移动零互换直接移动 第5题&#xff1a;122.买卖股票的最佳时机‖递归&#xff08;超时&#xff09;动态规划贪心算法 第6题&#xff1a;49.字母异位词分组优化 第4题&#xff1a;283.移动零 给定一个数组 nums&#xff0c;编写一…

分布式事务Seata使用

我们要学习seata&#xff0c;首先需要具备如下技术储备&#xff1a; 数据库事务的基本知识&#xff1b;maven工具的使用&#xff1b;熟悉SpringCloudAlibaba技术栈&#xff1b;掌握SpringDataJPA简单使用&#xff1b; 一. Seata基本概念 1.seata是什么 Seata是阿里巴巴中间…

C++ 动态内存管理

例如&#xff1a;动态内存和释放单个数据的存储区 一 用new运算符初始化单个数据的存储区 举例

pytest + yaml 框架 - 参数化读取文件路径优化

针对小伙伴提出参数化时读取外部文件&#xff0c;在项目根路径运行没问题&#xff0c;但是进入到项目下子文件夹运行用例&#xff0c;就会找不到文件问题做了优化。 关于参数化读取外部文件相关内容参考前面这篇pytest yaml 框架 -25.参数化数据支持读取外部文件txt/csv/json/…

LeetCode 257. 二叉树的所有路径

LeetCode 257. 二叉树的所有路径 1、题目 题目链接&#xff1a;257. 二叉树的所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root…

C++:内存管理

C:内存管理 一、C/C内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、C内存管理方式1.new/delete操作内置类型2.new和delete操作自定义类型 四、operator new与operator delete函数&#xff08;重点&#xff09;五、new和delete的实现原理1.内置…

Unity曲线插件Dreamteck Splines生成曲线Mesh

一、需求 脱离编辑器&#xff0c;运行时添加点&#xff0c;动态生成管道、线缆等曲线Mesh。 二、Dreamteck Splines简单运用 这方面资料不多&#xff0c;只有官方文档全英参考&#xff0c;而且又介绍得不详细。 2个重要组件介绍&#xff1a; SplineComputer&#xff1a; 最…

系统运维(虚拟化)

1.VLAN VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。 每个VLAN是一个广播域&#xff0c;VLAN内的主机间可以直接通信&#xff0c;而VLAN间则不能直接互通。这样&#xff0c;广播报…

987: 输出用先序遍历创建的二叉树是否为完全二叉树的判定结果

解法&#xff1a; 一棵二叉树是完全二叉树的条件是&#xff1a; 对于任意一个结点&#xff0c;如果它有右子树而没有左子树&#xff0c;则这棵树不是完全二叉树。 如果一个结点有左子树但是没有右子树&#xff0c;则这个结点之后的所有结点都必须是叶子结点。 如果满足以上条…

1010: 折半查找的实现

解法&#xff1a; #include<iostream> #include<vector> using namespace std; void solve() {int n;cin >> n;vector<int> vec(n);for (int& x : vec) cin >> x;int x;cin >> x;int l 0, r n-1, cnt 0;while (l < r) {cnt;int…

Ubuntu22.04下安装kafka_2.12-2.6.0并运行简单实例

目录 一、版本信息 二、安装Kafka 1. 将Kafka安装包移到下载目录中 2. 安装Kafka并确保hadoop用户对Kafka目录有操作权限 三、启动Kafka并测试Kafka是否正常工作 1. 启动Kafka 2. 测试Kafka是否正常工作 一、版本信息 虚拟机产品&#xff1a;VMware Workstation 17 Pro…

一套C语言开发的 PACS影像系统源码 PACS系统的基本概念、系统业务流程

PACS系统基本概念 PACS&#xff0c;全称 Picture Archiving and Communication Systems&#xff0c;中文意为影像归档和通信系统。它是应用于医院影像科室的一种系统&#xff0c;主要任务是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#…

Faststone Capture:高效屏幕捕获神器评测【AI写作】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

Java毕设之基于SpringBoot的在线拍卖系统

运行环境 开发语言:java 框架:springboot&#xff0c;vue JDK版本:JDK1.8 数据库:mysql5.7(推荐5.7&#xff0c;8.0也可以) 数据库工具:Navicat11 开发软件:idea/eclipse(推荐idea) 系统详细设计 管理员功能模块 管理员登录&#xff0c;管理员通过输入用户名、密码、角色等信…

AI日报:干翻AI PC!苹果M4芯片首发;GoEnhance可生成粘土风格视频;DeepSeek-V2模型已在魔搭社区开源

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 1、干翻AI …

Zip压缩归档库-libzip介绍

1.简介 libzip是一个C库&#xff0c;用于读取、创建和修改zip格式的压缩文件。它支持从zip文件中读取、写入、添加和删除文件&#xff0c;还支持密码保护的zip文件。libzip是跨平台的&#xff0c;可以在多种操作系统上使用&#xff0c;包括Linux、Windows和macOS。 常用接口介…