diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-12-17 19:37:35 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:48:01 -0300 |
commit | 7771798cf27896c43054699c5f53468cd8bf14cf (patch) | |
tree | 1115cf02ac1b8c88ee14d24fca96c17d2831f44c /tests/pysidetest/delegatecreateseditor_test.py | |
parent | 05d011ccfa3ad442adb3639f9db87d49dd346299 (diff) |
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>
Diffstat (limited to 'tests/pysidetest/delegatecreateseditor_test.py')
-rw-r--r-- | tests/pysidetest/delegatecreateseditor_test.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/pysidetest/delegatecreateseditor_test.py b/tests/pysidetest/delegatecreateseditor_test.py new file mode 100644 index 000000000..0054e7995 --- /dev/null +++ b/tests/pysidetest/delegatecreateseditor_test.py @@ -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() + |