当前位置: 首页 > news >正文

【Qt】重写QComboBox下拉展示多列数据

需求

点击QComboBox时,下拉列表以多行多列的表格展示出来。

实现

直接上代码:

#include <QComboBox>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>
#include <QEvent>
#include <QMouseEvent>
#include <QLineEdit>
class ComboBoxWithTableWidget : public QComboBox {Q_OBJECTpublic:ComboBoxWithTableWidget(QWidget *parent = nullptr) : QComboBox(parent) {// 隐藏默认的下拉箭头setEditable(true);lineEdit()->setReadOnly(true);// 创建一个隐藏的容器来存放我们的表格popupWidget = new QWidget(this);popupWidget->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint);QVBoxLayout *layout = new QVBoxLayout(popupWidget);layout->setContentsMargins(0, 0, 0, 0);layout->setSpacing(0);tableWidget = new QTableWidget(5, 2, popupWidget); // 5行2列for (int row = 0; row < 5; ++row){for (int col = 0; col < 2; ++col){QTableWidgetItem *item = new QTableWidgetItem(QString("Item %1%2").arg(row).arg(col));tableWidget->setItem(row, col, item);}}tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);layout->addWidget(tableWidget);popupWidget->resize(220,200);connect(tableWidget, &QTableWidget::cellClicked, this, &ComboBoxWithTableWidget::onCellClicked);popupWidget->hide();}protected:void showPopup() override{if (popupWidget->isHidden()){QComboBox::showPopup();//popupWidget->resize(this->width(), tableWidget->height() + 2); //(可能需要调整)popupWidget->move(this->mapToGlobal(QPoint(0, this->height())));popupWidget->show();tableWidget->setFocus();}}void hidePopup() override{if (popupWidget->isVisible()){popupWidget->hide();QComboBox::hidePopup();}}private slots:void onCellClicked(int row, int column){QString text = tableWidget->item(row, column)->text();this->setCurrentText(text);hidePopup(); // 选择后隐藏下拉列表}private:QWidget *popupWidget = nullptr;QTableWidget *tableWidget= nullptr;
};

示例效果

相关文章:

【Qt】重写QComboBox下拉展示多列数据

需求 点击QComboBox时&#xff0c;下拉列表以多行多列的表格展示出来。 实现 直接上代码&#xff1a; #include <QComboBox> #include <QTableWidget> #include <QVBoxLayout> #include <QWidget> #include <QEvent> #include <QMouseEve…...

【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)

1、打开终端 2、步骤 &#xff08;1&#xff09;修改~/.zshrc文件 nano ~/.zshrc&#xff08;2&#xff09;添加或修改PS1&#xff0c;我是自定义了名字为“macminiPro” export PS1"macminiPro$ "&#xff08;3&#xff09;使用 nano: Ctrl o &#xff08;字母…...

基于Springboot的流浪宠物管理系统

基于javaweb的流浪宠物管理系统 介绍 基于javaweb的流浪宠物管理系统的设计与实现&#xff0c;后端框架使用Springbootmybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同权限级别…...

web博客系统的自动化测试

目录 前言测试用例编写自动化脚本测试准备博客登录页相关测试用例登陆成功登录失败 博客首页相关测试用例登陆成功登录失败 博客详情页相关测试用例登录成功登录失败 博客编辑页相关测试用例登陆成功登录失败 编写测试文档测试类型内容 前言 本次测试是运用个人写的一个博客系…...

【论文阅读】Multi-level Semantic Feature Augmentation for One-shot Learning

用于单样本学习的多层语义特征增强 引用&#xff1a;Chen, Zitian, et al. “Multi-level semantic feature augmentation for one-shot learning.” IEEE Transactions on Image Processing 28.9 (2019): 4594-4605. 论文地址&#xff1a;下载地址 论文代码&#xff1a;https:…...

网络知识面试

1、http状态码 101: 切换请求协议 200:(请求成功)。服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 301 : (永久移动,永久性重定向,会缓存) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。…...

图片预览 图片上传到服务器

首先要明白 理解 multipart/form-data&#xff1a;‌multipart/form-data是一种在HTTP请求中使用的MIME类型&#xff0c;主要用于在客户端和服务器之间传输包含文件或二进制数据的表单数据。它通过一个边界&#xff08;boundary&#xff09;来分隔不同的表单字段和文件数据‌。…...

前端:base64的作用

背景 项目中发现&#xff0c;img标签中写src&#xff0c;读取一个png图片&#xff0c;只有16kb&#xff0c;速度特别慢。 解决办法&#xff0c;将图片转为base64&#xff0c;然后读取&#xff0c;速度特别快17ms就解决。 定义&#xff1a;base64是一种基于64个可打印字符(A-…...

Django在fitler过滤不等于的条件

提问 django 在API接口fitler的时候如何过滤 category 不等于6的 解答 为了在AoYuStudentFilter中设置过滤category不等于6的条件&#xff0c;需要使用django_filters库中的exclude方法。不过直接在FilterSet中使用exclude可能不那么直观&#xff0c;因为FilterSet主要设计用…...

Spring Boot英语知识分享网站:技术与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

京准电钟:NTP网络校时服务器从入门到精准

京准电钟&#xff1a;NTP网络校时服务器从入门到精准 京准电钟&#xff1a;NTP网络校时服务器从入门到精准 1.前言 由计算机网络系统组成的分布式系统&#xff0c;若想协调一致进行&#xff1a;IT行业的“整点开拍”、“秒杀”、“Leader选举”&#xff0c;通信行业的“同步…...

C++趣味编程玩转物联网:用树莓派Pico控制四位数码管

数码管是一种常用的数字显示器件&#xff0c;广泛应用于电子时钟、记分牌和智能设备显示界面。在本项目中&#xff0c;我们将通过树莓派Pico板控制一个四位数码管模块&#xff0c;展示从 0000 到 9999 的数字动态显示。这不仅是一次硬件和软件结合的实践&#xff0c;还可以帮助…...

DRM(数字权限管理技术)防截屏录屏----视频转hls流加密、web解密播放

提示&#xff1a;视频转hls流加密、web解密播放 需求&#xff1a;研究视频截屏时&#xff0c;播放器变黑&#xff0c;所以先研究的视频转hls流加密 文章目录 [TOC](文章目录) 前言一、工具ffmpeg、openssl二、后端nodeexpress三、web播放四、文档总结 前言 ‌HLS流媒体协议‌&a…...

实验三 z变换及离散时间LTI系统的z域分析

实验原理 有理函数z 变换的部分分式展开 【实例2-1】试用Matlab 命令对函数 X ( z ) 18 18 3 − 1 − 4 z − 2 − z − 3 X\left(z\right)\frac{18}{183^{-1} -4z^{-2} -z^{-3} } X(z)183−1−4z−2−z−318​ 进行部分分式展开&#xff0c;并求出其z 反变换。 B[18]; A…...

Python中的DrissionPage详解

文章目录 Python中的DrissionPage详解一、引言二、DrissionPage的基本使用1、安装与启动2、元素定位与操作 三、高级功能1、截图功能2、数据提取3、与其他库的集成 四、具体使用示例五、总结 Python中的DrissionPage详解 一、引言 DrissionPage是一个强大的Python库&#xff…...

python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表

excel表格是大家经常用到的文件格式&#xff0c;各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据&#xff0c;使用xlwt库创建和编辑excel表&#xff0c;在办公自动化方面可以方便我们快速处理数据&#xff0c;帮助我们提升效率。 python之open…...

go语言怎么实现bash cmd里的mv功能?

在Go语言中实现类似于Bash命令行中的mv命令的功能&#xff0c;主要是通过文件系统的操作来完成的。mv命令可以用来移动文件或目录&#xff0c;也可以用来重命名文件或目录。在Go语言中&#xff0c;可以使用标准库中的os和io/ioutil包来实现这些功能。 以下是一个简单的例子&…...

Vue前端面试进阶(五)

使用Element UI开发的实际项目 在实际项目中&#xff0c;我使用Element UI来快速构建用户界面。Element UI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的桌面端组件库&#xff0c;它提供了丰富的UI组件&#xff0c;极大地提高了开发效率。然而&#xff0c;在使用过程中…...

面试手撕题积累

1、实现滑动窗口限流&#xff0c;允许每分钟最多有100个请求 阿里一面题。 核心&#xff1a; 时间窗口管理&#xff1a;滑动窗口会根据时间流逝不断更新&#xff0c;需要记录请求的时间戳&#xff0c;并根据当前时间计算窗口内的请求数量。 限流判断&#xff1a;每次请求到来…...

notepad++文件github下载

1、github下载网址&#xff1a;Releases notepad-plus-plus/notepad-plus-plus GitHub 2、找到操作系统支持的软件&#xff1a; 3、CSDN下载链接&#xff1a;https://download.csdn.net/download/u013083576/90046203...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...