Qt 自定义颜色下拉控件

2023-11-07

效果:
在这里插入图片描述
其实,在这里之前看了许多自定义颜色控件,有的是采用继承QPushButton。点击后,直接弹出 QColorDialog,然后重写 paintEvent()函数,绘制背景为选中的颜色。但是,没有下拉选择颜色的感觉。

也有的继承 QCombox。在 item 项中添加颜色和文本。通过下拉数据项来选择。
如下所示,
在这里插入图片描述
但是,如果通过下拉数据项来选择的话,如果颜色较多,则不适用。

因此我采用继承QCombox。点击后,弹出一个 Popup 的窗体(通过 setWindowFlags(flags) 设置)。
这样的话,点击窗体外面的部分,会自动关闭该窗体

我们知道,继承 QCombox。如果重写 paintEvent()函数的话,则不会执行QCombox 中的 paintEvent,(子类重写父类的方法,调用子类方法时父类方法则不执行)。也就是原有QCombox 的样式会没有,需要我们在重新绘制。(类似此时就是一个QWidget样式)。

而我们的需求只是需要改变 QCombox 中 LineEdit 中的背景颜色。其余的样式不变(下拉样式等)。

因此我们需要了解QCombox的构成。

Qt—自定义界面之QStyle 这里推荐这位老哥的文章,描述的很清楚,我这里也只是做一些用法上的引用。

在这里插入图片描述
这里我们重写了paintEvent()。为了保持原有的样式结构,我们可以查看QCombox 的源码,发现样式的绘制采用的是 QStyle。在这篇文章里我描述了一下 Qt QStyle

this->initStyleOption(&butOpt);
style->drawComplexControl(QStyle::CC_ComboBox,&butOpt,&painter,this);

其实,上面这些代码,就可以通过QStyle 绘制 QCombox 原有的样式了。

我们可以将该部分代码拷贝出来,复制到重写的 paintEvent()中,使它保持原有的样式,在原有样式的基础上在改造它。

代码如下:

void CustomCombox::initStyleOption(QStyleOptionComboBox *option) const
{
    option->initFrom(this);
    option->editable = isEditable();

    if (hasFocus() && !option->editable)
        option->state |= QStyle::State_Selected;

    option->subControls = QStyle::SC_All;
    if (this->m_barrowState == QStyle::State_Sunken) {
        option->activeSubControls = QStyle::SC_ComboBoxArrow;
        option->state |= this->m_barrowState;
    } else {
        option->activeSubControls = this->hoverControl;
    }
}

void CustomCombox::paintEvent(QPaintEvent *e)
{
    Q_UNUSED(e);

    QPainter painter(this);
	//获取QStyle样式
    QStyle *style = QWidget::style();
	//QCombox样式
    QStyleOptionComboBox butOpt;
    this->initStyleOption(&butOpt);
	// 绘制文本
    style->drawControl(QStyle::CE_ComboBoxLabel, &butOpt, &painter, this);
    //绘制复杂Combox样式
    style->drawComplexControl(QStyle::CC_ComboBox,&butOpt,&painter,this);

    //获得子元素矩形范围
    QRect labelRect = style->subControlRect(QStyle::CC_ComboBox,&butOpt,QStyle::SC_ComboBoxEditField, this);

    QColor fillCol = backgroundColor;
    painter.fillRect(labelRect, fillCol);

    //返回指定像素值指标的值
//    style->pixelMetric(QStyle::PM_ComboBoxFrameWidth)
//    qDebug()<<"paintEvent";
}

上面,我们获取了 子元素(SC_ComboBoxEditField)矩形的范围:

QRect labelRect = style->subControlRect(QStyle::CC_ComboBox,&butOpt,QStyle::SC_ComboBoxEditField, this);

在通过绘制矩形区域修改颜色。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 自定义颜色下拉控件 的相关文章

  • 如何通过 Qt 创建网络服务 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 QT 安装程序框架中区分每用户安装与系统范围安装?

    我正在使用一些名为 pgModeler 的应用程序 它的当前版本提供了一个基于 QT 安装程序框架的安装程序 Windows 上该安装程序的问题是它安装每个用户的开始菜单条目 https github com pgmodeler pgmod
  • 第一个随机数始终小于其余随机数

    我碰巧注意到 在 C 中 使用 std rand 方法调用的第一个随机数大多数时候都明显小于第二个随机数 关于 Qt 实现 第一个几乎总是小几个数量级 qsrand QTime currentTime msec qDebug lt lt q
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 获取 QPushButton 在 2D 数组 QPushButton 上的索引

    我有一个二维数组QPushButton 当用户单击按钮时如何获取按钮的索引 例如当用户单击按钮时a 2 3 它会显示 2 3 该示例如下所示 Qt 4 5 使用对象名称 您可以为按钮指定唯一的对象名称 理想情况下 名称应该是有效的 C 标识
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 打开和关闭附加窗口 (QML)

    目前我有一个通过以下方式打开的窗口 property variant win Button id testButton MouseArea onClicked var component Qt createComponent test qm
  • Qt5和QML:如何使用WebEngine Quick Nano浏览器自动输入用户名和密码

    我正在使用编写一个小应用程序Qt and QML使用 Qt 文档中的示例WebEngine Quick Nano 浏览器 https doc snapshots qt io qt5 5 9 qtwebengine webengine qui
  • 用 C++/Qt 编写的程序中的 RTF / doc / docx 文本提取

    我正在写一些程序Qt https en wikipedia org wiki Qt 28software 29 C 我需要从中读取文本微软Word https en wikipedia org wiki Microsoft Word RTF
  • QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停其操作?

    从多个线程调用以下附加函数 我不希望数据重写附加 因为计数器尚未增加 除了当前使用 Append 的线程之外 这是否会挂起所有进入的线程 或者其他线程会继续运行而不追加数据吗 互斥锁是否需要是 静态 的 或者每个实例都知道要暂停操作吗 如果
  • 如何让小部件在上下文菜单出现时接收鼠标释放事件

    在Ubuntu20 04上 当上下文菜单出现时 我无法让小部件接收鼠标释放事件 而Windows可以接收 我的pyqt版本是5 15 2 我考虑过手动发送鼠标释放事件 但我不知道当上下文菜单出现时哪些系统会收到鼠标释放事件 这样做可能会导致
  • QT:删除QGridLayout中QLabel之间的空格

    我将一些具有不同颜色的 QLabels 添加到 QGridLayout 作为 QWidget 的布局 现在我在每个 Qlabel 与下一个 Qlabel 之间有一个间距 我想将其删除 我尝试将标签的边距设置为 0 将 GridLayout
  • 获取 QListView 中所有可见项目的简单方法

    我正在尝试使用 Qt Framework 开发一个图像库应用程序 应用程序从所选文件夹加载所有图像 并使用 QListView 控件显示这些图像 但现在我想通过仅加载用户可见的图像来减少内存消耗 由于没有直接函数来获取视图中的所有可见项目
  • QML 中可重用的字体属性[重复]

    这个问题在这里已经有答案了 在 QML 中 我希望能够定义一组字体属性以进行简单的语义重用 例如 代替 Text text This is a header font family Encode Sans weight Font Black
  • 如何在针对 Windows XP 的情况下使用 VS2012 构建 Qt 4/5?

    我正在尝试使用 Visual Studio 2012 构建 Qt 4 8 5 Qt 5 2 1 针对 Windows XP SDK v7 1a 使用 VS2102 编译时 源代码与 SDK v7 1a 存在各种不兼容性 因此无法开箱即用 这
  • QTableView 并双击一个单元格

    我正在开发测试用例编辑器 该编辑器包含 USART 传输和接收数据包格式 编辑器是一个表格视图 发送和接收数据包的长度为八个字节 例如 0x01 0x02 0x03 0x08 它在我的第五和第六栏中 现在 我希望此列中的单元格为只读 但是当
  • Mac OS X 上的 Qt 字体系列和样式

    我有一个基于 Qt PyQt 的 GUI 应用程序 在 Mac OS X 和其他平台 上运行 它允许用户选择字体并具有粗体和斜体选项的复选框 在更新到新的基于 Cocoa 的 Qt 时 用户发现QFontComboBox不再显示不同的字体样
  • PyQt4 QPalette 不工作

    btn QtGui QPushButton Button self palettes btn palette palettes setColor btn backgroundRole QtCore Qt green btn setPalet
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A

随机推荐

  • CelebA人脸数据集

    CeleA是香港中文大学的开放数据 包含10177个名人身份的202599张图片 并且都做好了特征标记 这对人脸相关的训练是非常好用的数据集 官网链接 网盘链接 别看只是一堆人脸 他们很贴心地做好了特征标记 也就是说 你可以找到类似下面这些
  • python(1): subprocess子进程交互

    个人总结 有错欢迎指出 1 单纯使用popen调用外部程序 stdin write stdout read写入 读取 这两个方法都会等到子进程结束 原因 产生这种现象的原因也非常简单 就是标准输出和标准错误有一个缓存的概念 它不会立即将程序
  • OpenCV——彩色图像添加高斯噪声

    目录 一 高斯噪声 二 C 代码 三 python代码 四 结果展示 1 原始图像 2 添加高斯噪声 一 高斯噪声 高斯分布 也称正态分布 又称常态分布 记为 N 2
  • 尝试进行输出

    今天心看到的概念 学习 认知 我对这个观念有点疑问 不如说 学习和认知有很大练习 可以说我认为 学习是认知的一部分 因此 想要提高学习能力 就可以从提高认知能力入手 所以我去查了一下认知方面的书 把 认知天性 加入到了我的kindle里 费
  • 基于 OpenVINO™ 的 AI 视觉应用基础课学习笔记(一)人工智能发展

    第一讲是概述性的内容 人工智能发展 人工智能概述 人工智能 让机器的行为看起来就像是人所表现出的智能行为一样 图灵测试 一个人在不接触对方的情况下 通过一种特殊的方式 和对方进行一系列的问答 如果在相当长的时间里 他无法根据这些问题判断对方
  • R语言和医学统计学(10):正态性和方差齐性检验

    本文首发于公众号 医学和生信笔记 完美观看体验请至公众号查看本文 医学和生信笔记 专注R语言在临床医学中的使用 R语言数据分析和可视化 文章目录 前言 正态性检验 shapiro wilk检验 kolmogorov smimov检验 方差齐
  • 使用kali破解win7密码

    虚拟机密码忘了 修改启动顺序为CD 设置虚拟机光盘镜像为kali ISO 这里用的是kali 2017 2 开启按f2进入kali live 模式 fdisk l 查看磁盘分区 找到win7虚拟机所使用的磁盘 mount dev sda1
  • 以前的windows安装文件可以删除吗_C盘里的文件夹都有何用?可以删除吗?哪些可以删除?...

    众所周知 C盘里的文件不能随意动 特别重要 那么打开C盘 我们可以在根目录下看到一些特定的文件夹 这些文件夹是干嘛用的呢 里面放着什么东西 哪些可以删除呢 今天蝈蝈就来给大家谈谈这个问题 以下是文件夹名及其介绍 不同系统 不同用户C盘里的文
  • 初识冯诺依曼体系结构

    目录 1 冯诺依曼体系结构 2 冯诺依曼体系的原理 3 数据流向 4 冯诺依曼体系的意义 1 冯诺依曼体系结构 我们常见的计算机 如笔记本 我们不常见的计算机 如服务器 大部分都遵守冯诺依曼体系 1 输入单元 包括键盘 鼠标 扫描仪 写板等
  • .NET混淆器Dotfuscator怎样利用切除和水印保护应用程序?

    Dotfuscator是一个 NET的Obfuscator 它提供企业级的应用程序保护 大大降低了盗版 知识产权盗窃和篡改的风险 Dotfuscator的分层混淆 加密 水印 自动失效 防调试 防篡改 报警和防御技术 为世界各地成千上万的应
  • Html小知识点和sublime部分用法

    主要的开发工具 chrome sublime photoshop 二 web标准有三个标准组成 1 结构标准 结构用于对网页元素进行整理和分类 我们主要学的是HTML 2 表现标准 表现用于设置网页的版式 颜色 大小等外观样式 主要指的是c
  • metaq/rocketmq入门学习

    MetaQ是一款分布式 队列模型的消息中间件 基于发布订阅模式 有Push和Pull两种消费方式 支持严格的消息顺序 亿级别的堆积能力 支持消息回溯和多个维度的消息查询 metaq是rocketmq的开源版本 rocketmq的一些文档 h
  • 创建QT项目

    经过了令人苦恼的版本选择 然后又经历了IDE熟悉以及纯C 应用的创建 接下来终于进入了激动人心的时刻 开启第一个QT项目 使用创建向导创建QT项目 文件 gt 新建文件或项目 选择应用 窗口应用 根据自己的实际情况 配置项目名称和项目保存的
  • 画流程图都可以用哪些工具?

    在日常生活中 我相信我们很多人都看到过流程图 对于设计师来说 它还需要涉及流程图来反映用户的旅程和交互方式 那么你知道哪些流行的流程图设计软件呢 作为高级设计师 我今天推荐10款流程图设计软件 你可以和我一起读这篇文章 即时设计 即时设计是
  • uni-app 从零开始第三章:底部 tabBar

    pages json 页面路由 uni app官网 一 新建 home页面 找到pages目录 新增一个home的页面 勾选上同时新建文件夹 新建完成后 pages json 中 会自动添加上刚刚新建的文件信息 二 新增tabBar数据 在
  • Seaborn做图系列①——直方图&箱型图&散点图&变量关系图&回归图&热力图&条形图

    数据可视化系列汇总 Matplotlib可视化 二维图表绘制 折线图 直方图 散点图 条形图 箱形图 Matplotlib可视化 3D绘制散点图 曲面图 折线图 等高线图 Excel数据分析高级技巧 动态图表制作 offset vlooku
  • 26_Java判断String是否以某个字符串开头或结尾

    Java判断String是否以某个字符串开头 String mobile 8618730600000 System out println mobile startsWith 86 输出true System out println mob
  • VSCode+PHPstudy配置PHP开发环境

    第一步 下载安装VSCode编辑器 第二步 下载安装PHPstudy集成环境 第三步 打开PHPstudy 选择界面左侧中的环境 第四步 点击右侧PHP运行环境下面的更多 选择适合的PHP版本 第五步 点击PHPstudy左侧环境 再点击右
  • 基于 Docker 来安装 FastDFS

    文章目录 百度百科 FastDFS 简介 FastDFS 存储策略 上传交互过程 下载交互过程 FastDFS的文件同步 FastDFS 为什么要结合 Nginx 其他资源 FastDFS 安装 环境准备 创建工作目录 docker com
  • Qt 自定义颜色下拉控件

    效果 其实 在这里之前看了许多自定义颜色控件 有的是采用继承QPushButton 点击后 直接弹出 QColorDialog 然后重写 paintEvent 函数 绘制背景为选中的颜色 但是 没有下拉选择颜色的感觉 也有的继承 QComb