如何让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

 

您可以通过使用 `QComboBox` 的 `setItemData()` 函数来存储结构体的成员变量值。这个函数允许您将自定义的数据与每个下拉框项相关联。 下面是一个示例代码,演示如何将结构体的成员变量值存储在 `QComboBox` 中: ```cpp // 定义结构体 struct MyStruct { int id; QString name; }; // 创建一个 QComboBox 对象 QComboBox* comboBox = new QComboBox(); // 创建结构体对象并设置成员变量值 MyStruct struct1; struct1.id = 1; struct1.name = "Item 1"; // 将结构体成员变量值存储在下拉框项中 comboBox->addItem(struct1.name); comboBox->setItemData(0, QVariant::fromValue(struct1)); // 通过索引获取下拉框项的结构体数据 MyStruct selectedStruct = comboBox->itemData(index).value<MyStruct>(); ``` 在上面的示例中,我们首先定义了一个名为 `MyStruct` 的结构体,其中包含一个整型变量和一个字符串变量。然后,我们创建了一个 `QComboBox` 对象,并创建了一个结构体对象 `struct1`,并设置了其成员变量的值。接下来,我们将结构体的 `name` 成员变量作为下拉框项添加到 `QComboBox` 中,并使用 `setItemData()` 函数将整个结构体存储在该下拉框项中。 当需要获取所选下拉框项的结构体数据时,可以使用 `itemData()` 函数并指定相应的索引来获取存储的结构体数据。在示例中,我们使用 `value()` 函数将存储的数据转换回 `MyStruct` 类型。 需要注意的是,`setItemData()` 函数的第一个参数是下拉框项的索引,用于指定要存储数据的项。在示例中,我们使用了索引 `0` 来表示第一个下拉框项。如果需要为多个下拉框项存储结构体数据,可以使用不同的索引来区分它们。 希望这个示例能够帮助您在 `QComboBox` 控件下拉框中存储结构体的成员变量值!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值