2015-03-19 65 views
3

當使用dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight)信號與QTableView時,瞭解topLeft和bottomRight QModelIndex是很直接的,但當使用dataChanged()QTreeView時,我與bottomRight混淆。當在Qt中使用QTreeView的dataChanged()時,'bottomRight'是什麼意思?

bottomRight究竟是什麼意思?

我可以通過emit datachanged()信號更新整個樹形視圖嗎?

+0

這個信號被髮射時在現有的項的變化的數據。 如果項目是同一父項目,則受影響的項目是topLeft和bottomRight之間的項目。如果項目沒有相同的父項,則行爲未定義。 – user1636288 2015-03-19 13:52:04

+0

//更新整個樹視圖。 emit dataChanged(QModelIndex(),QModelIndex()); – user1636288 2015-03-20 07:26:48

回答

3

來自模型的dataChanged()信號更新視圖。代碼emitdataChanged(QModelIndex(), QModelIndex())將更新整個樹視圖。樹視圖update()的調用不起作用。

代碼:

// update the whole tree views. 
emit dataChanged(QModelIndex(), QModelIndex()); 
+0

通常避免代碼唯一的答案。考慮添加一個「描述」。謝謝 – MickyD 2015-03-20 09:20:24

+0

來自模型的'dataChanged()'信號更新視圖。代碼'emit dataChanged(QModelIndex(),QModelIndex())'更新整個樹視圖。樹視圖的update()調用不起作用。 – user1636288 2015-03-21 01:25:35

+0

謝謝。我已將您的描述納入您的答案。隨時根據需要修改。順便歡迎來到SO! :) – MickyD 2015-03-21 02:59:42

0

dataChanged()信號對於表視圖和樹視圖具有相同的含義。但是,如果在樹視圖中更改的項目具有不同的父項,則行爲未定義。

WRT你關於更新整個樹視圖的問題,答案是否定的,你不能通過發出這個信號來更新它。發出dataChanged()信號該模型已更新。

+0

而我很困惑的是,如果我設置'dataChanged()'的''topLeft'參數到根項目**行0 **和**列0 **,'bottomRight'設置爲**最後當然使用'QModelIndex'迭代器的樹模型的項目**會更新整個樹視圖,或者會發生什麼,爲什麼? – user1636288 2015-03-19 13:43:12

+0

@ user1636288,對不起,我應該說「...... **模型**已更新後發出的信號」 - 模型,而不是視圖。我現在已經修復了文本。正如Qt文檔所說:http://qt-project.org/doc/qt-4.8-snapshot/qabstractitemmodel.html#dataChanged,如果您的第一個項目和最後一個項目具有不同的父項,則行爲未定義。 – vahancho 2015-03-19 13:46:33

+0

感謝您的回答。在我看來,'dataChanged()'信號用於通知視圖在不調用整個窗口的'update()'函數的情況下自行更新,'dataChanged()'信號自動連接到視圖的'dataChanged()'插槽在視圖的'setModel()'函數中。 – user1636288 2015-03-19 13:50:42

相關問題