PDA

View Full Version : Ensure unique value for column in QTableView



jmalicke
3rd November 2014, 23:49
I have implemented a custom QTableView and QAbstractTableModel. The QTableView uses the Qt-default text line edit delegate for manipulating string data. I would like to ensure that, after submitting an edit (pressing enter), the string is unique for its column. If another row has the same value for that column, the edit will be rejected, perhaps with a popup box, and then the text line edit will be programmatically put back into edit mode so the user can try again.

I have thought about using a custom delegate and possibly communicating between the delegate and the table view via signal and slots. The delegate could ensure that the value is unique. To do this it would have to be injected with knowledge about the other columns. If the value is not unique, the delegate could emit a signal that the table view would pick up; something like "notUniqueTryAgain()". Inside that slot the table would pop up a message and then call edit() on the cell. Is this the right way to go?

wysota
4th November 2014, 09:50
The model should ensure the data is unique by returning false from setData() call when trying to input non-unique value in an item. Then the delegate in the reimplementation of QAbstractItemDelegate::setModelData() can discover that setting the data failed and can signal it to the editor or wherever you need.

jmalicke
4th November 2014, 20:54
Thanks Zen. This is the approach I took.