forked from M-Labs/artiq
gui/applets: hack completer model to block noxious dataChanged signal. Closes #464
This commit is contained in:
parent
84f4725015
commit
8a243d322f
|
@ -275,7 +275,21 @@ class _CompleterDelegate(QtWidgets.QStyledItemDelegate):
|
||||||
QtWidgets.QCompleter.CaseSensitivelySortedModel)
|
QtWidgets.QCompleter.CaseSensitivelySortedModel)
|
||||||
completer.setCompletionRole(QtCore.Qt.DisplayRole)
|
completer.setCompletionRole(QtCore.Qt.DisplayRole)
|
||||||
if hasattr(self, "model"):
|
if hasattr(self, "model"):
|
||||||
completer.setModel(self.model)
|
# "TODO: Optimize updates in the source model"
|
||||||
|
# - Qt (qcompleter.cpp), never ceasing to disappoint.
|
||||||
|
# HACK:
|
||||||
|
# In the meantime, block dataChanged signals from the model.
|
||||||
|
# dataChanged never changes the content of the QCompleter in our
|
||||||
|
# case, but causes unnecessary flickering and trashing of the user
|
||||||
|
# selection when datasets are modified due to Qt's naive handler.
|
||||||
|
# Doing this is of course convoluted due to Qt's arrogance
|
||||||
|
# about private fields and not letting users knows what
|
||||||
|
# slots are connected to signals, but thanks to the complicated
|
||||||
|
# model system there is a short dirty hack in this particular case.
|
||||||
|
nodatachanged_model = QtCore.QIdentityProxyModel()
|
||||||
|
nodatachanged_model.setSourceModel(self.model)
|
||||||
|
completer.setModel(nodatachanged_model)
|
||||||
|
nodatachanged_model.dataChanged.disconnect()
|
||||||
return _AutoCompleteEdit(parent, completer)
|
return _AutoCompleteEdit(parent, completer)
|
||||||
|
|
||||||
def set_model(self, model):
|
def set_model(self, model):
|
||||||
|
|
Loading…
Reference in New Issue