我試圖做一些事情,似乎應該是很簡單的,但更多的我看着它,我不知道是否是一個Qt的bug。顯示一個隱藏的列QTableView中
所以,我有一個QTableView
有列可以顯示/隱藏,因爲用戶喜歡。初始化表後,我調用一個自定義的restoreColumns()
方法,該方法隱藏用戶上次打開GUI時隱藏的列(使用QTableView::hideColumn()
)。當用戶試圖表明是由用戶隱藏上次GUI是跑欄
問題然後是。相應的信號/插槽被調用並通過,但由於某種原因,QTableView
未更新以顯示該列。
什麼奇怪的是,已經顯示(沒有被用戶隱藏上次GUI被RAN)的任何列有越來越隱藏/顯示沒有問題。
有什麼想法?謝謝!
下面是如何初始化表...
m_tableModel = new mytablemodel();
m_tableView = new mytableview();
m_tableView->setItemDelegate(m_tableDelegate);
m_tableView->setModel(m_tableModel);
肉類restoreColumns()方法:
for (int i=0; i<horizontalHeader()->count(); i++) {
// load size to restore previous width
...
horizontalHeader()->resizeSection(i, width); // restore width
// load previous column position
...
// restore column order
int currentVisualIndex = horizontalHeader()->visualIndex(i);
if (currentVisualIndex != visualIndex)
horizontalHeader()->moveSection(currentVisualIndex, visualIndex);
// load previous hidden/shown state
...
if (columnHidden) {
hideColumn(i);
} else {
showColumn(i);
}
}
下面是一些示例代碼,顯示/隱藏的列之一。
void mytableview::showAColumn(bool checked) {
// mytableview is a subclass of qtableview
if (checked)
showColumn(COLUMN_A); // COLUMN_A is an enum for the column
else
hideColumn(COLUMN_A);
}
其被連接到可從QTableView
的QHeaderView
的菜單和上下文菜單訪問的QAction
。
connect(action, SIGNAL(toggled(bool)), this, SLOT(showAColumn(bool)));
你能試試'showColumn()'後添加['resizeColumnToContents'(http://doc.qt.nokia.com/latest/qtableview.html#resizeColumnToContents)調用? (我在想'隱藏'發生得太早了,列的大小可能無效) – Mat 2011-06-15 19:46:36
試過了 - 沒有變化。我認爲這與在tableview被繪製到屏幕上之前hideColumn是如何相關的......我不確定如何在tableview被繪製後調用我的restoreColumns()方法。 – Daren 2011-06-15 21:40:29
我剛剛給restoreColumns()方法增加了一些細節。這似乎是我調整列大小的地方是它變得混亂的地方。當我評論這部分時,它就像預期的那樣工作。然而,我再丟恢復到以前的列寬... – Daren 2011-06-15 22:33:52