QT的combobox下拉列表的寬度自適應內容的長度


 

QT的combobox下拉列表的寬度默認情況下與combobox本身的寬度是一致的,但是有時候下拉列表的文字很長,顯示不開的時候,就需要我們手動設置其寬度,

原理是遍歷每一項的長度,找到最大長度,然后使用setFixedWidth函數設置combobox的顯示寬度能夠容納這個最長的item即可。

用到一個知識點:百度搜索“字號尺寸大小對照表”,

假設item的字體我們設置為9號字,字體的單位為磅(point),而setFixedWidth(int)函數形參的單位是像素,

1磅 = 1/72 英寸
1英寸 =  96像素(小字體時)
1英寸 = 120像素(大字體時)

因此,1磅 = 1.33333像素(小字體時)1.66667像素(大字體時)

int max_len=0;
for(int idx=0;idx<ui->comboBox_portName->count();idx++)
{
if(max_len<ui->comboBox_portName->itemText(idx).length())
max_len = ui->comboBox_portName->itemText(idx).length();
}

ui->comboBox_portName->view()->setFixedWidth(max_len*9*0.75);//(字符數*每個字符的寬度(磅)*1.67)個像素

為了使上述程序具有通用性,可以繼承Qcombobox為ComboboxEx,然后把添加的combobox提升為ComboboxEx,在添加完item之后,調用一下adjustItemWidth()函數即可把寬度調整好。

comboboxex.h的全文如下:

#ifndef COMBOBOXEX_H
#define COMBOBOXEX_H

#include<QComboBox>

class ComboBoxEx : public QComboBox
{

public:
ComboBoxEx();
ComboBoxEx(QWidget *parent = 0);

void adjustItemWidth();

};

#endif // COMBOBOXEX_H
comboboxex.cpp全文如下:
#include "comboboxex.h"
#include<QAbstractItemView>

ComboBoxEx::ComboBoxEx()
{
}
ComboBoxEx::ComboBoxEx(QWidget *parent):
QComboBox(parent)
{
}
void ComboBoxEx::adjustItemWidth()
{
int max_len=0;
for(int idx=0;idx < this->count();idx++)
{
if(max_len < this->itemText(idx).length())
max_len = this->itemText(idx).length();
}

int pt_val = this->font().pointSize();//獲取字體的磅值
this->view()->setFixedWidth(max_len*pt_val*1.67);//(字符數*每個字符的寬度(磅)*1.67)個像素
}

使用效果如下圖所示:
       

可以看到,新增加的com4內容較長,下拉列表的寬度也能容納它
---------------------
原作者:qq_610642
來源:CSDN
原文:https://blog.csdn.net/qq_31073871/article/details/79851430
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM