如何让QComboBox控件下拉框自适应文字宽度?

简介: 如何让QComboBox控件下拉框自适应文字宽度?

需要自定义类ComboBoxEx,派生自QComboBox。


头文件:


#ifndef COMBOBOXEX_H
#define COMBOBOXEX_H
#include <QComboBox>
class ComboBoxEx : public QComboBox
{
    Q_OBJECT
public:
    ComboBoxEx(QWidget *parent = 0);
public:
    void adjustItemWidth();
};
#endif // COMBOBOXEX_H


源文件:

#include "comboboxex.h"
ComboBoxEx::ComboBoxEx(QWidget *parent)
    : QComboBox(parent)
{
#ifdef detail
    QFont font;
    //设置文字字体
    font.setFamily("宋体");
    //设置文字大小为50像素
    font.setPixelSize(50);
    //设置文字为粗体
    font.setBold(true); //封装的setWeight函数
    //设置文字为斜体
    font.setItalic(true); //封装的setStyle函数
    //设置文字大小
    font.setPointSize(20);
    //设置文字倾斜
    font.setStyle(QFont::StyleItalic);
    //设置文字粗细;enum Weight存在5个值
    font.setWeight(QFont::Light);
    //设置文字上划线
    font.setOverline(true);
    //设置文字下划线
    font.setUnderline(true);
    //设置文字中划线
    font.setStrikeOut(true);
    //设置字间距%
    font.setLetterSpacing(QFont::PercentageSpacing, 300); //300%,100为默认
    //设置字间距像素值
    font.setLetterSpacing(QFont::AbsoluteSpacing, 20); //设置字间距为100像素
    //设置首个字母大写;跟参数有关,也可以设置全部大写AllUppercase
    font.setCapitalization(QFont::Capitalize);
#else
    this->setFont(QFont("Microsoft Yahei", 10));
#endif
}
void ComboBoxEx::adjustItemWidth()
{
    //qDebug() << ft.family() << ft.pointSize() << ft.pixelSize();
    QFontMetrics fm(this->font());
    QRect rect;
    int max_len = 0;
    for (int i = 0; i < this->count(); i++)
    {
        rect = fm.boundingRect(this->itemText(i)); //获得字符串所占的像素大小
        if (max_len < rect.width())
        {
            max_len = rect.width();
        }
    }
    max_len *= 1.2;
    int w = qMax(max_len, this->width());
    this->view()->setFixedWidth(w);
}


应用:


在Qt设计师界面拖入QComboBox控件,然后提升为ComboBoxEx。


ui->comboBox->adjustItemWidth();





---


引申阅读


QComboBox下拉框文字如何在字体变大之后自适应高度


https://blog.csdn.net/GoForwardToStep/article/details/98944599


相关文章
|
4月前
设置表格的背景颜色和背景图片
设置表格的背景颜色和背景图片
40 10
|
6月前
|
前端开发
如何在页面中画一个canvas,然后在居中位置写上蓝色‘Hello Canvas‘,并加上文字描边 * @type {HTMLElement}
如何在页面中画一个canvas,然后在居中位置写上蓝色‘Hello Canvas‘,并加上文字描边 * @type {HTMLElement}
|
6月前
|
JavaScript
ELEMENT-PLUES如何设计二级高亮样式,文字如何呈现高亮效果,如果字体出现不对齐的情况,侧边栏icon如何调位置,目录如何折叠,如何延迟动画播放,如何添加阴影,如何添加logo,在行内样式写宽
ELEMENT-PLUES如何设计二级高亮样式,文字如何呈现高亮效果,如果字体出现不对齐的情况,侧边栏icon如何调位置,目录如何折叠,如何延迟动画播放,如何添加阴影,如何添加logo,在行内样式写宽
|
6月前
|
JavaScript
Elementplus淡入淡出效果,头部顶栏如何设置文字隐藏效果,默认图标如何收缩,icons如何通过类进行替换,侧边栏如何添加阴影,右边如何设置高度,侧边栏如何设置阴影,如何让icon与文字
Elementplus淡入淡出效果,头部顶栏如何设置文字隐藏效果,默认图标如何收缩,icons如何通过类进行替换,侧边栏如何添加阴影,右边如何设置高度,侧边栏如何设置阴影,如何让icon与文字
|
8月前
使用SDAutoLayout实现控件根据内容进行宽度自适应和高度自适应
使用SDAutoLayout实现控件根据内容进行宽度自适应和高度自适应
131 2
|
8月前
UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应
UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应
113 0
|
JavaScript 前端开发
菜单栏底部线条切换效果(标题滚动居中显示)
菜单栏底部线条切换效果(标题滚动居中显示)
174 0
|
前端开发
CSS高级技巧——鼠标样式,轮廓,文本域防拖拽,vertical-align 垂直对齐,文字溢出问题
CSS高级技巧——鼠标样式,轮廓,文本域防拖拽,vertical-align 垂直对齐,文字溢出问题
244 0
CSS高级技巧——鼠标样式,轮廓,文本域防拖拽,vertical-align 垂直对齐,文字溢出问题
|
Web App开发 移动开发 前端开发
H5:画布Canvas基础知识讲解(三)之文字、阴影、颜色渐变
​上一节介绍了H5:画布Canvas基础知识讲解(二)之插入图像、像素级操作,接下来继续讲解H5:画布Canvas基础。

热门文章

最新文章

下一篇
开通oss服务