2013-08-17 89 views
14

我是QT新手,我剛剛設法使QTableView與我的模型一起工作。它固定了3列。當我打開一個窗口時,它看起來不錯,但是當我調整窗口大小時,QTableView本身被調整大小,但列的寬度保持不變。是否有任何內置的方式來使其工作?我想調整列的大小以適應QTableView的邊緣,每個窗口都調整大小。列自動調整大小QTableView

+0

您是否總是希望列寬相同?如果沒有,你可以通過調用table-> horizo​​ntalHeader() - > setStretchLastSection(true)來擴展最後一列的寬度。 –

回答

17

有一個標頭標誌來確保QTableView的最後一列如果調整大小填滿它的父級。您可以這樣設置:

table_view->horizontalHeader()->setStretchLastSection(true); 

但是,這並不會按比例調整其他列的大小。如果你想做到這一點爲好,你可以處理它的母公司正是如此的resizeEvent內:

void QParent::resizeEvent(QResizeEvent *event) { 
    table_view->setColumnWidth(0, this->width()/3); 
    table_view->setColumnWidth(1, this->width()/3); 
    table_view->setColumnWidth(2, this->width()/3); 

    QMainWindow::resizeEvent(event); 
} 

QParent類的QMainWindow的子類。

+0

我還沒有測試過第二部分,但第一部分工作,但我決定讓窗口不可重複(對我來說更有意義) – khajvah

+0

要設置比例列寬,我發現最容易覆蓋resizeEvent,如圖所示,但通過子類化有問題的QTableView,而不是QMainWindow。 – jtbr

3

小工具QTableViewQTreeView及其派生類(如QTableWidget)有這個兩種有用的方法:

QHeaderView* horizontalHeader() const; 
QHeaderView* verticalHeader() const; 

如果一個類QHeaderView開放的文檔,你會發現,設置外觀和行爲的方法項目視圖的行或列標題。您可以通過以下方法之一解決您的問題:

  1. void QHeaderView::stretchLastSection(bool stretch)
    作爲Davy Jones提及。

    實施例:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setStretchLastSection(true); 
    
  2. void QHeaderView::setResizeMode(ResizeMode mode)
    作爲模式可以設置QHeaderView ::拉伸或QHeaderView :: ResizeToContents。
    不幸的是,這種方法有一個缺點 - 應用後,您將無法手動(在GUI中)或以編程方式更改列(或行)的大小。

    實施例:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch); 
    
26

,使得它們適合表格的寬度此代碼同樣stretchs各列。

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 

文檔:

+0

我想親吻你,現在只是在開玩笑;-) ..我一直在尋找這條線的這麼長時間..謝謝 –

+0

完美...這是TableView拉伸/縮放問題的完美解決方案..真的非常感謝很多.. – Maxx