2012-01-24 23 views
5

我是一名學生程序員,我正在使用Qt構建工作的GUI界面。我有一個QTreeWidget,共有8列。需要輸入到這些列中的每一列的輸入都很小。在這方面,我試圖找到一種方法來重新調整所有列的大小以滿足所需的最小空間。很像您點擊分隔線時執行的操作。我瀏覽過幾個網站和Qt文檔,但沒有找到解決方案。看過文檔後,似乎有很多方法可以做到這一點,但我無法讓其工作。我開始認爲我需要在某個地方啓用/禁用某些東西。就好像我寫入到構建函數中的更改(此函數清除表;從我的向量讀取數據,在表中顯示某些數據,然後假設重新調整標題/列的大小以適合大小以適合該列的內容)甚至不適用。我試圖在不改變如下:如何在QTreeWidget中將列大小調整爲所需的最小空間

 ui->treeWidgetInjections->setColumnWidth(i, minimumWidth()); 
     ui->treeWidgetInjections->resizeColumnToContents(i); 
     ui->treeWidgetInjections->header()->ResizeToContents; 
     ui->treeWidgetInjections->header()->resizeSection(i, minimumWidth()); 

所有這些都是在我生成函數的結尾(不相關的信息刪除):

ui->treeWidgetInjections->clear(); 
    for (int i=0; i < qTreeInjectionData.size(); i++) 
     { 
      //fill Qtree with items; 
      //fill QTree items with data; 
      //re size function here; 
     } 

請只留下生產反饋,我只是有興趣學習和克服這個挑戰。提前致謝!

+0

我認爲我的for循環是這裏的問題;特別是我認爲.size可能是造成這個問題的原因。 –

回答

14

這個小例子,對我的作品:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QVBoxLayout *layout = new QVBoxLayout(centralWidget()); 
    QTreeWidget *tree = new QTreeWidget(this); 
    layout->addWidget(tree); 

    tree->setColumnCount(3); 

    QStringList first, second, third; 
    first << "xxxxxxxxx"  << "xxxxxxxxxxxxx"  << "xxxxxxxx"; 
    second << "xxxxx"   << "xxxxxxxxxxxxxxxxx" << "xxxxx"; 
    third << "xxxxxxxxxxxxxx" << "xxxxxxxxxx"  << "xxxxxxxx"; 

    tree->insertTopLevelItem(0, new QTreeWidgetItem(first)); 
    tree->insertTopLevelItem(0, new QTreeWidgetItem(second)); 
    tree->insertTopLevelItem(0, new QTreeWidgetItem(third)); 

    for(int i = 0; i < 3; i++) 
     tree->resizeColumnToContents(i); 
} 

所有你需要做的是一次呼籲每一行的resizeColumnToContents()方法,你填充視圖之後。讓我知道如果問題依然存在。

+0

它真的很奇怪,但是當我在我的構建函數中爲我的列創建單獨的for循環重新調整大小後,它工作正常......非常奇怪。謝謝你的幫助!你的榜樣幫了我很大的忙,我相信這會幫助其他人! –

+1

不幸的是,這種方法只根據標題的內容調整大小。數據顯示爲字符包裝。 –

2

我的問題是StretchLastSection被設置爲true,如果該值設置爲true,則此屬性將覆蓋標題中最後一部分設置的調整大小模式。

解決方案:

_treeWidget = new UIWidgetSceneTree(); 
_treeWidget->header()->setStretchLastSection(false); 
_treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents); 
相關問題