需要自定义类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