Qt——HighLight篇

2024-05-10 03:12
文章标签 qt highlight

本文主要是介绍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()函数来触发重绘,以更新按钮的颜色状态。

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

这篇关于Qt——HighLight篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975269

相关文章

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设