2014-09-24 60 views
2

我有基於QAbstractTableModel的QTableView。 在QAbstractTableModel重新實現的方法headerData()中根據模型設置列名和寬度。但是QTableView通過模型的列的初始寬度

switch(role) 
{ 
    ... 
    case Qt::SizeHintRole  : return QSize(500, 0); 
    ... 
} 

沒有效果。表中的所有列具有相同的寬度()。我應該怎麼做才能正確設置初始列寬。

P.S .:在this問題被建議使用代表來解決相同的問題,但我認爲應該使用headerData()。

+0

我能夠僅改變標題高度。 – vahancho 2014-09-24 08:41:45

+0

嘗試在標題中雙擊節處理程序(節之間的空間)。看起來像它應該調整大小的提示寬度在這種情況下 – Ezee 2014-09-24 09:22:09

+0

@vahancho - 對我也一樣 – kaa 2014-09-24 10:16:44

回答

4

QAbstractItemModel假定Qt::SizeHintRole可以在headerData方法用來返回標題部分的假想的大小。 Hovewer使用這些信息取決於某些視圖的實現。

QHeaderView使用Qt::SizeHintRole來計算它的推薦寬度(如果它是水平的,如果它是垂直的話則是高度)。在QHeaderView信號sectionHandleDoubleClicked

QTableView訂閱並調整基於細胞內容大小和標題部分的寬度相應的列。標題部分的寬度是headerDataQt::SizeHintRole返回的寬度,如果處理此角色,否則它基於標題部分文本(內容)計算。

如果您需要初始化基於Qt::SizeHintRole列寬您需要:

  • QTableView
  • 重新實現方法setModel繼承你的類,並使用及其使用方法QTableView::setColumnWidth基於Qt::SizeHintRole列設置的初始寬度。
1

您有一個視圖問題,您正在尋找您的程序的模型部分。

QTableView中類有簡單的方法:

void QTableView::setColumnWidth(int column, int width)

void QTableView::setRowHeight(int row, int height)

+0

使用hedaerData()是更靈活的解決方案,因爲我不將列寬綁定到某個列索引。模型說,查看哪些數據應該顯示特定列,以及列的寬度應該是多少。此外,headerData()適用於標題高度,但不適用於寬度。可能我應該調整QTableView或QHeaderVew的某些屬性以正確應用sizeHint? – kaa 2014-09-24 08:15:45

0

添加一個或兩個線對水平和/或垂直標頭:

tableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); 
tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);