QT5实现QComboBox控件下拉框自适应文字宽度

需求描述

用QT5实现QComboBox控件下拉框自适应文字宽度

核心代码

1
2
3
4
5
6
7
8
    int max_len = 0, v_len = 0;
    for(int idx = 0; idx < ui->cbb_com->count(); idx++)
    {
        v_len = ui->cbb_com->itemText(idx).length();
        if(max_len <= v_len) max_len = v_len;					// 得到下拉框中内容最长值的长度
    }
    int pt_val = ui->cbb_com->font().pointSize();                // 获取字体的磅值
    ui->cbb_com->view()->setFixedWidth(max_len * pt_val * 0.75); // 设置自适应宽度

详细代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//搜索串口功能
void Dialog::on_btn_serch_clicked()
{
    ui->cbb_com->clear();
    //运行开始查找可用串口
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        qDebug() << info.description();
        if(!info.isBusy()){//是否可用
           ui->cbb_com->addItem(info.portName()+" #"+info.description());  //串口号下拉菜单,增加一个条目
        }
        //qDebug() << "串口搜索完成";
    }

    int max_len = 0, v_len = 0;
    for(int idx = 0; idx < ui->cbb_com->count(); idx++)
    {
        v_len = ui->cbb_com->itemText(idx).length();
        if(max_len <= v_len) max_len = v_len;					// 得到下拉框中内容最长值的长度
    }
    int pt_val = ui->cbb_com->font().pointSize();                // 获取字体的磅值
    ui->cbb_com->view()->setFixedWidth(max_len * pt_val * 0.75); // 设置自适应宽度
}

运行效果图