将QComboBox下拉项中的文本居中、居右

目录

1. 需求提出

2. 解决方法


1. 需求提出

    QComboBox下拉项中的文本默认是居左的,如下:

有时需要将下拉项中的文本居中、居右。如何实现?

2. 解决方法

        首先想到的是通过样式表来解决,但找遍Qt Assist和网络,都没这样的样式表,那就代码实现吧!本文用到了Qt的model/view framework框架,如果对Qt的“模型/视图/委托”框架不懂,本博文很难读懂。如果不懂这方面的知识,请在Qt Assistant 中输入Model/View Programming 学习了解。读者本机Qt安装目录下的Examples\Qt-XX.XX.XX\widgets\itemviews目录下有很多model/view framework的例子,可以进行自学了解,其中XX.XX.XX为Qt的版本号,如:5.14.1。代码如下:

comboBoxModel.h:

#ifndef COMBOBOXMODEL_H
#define COMBOBOXMODEL_H
#include <QAbstractItemModel>
class CComboBoxModel :public QAbstractItemModel
{
public:CComboBoxModel(QObject* parent = nullptr);public:// 设置项的文本内容void addComboBoxContent(const QString& qsItemContent);// 设置项的文本内容void addComboBoxContent(const QStringList& lstItemContent);// 设置项文本对齐方式void setItemTextAlignMent(Qt::Alignment eAlignment);
public: // virtualvirtual QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const;virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
private:virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;virtual QModelIndex parent(const QModelIndex& index) const;virtual int rowCount(const QModelIndex & parent = QModelIndex()) const;private:QStringList m_lstComboBoxContent;Qt::Alignment m_eAlignment{ Qt::AlignLeft}; // 项文本默认左对齐};#endif COMBOBOXMODEL_H

comboBoxModel.cpp:

#include "comboBoxModel.h"
CComboBoxModel::CComboBoxModel(QObject* parent /*= nullptr*/):QAbstractItemModel(parent)
{}// 对于QComboBox只有1列
int CComboBoxModel::columnCount(const QModelIndex& parent /*= QModelIndex()*/) const
{return 1;
}// 根据项的行列索引取得项在模型中的模型索引。注意:对于QComboBox只有1列
QModelIndex CComboBoxModel::index(int row, int column, const QModelIndex& parent/* = QModelIndex()*/) const
{return createIndex(row, column);
}// 根据项的角色,取得该角色对应的属性
QVariant CComboBoxModel::data(const QModelIndex& index, int role /*= Qt::DisplayRole*/) const
{if (!index.isValid()){return QVariant();}if (Qt::TextAlignmentRole == role) // 项文本对齐属性{return QVariant(m_eAlignment);// Qt::AlignCenter;}else if(Qt::DisplayRole == role) // 项文本属性{auto rowIndex = index.row();return m_lstComboBoxContent[rowIndex];}return QVariant();
}QModelIndex CComboBoxModel::parent(const QModelIndex& index) const
{return QModelIndex();
}// 项个数
int CComboBoxModel::rowCount(const QModelIndex& parent/* = QModelIndex()*/) const
{return m_lstComboBoxContent.size();
}// 设置项的文本内容
void CComboBoxModel::addComboBoxContent(const QString& qsItemContent)
{m_lstComboBoxContent.append(qsItemContent);
}// 设置项的文本内容
void CComboBoxModel::addComboBoxContent(const QStringList& lstItemContent)
{m_lstComboBoxContent << lstItemContent;
}void CComboBoxModel::setItemTextAlignMent(Qt::Alignment eAlignment)
{m_eAlignment = eAlignment;
}

QtWidgetsApplication1.cpp:

#include "QtWidgetsApplication1.h"
#include "comboBoxModel.h"
#include<QLineEdit>
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent)
{ui.setupUi(this);auto pModel = new CComboBoxModel(this);QStringList lst;lst << QStringLiteral("开机") << QStringLiteral("关机") << QStringLiteral("复位");pModel->addComboBoxContent(lst);auto eAlignment = Qt::AlignCenter;pModel->setItemTextAlignMent(eAlignment);ui.comboBox->setModel(pModel);auto pLineEdit = new QLineEdit;pLineEdit->setAlignment(eAlignment);pLineEdit->setReadOnly(true);ui.comboBox->setLineEdit(pLineEdit);m_qsLineEdit = lst[0];pLineEdit->setText(m_qsLineEdit);connect(ui.comboBox, QOverload<int>::of(&QComboBox::activated),[=](int index) { pLineEdit->setText(m_qsLineEdit); });connect(ui.comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),[=](int index){ auto modelIndex = pModel->index(index, 0); // 获取选择的项的模型索引auto text = pModel->data(modelIndex).toString(); // 根据模型索引,从模型中取出项文本pLineEdit->setText(text); // 将项的文本设置到编辑框m_qsLineEdit = text;});
}

其中m_qsLineEdit为在QtWidgetsApplication1.h定义的、用来保存上次选择的文本。注意:一定要响应编辑框的activated信号,否则在下拉框中选择新的项时,编辑框将会清空上次的文本,这样很不友好,如下:

如下为项文本居中的最终效果:

可以通过CComboBoxModel类的setItemTextAlignMent函数来设置对齐方式。其它的代码注释很明白,就不再解释了。

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

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

相关文章

java设计模式(十)外观模式(Facade Pattern)

1、模式介绍&#xff1a; 外观模式是一种结构型设计模式&#xff0c;提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。外观定义了一个高层接口&#xff0c;使得子系统更容易使用。 2、应用场景&#xff1a; 当你希望为复杂的子系统提供一个简单接口时。 当客户…

电脑数据恢复篇:如何从电脑中恢复已删除的照片

按下 Shift Delete 后后悔了&#xff1f;想要恢复已删除的照片&#xff1f;好吧&#xff0c;如果是这样的话&#xff0c;你来对地方了。在本文中&#xff0c;我们将讨论如何从 PC 中恢复已删除的文件。 自从摄影的概念被提出以来&#xff0c;人们就对它着迷。以前&#xff0c…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率&#xff0c;以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样&#xff0c;常见的一种计算方式是金融监管支出与金…

[AI 大模型] Google Gemini

文章目录 [AI 大模型] Gemini简介模型架构发展新技术和优势示例 [AI 大模型] Gemini 简介 Google Gemini 是 Google 最新推出的多模态 AI 大模型&#xff0c;旨在提升 AI 在各个领域的应用能力。Gemini 能够处理文本、图像、音频、视频和代码等多种数据类型&#xff0c;展现出…

模拟考试小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;科目管理&#xff0c;复习资料管理&#xff0c;参考文献管理&#xff0c;用户管理&#xff0c;留言板管理&#xff0c;论坛管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;复习资料&#xf…

128陷阱详解(从源码分析)

1、128陷阱描述 Integer 整型 -128~127 超过这个范围&#xff0c;比较会不准确 例子 public static void main(String[] args) {Integer a128;Integer b128;Integer e127;Integer f127;System.out.println(ab); //输出falseSystem.out.println(a.equals(b)); //输出trueS…

【十八】【QT开发应用】标签页QTabWidget的常见用法

#include "widget.h" // 包含自定义的widget头文件 #include <QHBoxLayout> // 包含QHBoxLayout头文件&#xff0c;用于水平布局 #include <QTabWidget> // 包含QTabWidget头文件&#xff0c;用于创建标签页控件 #include <QDebug> // 包含QDebug头…

数据中心的智能负载组,为什么以及做什么?

停电会因停机而造成巨大损失。根据电力研究所 &#xff08;EPRI&#xff09; 的数据&#xff0c;98% 的停电持续时间不到 10 秒。但这10秒是毁灭性的。由于每分钟闲置的成本约为 5,600 美元&#xff0c;公司投资于确保其基础设施连续性的系统。负载组是测试和确保所需连续性的基…

Python面试宝典第8题:二叉树遍历

题目 给定一棵二叉树的根节点 root &#xff0c;返回它节点值的前序遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1a;root […

怎样在 PostgreSQL 中优化对大数值类型数据的计算?

文章目录 一、选择合适的数据类型二、索引优化三、查询语句优化四、数据库配置调整五、使用扩展功能六、示例七、总结 在 PostgreSQL 中处理大数值类型数据&#xff08;例如 BIGINT、NUMERIC 等&#xff09;的计算时&#xff0c;可能会遇到性能瓶颈。为了优化这些计算&#xff…

深度探讨:Facebook在全球范围内的社会影响力

Facebook作为全球最大的社交平台之一&#xff0c;不仅改变了人们的社交方式&#xff0c;还对全球社会产生了深远的影响。本文将从多个角度探讨Facebook在全球范围内的社会影响力&#xff0c;深入分析其对个人、社区和全球社会的多方面影响。 1. 信息传播与社交互动的革新 Fac…

语言模型的进化:从NLP到LLM的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是一个充满挑战和机遇的领域。随着技术的发展&#xff0c;我们见证了从传统规则到统计机器学习&#xff0c;再到深度学习和预训练模型的演进。如今&#xff0c;我们站在了大型语言模型&#xff…

政安晨:【Keras机器学习示例演绎】(五十三)—— 使用 TensorFlow 决策森林进行分类

目录 简介 设置 准备数据 定义数据集元数据 配置超参数 实施培训和评估程序 实验 1&#xff1a;使用原始特征的决策森林 检查模型 实验 2&#xff1a;目标编码决策森林 创建模型输入 使用目标编码实现特征编码 使用预处理器创建梯度提升树模型 训练和评估模型 实验…

社区6月月报 | Apache DolphinScheduler重要修复和优化记录

各位热爱Apache DolphinScheduler的小伙伴们&#xff0c;社区6月月报更新啦&#xff01;这里将记录Apache DolphinScheduler社区每月的重要更新&#xff0c;欢迎关注。 月度Merge Stars 感谢以下小伙伴上个月为Apache DolphinScheduler所做的精彩贡献&#xff08;排名不分先后…

矩阵式键盘最小需要多少个IO驱动

1. 概述 矩阵式键盘由于有其占用硬件资源少的优点有着极其广泛的应用&#xff0c;如PC键盘、电话按键、家用电器等等这类产品.矩阵键盘的基本原理如下所示&#xff08;仅是原理示例&#xff0c;实际实现上还会为每个按键加上防倒流的二极管解决“鬼影”问题&#xff09;&#x…

Windows下编译OpenSSL静态库

目录 1. 版本与下载地址 2. 下载与安装VS2015 3. 下载与安装Perl 4. 测试ActivePerl是否安装正确 5. 下载OpenSSL 6. 编译32位OpenSSL静态库 6.1 解压openssl-1.0.2l.tar.gz 6.2 打开VS2015 x86本机工具命令提示符 6.3 输入命令进入到openssl的目录中 6.4 执行配置命…

完美解决AttributeError: ‘DataFrame‘ object has no attribute ‘ix‘的正确解决方法,亲测有效!!!

完美解决AttributeError: ‘DataFrame’ object has no attribute ix’的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决AttributeError: DataFrame object has no attribute ix的正确解决方法&#xff0c;亲测有效&#xff01;&…

(十五)GLM库对矩阵操作

GLM简单使用 glm是一个开源的对矩阵运算的库&#xff0c;下载地址&#xff1a; https://github.com/g-truc/glm/releases 直接包含其头文件即可使用&#xff1a; #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <io…

深入解析ROC曲线及其应用

深入解析ROC曲线及其应用 什么是ROC曲线&#xff1f; ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;&#xff0c;即受试者工作特征曲线&#xff0c;是一种用于评估分类模型性能的工具。它通过展示真阳性率&#xff08;TPR&#xff09;与假阳性率&…

免费制作GIF和实时网络监控工具

ScreenToGif 不允许你们还不知道的一款免费且实用好用的GIF动画制作工具软件。可以实时对区域窗口录制、编辑录制多功能模块&#xff0c;操作简单。 支持自定义增减重复帧数、调整循环播放次数、调整播放速度及删除重复帧。 支持对帧做二次编辑&#xff0c;可进行帧翻转、缩放…