2012-06-28 20 views
0

我有一個簡單的列表: mylist = ["foo", "bar", "baz"]在PySide中,保持QtTableWidget和列表同步的正確方法是什麼?

,並用1列QtTableWidget。我想保持mylist中的數據與QtTableWidget中的數據保持同步,包括允許拖放重新排序(即用戶可以這樣做,並且mylist得到更新)和編程更改(即,我更新mylist和表得到更新)。

什麼是方法做到這一點?

回答

2

請注意,通常Qt/C++沒有辦法將通用數據結構與視圖鏈接起來。模型是這種儀器化的數據結構,允許與視圖進行簡單的鏈接 - 通用列表,如QStringList不能像那樣使用。

在Python中,應該可以將屬性注入到任何列表的現有實例中,以將其轉換爲模型,以通知其視圖對其所做的更改。我不知道是否有任何Qt到Python的橋樑可以完成這樣的事情,我只能給出C++的觀點。知道PyQt或PySide的人可以隨意編輯和編輯。對於模型,使用QStringListModel。在視圖上啓用拖放重新排序如下:

view.setDragEnabled(true); 
view.setDropIndicatorShown(true); 
view.setDragDropMode(QAbstractItemView::InternalMove); 

other answer具有使用便利性部件QListWidget其BUIT-模型一個完整的例子。作爲一個出發點,這可能會更好,對於可以用鼠標進行合理操作的列表來說,這是一個不錯的選擇。一般來說,如果一個模型有100個項目,它不能用一個鼠標很容易操作,沒有一種實時發現或修剪某種方式 - 滾動這麼多項目是一個可用性的噩夢。所以不要這樣做。

Qt的文檔將成爲開始學習的好材料。閱讀關於model/view framework。然後查看QStringListModel和您選擇的視圖,如QTableViewQListView

+0

你可以在模型上更清楚些嗎?我對此很陌生。另外,一個好的教程的鏈接會很好。 – dmd

相關問題