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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!