2017-08-07 74 views
1

我有一個長標籤QComboBox。QComboBox的初始項目是否可以顯示比項目列表中更短的文本項目?

qc = new QComboBox; 
qc->addItem(tr("LabelA is a very long label here.")); 

在下拉列表中的文本是更廣泛的比我想的,但我想長文本字符串時,組合框在它落下的狀態顯示的項目清單。

有沒有辦法讓下拉菜單顯示時顯示一個短文本項目時,沒有激活,只有一次點擊(顯示它的項目列表)下拉顯示整個文本的全文?

因此被激活之前查看QComboBox時,它可能顯示類似...

MyLabel: LabelA 

注:文本的其餘部分「是一個很長的標籤在這裏。」沒有被顯示。

我確實看到一些類似的問題,但答案沒有被選中,也沒有顯示出效果。

+0

如果我們設置QComboBox文本單擊並索引處理組合框後,是不是爲你工作? – aghilpro

+0

不知道我很理解你的建議,但我會盡力去研究它。 – Ender

+0

我搜索了一下,不可能。你必須手動完成。使用信號來改變文本,或者創建一個新的類並從QComboBox繼承並在繼承類中執行。 – aghilpro

回答

1

允許解決這個問題步步覆蓋範圍更廣

步驟1:下拉寬度應等於具有最大長度的項目。 (我們將使用QFontMetrics來查找具有最大長度的項目的寬度(以像素爲單位))。

步驟2:要查找具有最大長度的項目,請在QStringList中插入項目並遍歷每個項目以查找具有最大長度的項目。

QFont myFont("times", 10); //assuming you are using times new roman 
QFontMetrics fm(myFont); 
int pixelwide; // stores the length in pixes 
int maxLen = 0 ; 
QStringList itemList; 
QString maxDropdownLen,styleSheet; 
itemList<<"LabelA is a very long label here."; 

for(int i=0; i<itemList.size();i++){ 
    pixelwide = fm.width(itemList[i]); //get the width in pixels 
    if(pixelwide>maxLen) 
      { 
      maxLen=pixelwide; //setting maximum width in pixels 
      } 
    } 

步驟3:現在下拉寬度設定爲具有最大長度的項的寬度。

maxDropdownLen = QString::number(pixelwide); 
styleSheet = "QComboBox QAbstractItemView { min-width: %1;}"; 
qc->addItems(itemList); 
qc->setStyleSheet(styleSheet.arg(maxDropdownLen)); 

enter image description here enter image description here

+0

謝謝你。我很快就插上了它,但沒有奏效。有可能是因爲我的QComboBox被埋在了佈局 - >組 - >佈局 - >窗口小部件 - >佈局中......我將不得不使用它來玩一下。 – Ender

相關問題