2014-04-14 76 views
2

void setSelectionBehavior (QAbstractItemView::SelectionBehavior behavior)如何禁用QTableView的整列選擇?

該函數接受三個值之一:選擇項目,選擇行和選擇單元格。

問:

單擊單元格時,我需要的情況下,它被選中,單擊行索引時,行被選中,但單擊列標題整列時沒有被選中。據我所知這不能用這個功能來完成。

我需要tableview的行爲與SelectionBehavior::selectItems設置時的行爲完全相同。

但是,當用戶點擊標題列不應被選中。

我在考慮關閉QHeaderView的列選擇,但找不到如何?

+1

你試圖篩選點擊標題視圖的特定部分的事件? – vahancho

回答

2

從我的應用程序:

// get header from QTableView tableView (replace with your widget name) 
    QHeaderView *header = new QHeaderView(Qt::Horizontal, tableView); 
#if QT_VERSION < 0x50000 
// Qt 4.8.1 
    header->setResizeMode(QHeaderView::ResizeToContents); 
#else 
// Qt 5.2.0 
    header->setSectionResizeMode(QHeaderView::ResizeToContents); 
#endif 
    header->setHighlightSections(false); // this is what you want 

setHighlightSections(布爾)插槽的有效期爲4的Qt和Qt 5

編輯: 藉口疏忽!這僅適用於在SelectSelection中使用SelectRows或SelectItems的情況。你可以找到在源qheaderview.cppqtableview.cpp,插槽voidQHeaderView::mousePressEvent(QMouseEvent *e);voidQTableViewPrivate::selectColumn(int column, bool anchor);

對於一個SelectItems可以使用這個插槽證明:

header->setClickable(false); 
+0

這並沒有幫助。我認爲這是關於突出部分,而不是選擇列。你可以仔細檢查一下嗎? – Ashot

+0

你對!我的情況是SelectRows。如果您不在標題上使用任何點擊,則可以使用setClickable(false)禁用選擇列。我編輯了我的答案。 – progopis