项目场景:

项目中为了与其他控件显示的文本对齐,需要对QComboBox显示文本进行居中显示。网上找了一下并没有找到好的方法,记录一下这次解决方法


解决方案:

首先从网上找了一下,网上主流方法是通过setLineEdit(QLineEdit *edit)来设置edit的文本居中来完成文本居中显示,这样相当于改变了QComboBox显示框的属性了。但是这样点击edit框会无法弹出下拉框,又需要对edit框进行点击事件处理才可以完成。

我需要正常的label进行显示,尽量不改变它原有的属性,并且可以适用样式表。

通过查看ComboBox::paintEvent()方法源码发现其实现很简单

void QComboBox::paintEvent(QPaintEvent *)
{QStylePainter painter(this);painter.setPen(palette().color(QPalette::Text));// draw the combobox frame, focusrect and selected etc.QStyleOptionComboBox opt;initStyleOption(&opt);painter.drawComplexControl(QStyle::CC_ComboBox, opt);//这里是绘制复杂控件,也就是ComboBox框加上箭头,以及控件背景// draw the icon and textpainter.drawControl(QStyle::CE_ComboBoxLabel, opt);//这个就是绘制显示的文本
}

通过上面代码来看,我们只需要修改painter.drawControl(QStyle::CE_ComboBoxLabel, opt);这一行代码,让文本能够居中显示就可以了。下面是我实现

    // draw the icon and textif(opt.editable){//编辑模式下应用原有绘制,其实qt源码实现中并没有绘制任何东西painter.drawControl(QStyle::CE_ComboBoxLabel, opt);}else{//计算显示文本的区域,去除右边下拉箭头图标QRect textR = style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxEditField, this);//让文本可以通过text-align属性调整位置,使用绘制PushButton文本的样式来进行绘制QStyleOptionButton optLabel;optLabel.init(this);optLabel.rect = textR;optLabel.text = opt.currentText;optLabel.icon = opt.currentIcon;optLabel.iconSize = opt.iconSize;painter.drawControl(QStyle::CE_PushButtonLabel, optLabel);}

总结:

qt控件的绘制函数里有很多可以借鉴和直接拿过来用的,另外QStylePainter 中的draw相关函数中有很多qt封装很好的控件绘制,还会适用qss样式表,合理的运用其中的方法可以解决很多问题。

QComboBox显示文本居中问题相关推荐

  1. CSS3文本居中显示、圆形圆角绘制、立体阴影效果设置实例演示

    CSS3文本居中显示.圆形圆角绘制.立体阴影效果设置 实例演示 ① 文本居中显示 ② 圆角设置 ③ 圆形设置 ④ 立体阴影效果设置 [ 推荐文章 ] 一篇文章快速掌握 Linux 基本命令 实例演示 ...

  2. [css] 实现单行文本居中和多行文本左对齐并超出显示“...“

    [css] 实现单行文本居中和多行文本左对齐并超出显示"-" .one {text-align: center }.multi {overflow: hiddentext-over ...

  3. android 代码设置居右_AppCompatSpinner默认值、默认选中、更改右侧箭头颜色、选项变化监听、文本居中显示...

    1.在代码中设置spinner默认值 spinner.setSelection(2,true); 就这样一行代码,很重要 一定要加true. 2.根据值设置spinner默认选中 /** 根据值, 设 ...

  4. php td居中显示文字,【html】合并单元格,并居中显示文本

    现状: 想要实现的效果: 代码实现: 用例失败为0,无测试详情 知识点: 合并单元格 rowspan是合并行,colspan 是合并列 456 实例: 1 2 3 456 效果: 2.单元格内容居中: ...

  5. css如何设置文本垂直居中显示,css中怎么设置文本居中?css文本垂直居中的设置方法...

    在网页设计的过程中,有时候可能为了布局美观可能需要让文本居中,那么,怎么设置文本居中呢?本篇文章将给大家介绍关于css设置文本垂直居中的方法. 首先我们要知道通过css实现元素的水平居中较为简单:对文 ...

  6. Python显示文本

    使用基本的控件工作 wxPython 工具包提供了多种不同的窗口部件,包括了本章所提到的基本控件.我们涉及静态文本.可编辑的文本.按钮.微调.滑块.复选框.单选按钮.选择器.列表框.组合框和标尺.对于 ...

  7. python输出文本对齐_python-使用PIL使文本居中对齐/居中对齐?

    ImageDraw.text的PIL文档是一个很好的起点,但是请不要回答您的问题. 下面是一个如何将文本居中放置在任意边界框中而不是图像中心的示例. 边界框定义为:align='center' =左上 ...

  8. android 代码控件框高,Android控件_TextView(显示文本框控件)

    一.TextView控件的常用属性 1.android:id--控件的id 2.android:layout_width--设置控件的宽度 wrap_content(包裹实际文本内容) fill_pa ...

  9. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

  10. C# winform 让ComboBox控件的文本居中方法

    在C#中,当将ComboBox的属性DropDownStyle设置为DropDownList后,ComboBox2框的文本默认是靠左对齐的. 用ComboBox1举例,让下拉文本居中,订阅事件: pu ...

最新文章

  1. oracle日志备份少数据库,oracle 账号锁定日志Oracle数据库全量备份恢复和部分备份恢复...
  2. C++中如何区分引用和取地址符号?
  3. 转换到 COFF 期间失败: 文件无效或损坏
  4. N5K连接FEX测试
  5. 防saq注入_去中心化交易所CYBEX将为区块链ICO注入新的价值观
  6. Fusion Upload组件 对接 阿里云OSS/七牛/又拍
  7. java singleresult方法_RxJava 第一篇 - Single使用及示例
  8. 山山的数学(困难版)
  9. JavaScript全套视频教程
  10. C# WinForm调用Shell_NotifyIcon
  11. Vue源码学习1--获取源码和查找入口文件
  12. Alien Worlds NFT 自动点击游戏教程 (Allen worlds NFT auto click game tutorial)
  13. Win10多台电脑时间自动同步
  14. SAP那些事-理论篇-14-SAP中的财务管理理念
  15. 微雪树莓派PICO笔记——3.PWM(脉冲宽度调制)
  16. Android单点触控技术,对图片进行平移,缩放,旋转操作
  17. 关于 Dota Rdsp 计算器的编写(一)
  18. UVALive-6528 Disjoint water supply
  19. Java8 ConcurrentLinkedQueue和LinkedTransferQueue 源码解析
  20. 计算机系教师评学总结,信息技术教学心得3篇

热门文章

  1. 平面设计有哪几种设计风格,分享平面设计的12种风格
  2. [转]GNSS NMEA-0183协议解析
  3. 新知实验室_体验 TRTC 视频会议
  4. linux输入法图标不见了,桌面上右下角的输入法图标不见了 怎么找回?
  5. 台式计算机如何安装摄像头,台式机怎样安装摄像头
  6. 视频演示 | 功能新增 | 增强版在线LEFSe分析和可视化鉴定标志性基因或物种
  7. AutoCAD2007 打开缓慢解决方案
  8. 基于ZYNQ、AM5728、AM5708、AM437x、AM335x、STM32+FPGA等平台提供了开源EtherCAT主站IgH案例
  9. vw、vh、vmin、vmax 的含义
  10. 【粤教版必修二《信息系统与社会》】知识总结与题目分析