Qt ComboBox 下拉框设置多列

news2024/11/27 13:47:23

Qt ComboBox 下拉框设置多列

在这里插入图片描述
通过设置listview实现。

class MultiColumnComboBoxItemDelegate;
class MultiColumnComboBoxListView;

class MultiColumnComboBox : public QComboBox
{
    Q_OBJECT
public:
    explicit MultiColumnComboBox(QWidget *parent = nullptr);
    ~MultiColumnComboBox();
protected:
       void showPopup() override;;
private:
    MultiColumnComboBoxItemDelegate *m_Delegate = nullptr;
    MultiColumnComboBoxListView *m_ListView = nullptr;
};



class MultiColumnComboBoxListView: public QListView
{
    Q_OBJECT
public:
    explicit MultiColumnComboBoxListView(QWidget *parent = nullptr);
    ~MultiColumnComboBoxListView();
};



class MultiColumnComboBoxItemDelegate: public QStyledItemDelegate
{
    Q_OBJECT
public:
    MultiColumnComboBoxItemDelegate(QObject* parent = nullptr);
    ~MultiColumnComboBoxItemDelegate();
    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
private:

    int m_width;
    friend class MultiColumnComboBox;
};

MultiColumnComboBox::MultiColumnComboBox(QWidget *parent)
    : QComboBox(parent)
    , m_Delegate(new MultiColumnComboBoxItemDelegate(this))
    , m_ListView(new MultiColumnComboBoxListView(this))
{
    setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow);

    setView(m_ListView);

    setItemDelegate(m_Delegate);

    setMaxVisibleItems(6);

    setFocusPolicy(Qt::ClickFocus);
}

MultiColumnComboBox::~MultiColumnComboBox()
{
    if(nullptr != m_Delegate)
    {
        delete m_Delegate;
        m_Delegate = nullptr;
    }
    if(nullptr != m_ListView)
    {
        delete m_ListView;
        m_ListView = nullptr;
    }
}

void MultiColumnComboBox::showPopup()
{
    int rowHeight = view()->sizeHintForRow(0);
    int rowNum = model()->rowCount();
    int showRows = 0;
    for(int curRow = 0; curRow<rowNum; curRow++)
    {
        if(!m_ListView->isRowHidden(curRow))
        {
            showRows++;
        }
    }
    int maxrow = showRows;
    if(maxrow > maxVisibleItems())
    {
        int curCloumn = ceil(double(maxrow) / double(maxVisibleItems()));
        m_Delegate->m_width = this->width();
        view()->setMinimumWidth(curCloumn * this->width() + 5);
        maxrow = ceil(double(maxrow) / double(curCloumn));
        if(maxrow < maxVisibleItems())
        {
            setMaxVisibleItems(maxrow);
        }
    }
    else
    {
        m_Delegate->m_width = this->width();
        view()->setMinimumWidth(this->width() + 5);
    }
    QComboBox::showPopup();
    view()->setMinimumHeight(rowHeight * maxrow + 5);
}




MultiColumnComboBoxListView::MultiColumnComboBoxListView(QWidget *parent)
    :QListView(parent)
{
    setSpacing(0);
    setResizeMode(QListView::Adjust);
    setFlow(QListView::TopToBottom);
    setWrapping(true);
}

MultiColumnComboBoxListView::~MultiColumnComboBoxListView()
{

}


MultiColumnComboBoxItemDelegate::MultiColumnComboBoxItemDelegate(QObject *parent)
    :QStyledItemDelegate(parent)
{
}

MultiColumnComboBoxItemDelegate::~MultiColumnComboBoxItemDelegate()
{

}


QSize MultiColumnComboBoxItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    auto originalSize = QStyledItemDelegate::sizeHint(option, index);
    originalSize.setWidth(m_width);
    return originalSize;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux -- 进阶 自动挂载服务 ( autofs ) 介绍及安装 主配置文件分析

背景引入 &#xff1a; 针对于 挂载 &#xff0c; 大家有没有思考过一个问题&#xff0c;如果我们需要挂载的文件或访问的远程数据甚至只是挂载一些设备&#xff0c;如果太多的话&#xff0c;数量很大的话&#xff0c;那 光每次挂载 敲的 mount 命令&#xff0c;都得敲很多遍…

Flask 文件上传,删除上传的文件

目录结构 app.py from flask import Flask, request, render_template, redirect, url_for import osapp Flask(__name__) BASE_DIR os.getcwd() UPLOAD_FOLDER os.path.join(BASE_DIR, testfile)app.route(/) def home():files os.listdir(UPLOAD_FOLDER)return render_t…

如何对maven项目进行打jar包,出现不能打包的情况

若没有正确执行相应的操作,就会出现模块依赖无法找到的情况 Could not find artifact xxx:caro2o-system:pom:3.8.5 in public (https://maven.aliyun.com/repository/public)正确的打包操作 1.将现有的包清空 2.重新下载包 3.为确保数据正确,再次进行打包操作 4.观察控制…

【Python】基于Python和Qt的海康威视相机开发

文章目录 0 前期教程1 前言2 例程解析3 图像获取4 其他问题与解决办法5 使用到的python包 0 前期教程 【项目实践】海康威视工业相机SDK开发小白版入门教程&#xff08;VS2015OpenCV4.5.1&#xff09; 1 前言 此前写了一篇基于C开发海康威视相机的博客&#xff0c;貌似看的人…

设计模式结构型——享元模式

目录 什么是享元模式 享元模式的实现 享元模式的特点 什么是享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;享元模式中的“享元”指被共享的单元&#xff0c;享元模式通过复用对象&#xff0c;以达到节省内存的目的。要求能够…

[数学建模] [2019年A 模拟练习][层次分析法、熵值法、多目标优化、主成分分析法] 4. 深圳居民健康水平评估与测控模型研究

1、前言 2019年“深圳杯”数学建模挑战赛A题 原题&#xff0c;这个是当时学校内部校赛所作&#xff0c;为了拿到参加国赛名额&#xff0c;也权当是做一个简单的练手。 本次练习属于综合评判类&#xff0c;常用的方法无非 层次分析法、熵值法、多目标优化、主成分分析法 等&am…

简单了解内存泄漏(C++)

文章目录 定义举例内存泄漏的危害内存泄漏的种类如何避免内存泄漏 定义 内存泄漏是指在程序运行过程中&#xff0c;申请的内存空间没有被正确释放或回收&#xff0c;导致这些内存无法再次使用的情况。简而言之&#xff0c;内存泄漏就是程序中已经分配的内存没有被及时释放&…

APP抓包-代理转发绕过反代理+Xposed绕过证书校验

某牛牛安卓app防抓包 夜神模拟器打开牛牛&#xff0c;出现网络连接失败等情况。明明网络一切正常&#xff0c;为什么会这样呢&#xff1f; 因为牛牛设置了反代理&#xff0c;而我开启了代理 burp也无任何牛牛的数据包产生 关闭代理之后牛牛就正常了&#xff0c;可恶的牛牛啊&am…

Localizing Moments in Video with Natural Language论文笔记

0.文献地址 2017 Localizing Moments in Video with Natural Language 1.摘要 提出了Moment Context Network&#xff08;MCN&#xff09;有效地定位视频中的自然语言查询又提出了唯一识别对应时刻的文本描述的数据集DiDeMo 2.引言 作者提出了问题如果查询特定的时间段&am…

算法竞赛备赛之经典数据结构训练提升,暑期集训营培训

1.链表与邻接表&#xff1a;树与图的存储 我们将结构体和指针结合来实现链表 struct Node {int val;Node * next; }; ​ new Node;//这样创建结点是相当慢的 我们算法主要是用数组来模拟链表&#xff0c;这样效率会高一些。 数组模拟单链表 邻接表&#xff1a;存储图和树 实…

Spring Cloud【实现用户鉴权(什么是JWT、JWT原理、用户微服务、JWT工具类、用户服务实现JWT鉴权)】(八)

目录 Gateway解决如何允许跨域 服务网关Gateway实现用户鉴权_什么是JWT 服务网关Gateway实现用户鉴权_JWT原理 服务网关Gateway实现用户鉴权_用户微服务 服务网关Gateway实现用户鉴权_JWT工具类 服务网关Gateway实现用户鉴权_用户服务实现JWT鉴权 Gateway解决如何允许跨域…

5分钟开发一个AI论文抓取和ChatGPT提炼应用

5分钟开发一个AI论文抓取和ChatGPT提炼应用 第一步 点击“即刻开始” -选择模板 python -修改标题 “AIPaper”&#xff0c;项目标识“AIPaper”&#xff0c;点击“创建项目” 第二步 在编程区域右侧AI区域&#xff0c;输入框输入以下内容&#xff1a; 请根据下面的内容&…

4.3 Bootstrap CSS编码规范

文章目录 Bootstrap CSS编码规范语法声明顺序不要使用 import媒体查询&#xff08;Media query&#xff09;的位置带前缀的属性单行规则声明简写形式的属性声明Less 和 Sass 中的嵌套注释class 命名选择器代码组织编辑器配置 Bootstrap CSS编码规范 语法 用两个空格来代替制表…

Autosar通信入门系列04-聊聊CAN通信的Basic-CAN与Full-CAN

本文框架 1. 概述2. 基本内容2.1 什么是Basic-CAN与Full-CAN&#xff1f;2.2 既生瑜何生亮&#xff1f; 3. 不同报文类型如何选择Basic-CAN与Full-CAN&#xff1f; 1. 概述 在CAN通信学习时我们经常会遇到或者听同事聊到Basic-CAN与Full-CAN&#xff0c;单从字面上很难理解两个…

计讯物联工业路由器基于5G LAN技术成为工业互联网发展的“加速器”

随着5G的成熟发展&#xff0c;其易部署、低时延、高可靠、大带宽、广连接的特性助力传统工业智能数字化转型&#xff0c;解决了传统工业的布线繁琐、通信环境复杂易造成干扰、对时延与稳定性更加敏感、移动通信的网络需求、海量设备互联等难题。然而&#xff0c;5G在工业制造领…

软件测试基础 - 自动化测试技术

目录 前言&#xff1a; 什么是自动化测试&#xff1f; 自动化测试的优势&#xff1a; 自动化测试的劣势&#xff1a; 适合实施测试自动化的项目&#xff1a; 推行自动化测试的阻力&#xff1a; 软件研发生命周期各个阶段的自动化测试技术 前言&#xff1a; 软件测试是一…

还在手动维护Yapi?

因前后端人员通过接口定义字段&#xff0c;返回值等对接时非常苦恼&#xff0c;没有一个很好的平台维护&#xff0c;后端每次迭代都要写开发文档&#xff0c;需求变化&#xff0c;多系统联调等&#xff0c;给前后端联调造成阻塞。 1、后端开发文档编写规范 1&#xff09;文档…

DataWhale AI夏令营——机器学习

DataWhale AI夏令营——机器学习 学习记录一1. 异常值分析2. 单变量箱线图可视化3. 特征重要性分析 学习记录一 锂电池电池生产参数调控及生产温度预测挑战赛 已配置环境&#xff0c;跑通baseline&#xff0c;并在此基础上对数据进行了简单的分析。 1. 异常值分析 对训练集…

Python知识使用目录体系

Python知识使用目录体系 前记&#xff1a;开始以Get No.方式进行记录&#xff0c;知识体系的建立 Get No. No1: IDEA&#xff08;Java主要编辑器&#xff09;中添加Python插件;(就在此总目录中写&#xff0c;属于纪念开始) 附加&#xff1a;另外一个pycharm工具使用python工…

pyqt5中的控件

字体部分 学习如何加载本地字体a.tff import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton from PyQt5.QtGui import QFont, QFontDatabaseclass MyWindow(QWidget):def __init__(self):super().__init__()self.button Noneself.label None…