summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp32
-rw-r--r--tests/manual/widgets/itemviews/delegate/example.cpp86
-rw-r--r--tests/manual/widgets/itemviews/delegate/example.pro2
3 files changed, 117 insertions, 3 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 7b9d7d0a58..be7c58f20b 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -224,16 +224,29 @@ private slots:
void ctrlRubberbandSelection();
void QTBUG6407_extendedSelection();
void QTBUG6753_selectOnSelection();
+ void testDelegateDestroyEditor();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
{
public:
- MyAbstractItemDelegate() : QAbstractItemDelegate() {};
+ MyAbstractItemDelegate() : QAbstractItemDelegate() { calledVirtualDtor = false; }
void paint(QPainter *, const QStyleOptionViewItem &, const QModelIndex &) const {}
QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const { return QSize(); }
- QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &,
- const QModelIndex &) const { return new QWidget(parent); }
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
+ {
+ openedEditor = new QWidget(parent);
+ return openedEditor;
+ }
+ void destroyEditor(QWidget *editor, const QModelIndex &index) const
+ {
+ calledVirtualDtor = true;
+ // QAbstractItemDelegate::destroyEditor(editor,index);
+ editor->deleteLater();
+ }
+
+ mutable bool calledVirtualDtor;
+ mutable QWidget *openedEditor;
};
// Testing get/set functions
@@ -1497,5 +1510,18 @@ void tst_QAbstractItemView::QTBUG6753_selectOnSelection()
QCOMPARE(table.selectedItems().first(), table.item(item.row(), item.column()));
}
+void tst_QAbstractItemView::testDelegateDestroyEditor()
+{
+ QTableWidget table(5, 5);
+ MyAbstractItemDelegate delegate;
+ table.setItemDelegate(&delegate);
+ table.edit(table.model()->index(1, 1));
+ TestView *tv = reinterpret_cast<TestView*>(&table);
+ QVERIFY(!delegate.calledVirtualDtor);
+ tv->tst_closeEditor(delegate.openedEditor, QAbstractItemDelegate::NoHint);
+ QVERIFY(delegate.calledVirtualDtor);
+}
+
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"
diff --git a/tests/manual/widgets/itemviews/delegate/example.cpp b/tests/manual/widgets/itemviews/delegate/example.cpp
new file mode 100644
index 0000000000..20cff2663a
--- /dev/null
+++ b/tests/manual/widgets/itemviews/delegate/example.cpp
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtWidgets/QtWidgets>
+
+class ExampleEditor : public QLineEdit
+{
+public:
+ ExampleEditor(QWidget *parent = 0):QLineEdit(parent) { qDebug() << "ctor"; }
+ ~ExampleEditor() { QApplication::instance()->quit(); }
+};
+
+class ExampleDelegate : public QItemDelegate
+{
+public:
+ ExampleDelegate():QItemDelegate() { m_editor = new ExampleEditor(0); }
+protected:
+ QWidget* createEditor(QWidget *p, const QStyleOptionViewItem &o, const QModelIndex &) const
+ {
+ m_editor->setParent(p);
+ m_editor->setGeometry(o.rect);
+ return m_editor;
+ }
+ void destroyEditor(QWidget *editor, const QModelIndex &) const
+ {
+ editor->setParent(0);
+ qDebug() << "intercepted destroy :)";
+ }
+
+ // Avoid setting data - and therefore show that the editor keeps its state.
+ void setEditorData(QWidget*, const QModelIndex &) const { }
+
+ ~ExampleDelegate() { delete m_editor; }
+ mutable ExampleEditor *m_editor;
+};
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QTableView tv;
+ QStandardItemModel m;
+ m.setRowCount(4);
+ m.setColumnCount(2);
+ tv.setModel(&m);
+ tv.show();
+ tv.setItemDelegate(new ExampleDelegate());
+ app.exec();
+}
diff --git a/tests/manual/widgets/itemviews/delegate/example.pro b/tests/manual/widgets/itemviews/delegate/example.pro
new file mode 100644
index 0000000000..e9f2189272
--- /dev/null
+++ b/tests/manual/widgets/itemviews/delegate/example.pro
@@ -0,0 +1,2 @@
+TEMPLATE = app
+SOURCES=example.cpp