2014-12-30 85 views
-1

這讓我瘋狂。我基本上不能在我的子類QTableView中選擇。這是一個非常大的項目,大部分拼圖都被分類。但是,我覺得我已經基本檢查了一切:QTableView沒有選擇

QTableView::selectionModel(); // returns Qt::ExtendedSelection 
QTableView::selectionBehavior(); // returns Qt::SelectItems 
QTableView::QItemSelectionModel::hasSelection(); // returning false, which makes sense. 
QStyledItemDelegate::paint(); // In here I check the selection (and give it a special background if selected, but it's not, as expected) 

我沒有在任何地方顯式設置selectionMode()或selectionBehavior()。我甚至在每次點擊鼠標時做了上面的檢查,以確保。這工作之前,所以我敢肯定,我介紹了什麼地方,但我不知道我應該檢查什麼。

想法?

+2

你能更具體嗎?你提供的信息遠遠不夠。 – Tay2510

回答

0

好的,我弄明白了,是的,如果我發佈了某個人可能會得到的代碼,但是由於項目規模的原因我很害怕,無論如何它可能會變成任何人。我也不知道你可以在模型中選擇關閉(而不是視圖)。

Qt::ItemFlags QAbstractTableModel::flags(const QModelIndex& index) const 
{ 
    // snip 
    return Qt::NoItemFlags; 
} 

這是罪魁禍首。有一個角落案例,它返回上面的內容並在模型級別禁用選擇(覆蓋使索引可選的默認行爲)。

0

如果你在繼承類中有類似View的表,那麼我會遠離自己實現所有的功能。如果您可以使用默認選擇模型,那麼您不需要實現這些功能。在這種情況下,它會自動調用默認功能。

+0

這就是我以爲我正在做的事情 - 當我重新實現一些鼠標功能時,我有幾次,但我做我的魔法後,我總是調用基類。 IE:myTableView :: mousePressEvent(QMouseEvent * event){doMyFunc(); QTableView :: mousePressEvent(event); } –

+0

甚至評論他們所有人,但得到了相同的結果。 :( –

+0

找到問題的唯一方法就是分析你的視圖代碼,否則這是不可能的。 – user21071987