Combo Box delegate disappears with QSortFilterProxyModel applied

Heads up! You've already completed this tutorial.

Amit_Khanna | 2021-04-17 07:04:01 UTC | #1

Hi everyone,

I have a QTableView with QAbstractTableModel which contains a ComboBox delegate created with QItemDelegate. All this is working fine.

Now I want to add filtering/sorting capability on this view so I used QSortFilterProxyModel like this

python

self.table_model = DictionaryTableModel() # created with QAbstractTableModel
self.delegate = ComboDelegate(self)
self.ui.table_view.setItemDelegateForColumn(2, self.delegate)

self.proxy_model = QtCore.QSortFilterProxyModel(self)
self.proxy_model.setSourceModel(self.table_model)

# set the model
self.ui.table_view.setModel(self.proxy_model)

Now here sorting works but I lose my delegate from the column and get a NoneType if I try to query this delegate which means that delegate never made it to the proxy model and I have no idea how to fix this.

Please help if anyone has a clue on how to sort this issue.

Thanks, ak


Salem_Bream | 2021-04-18 03:30:27 UTC | #2

the issue should be in the logic of some of your business codes, the code you posted, should in general work. try to post minimal code that reproduces this issue. regards,


Amit_Khanna | 2021-04-18 06:24:13 UTC | #3

Hi Salem,

Thanks for replying. I found the problem with my code!

I was passing self as a parent to delegate class where self is the main_form QDialog but instead, I had to pass the table view as a parent to the delegate class like ->

self.delegate = ComboDelegate(self.table_view)

thus making my view, parent of the delegate and this worked!!

Cheers, Amit


Over 10,000 developers have bought Create GUI Applications with Python & Qt!

To support developers in [[ countryRegion ]] I give a [[ localizedDiscount[couponCode] ]]% discount with the code [[ couponCode ]] — Enjoy!

For [[ activeDiscount.description ]] I'm giving a [[ activeDiscount.discount ]]% discount with the code [[ couponCode ]] — Enjoy!

Well done, you've finished this tutorial! Mark As Complete
[[ user.completed.length ]] completed [[ user.streak+1 ]] day streak