2017-08-04 285 views
0

我想 - 將一個自定義小部件放入QTableView的單元格中。 Widget可以是一個QPushButton,一個複選框或其他東西。我試過以下方法,但沒有人滿足我:Qt在QTableView單元格內設置一個自定義小部件

  1. 使用委託。這個策略可以繪製小部件,但不能作爲定製小部件,並且不能相互作用。
  2. 使用QTableView::setIndexWidget()。使用這種策略,定製小部件完全覆蓋整個單元格&,委託綁定到QTableView不起作用,這意味着雙擊()不會對單元格進行編輯操作。

請注意,該功能是獨立的,就像插件一樣。所以我不能做下面的事情。

  1. 繼承自QTableView。我只能得到與QTableView綁定的一個指針變量----只有QTableView的一個對象。
  2. 從任何模型繼承。模型是由其他用戶控制的,程序員寫作模型不應該也不能僅僅使用我自己定製的模型。

問題確實很複雜,太多的約束限制了設計。

+0

我想你將不得不去委託的方式。您可以使用自定義小部件,並且可以與它們進行交互。請參閱:https://stackoverflow.com/questions/16660292/qt-using-custom-qitemdelegate-for-qtableview – Taron

+0

QItemDelegate :: createEditor()只是在單擊單元格時繪製。如果我點擊單元格,另一個委託也可以工作。但QItemDelegate :: paint()只能繪製,不會給出一個真正的可以交互的Widget –

+0

tableView-> openPersistentEditor(index )。隨着它始終可見! – Taron

回答

0

感謝大家對這個問題的貢獻,我找到了解決這個問題的方法。 它被解決爲「原始想法」,它只是在tableView上使用QModelIndex繪製一個QToolButton。通過QModelIndex,我可以得到可以繪製任何QWidget的幾何位置。但是,這種方法非常複雜,因爲我必須維護QModelIndex的更改,例如removeColumns和insertColumns。

另一個問題是關心我必須區分hide &刪除列或行。我想我應該發佈另一個新的問題來尋求幫助。 再次感謝。

0

如果您想使用模型/視圖來包含您的小部件的數據,則無法在沒有委託的情況下執行此操作。更糟糕的是,如果你試圖這麼做,那麼當元素數量非常高時,你的程序會顯着減慢,因爲每個小部件都將參與事件循環。這不是你想要的。您只需要用戶可見的小部件。

考慮到reading this的更多解釋。

相關問題