Fixes bug #502.
The ownership of the editor returned by the Python override of QAbstractItemDelegate.createEditor(...) is now transferred to C++. A test was added to simulate the situation that triggers the bug, instead of relying on an example with a view, model and editable cells. See: http://bugs.openbossa.org/show_bug.cgi?id=502 Reviewed by Lauro Moura <lauro.neto@openbossa.org> Reviewed by Renato Araújo <renato.filho@openbossa.org>
This commit is contained in:
parent
fbc06244e0
commit
14a5405837
6 changed files with 91 additions and 7 deletions
55
tests/pysidetest/delegatecreateseditor_test.py
Normal file
55
tests/pysidetest/delegatecreateseditor_test.py
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import unittest
|
||||
from helper import UsesQApplication
|
||||
|
||||
from testbinding import TestView
|
||||
from PySide.QtCore import Qt
|
||||
from PySide.QtGui import QAbstractItemDelegate, QComboBox
|
||||
|
||||
id_text = 'This is me'
|
||||
|
||||
class DelegateDoesntKeepReferenceToEditor(QAbstractItemDelegate):
|
||||
def createEditor(self, parent, option, index):
|
||||
comboBox = QComboBox(parent)
|
||||
comboBox.addItem(id_text)
|
||||
return comboBox
|
||||
|
||||
|
||||
class DelegateKeepsReferenceToEditor(QAbstractItemDelegate):
|
||||
def __init__(self, parent=None):
|
||||
QAbstractItemDelegate.__init__(self, parent)
|
||||
self.comboBox = QComboBox()
|
||||
self.comboBox.addItem(id_text)
|
||||
|
||||
def createEditor(self, parent, option, index):
|
||||
self.comboBox.setParent(parent)
|
||||
return self.comboBox
|
||||
|
||||
|
||||
class EditorCreatedByDelegateTest(UsesQApplication):
|
||||
|
||||
def testDelegateDoesntKeepReferenceToEditor(self):
|
||||
view = TestView(None)
|
||||
delegate = DelegateDoesntKeepReferenceToEditor()
|
||||
view.setItemDelegate(delegate)
|
||||
editor = view.getEditorWidgetFromItemDelegate()
|
||||
self.assertEqual(type(editor), QComboBox)
|
||||
self.assertEqual(editor.count(), 1)
|
||||
self.assertEqual(editor.itemData(0, Qt.DisplayRole), id_text)
|
||||
editor.metaObject()
|
||||
|
||||
def testDelegateKeepsReferenceToEditor(self):
|
||||
view = TestView(None)
|
||||
delegate = DelegateKeepsReferenceToEditor()
|
||||
view.setItemDelegate(delegate)
|
||||
editor = view.getEditorWidgetFromItemDelegate()
|
||||
self.assertEqual(type(editor), QComboBox)
|
||||
self.assertEqual(editor.count(), 1)
|
||||
self.assertEqual(editor.itemData(0, Qt.DisplayRole), id_text)
|
||||
editor.metaObject()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue