Item delegates: refactor and unify code
We had code duplication all over the place between QItemDelegate and QStyledItemDelegate. Refactor that code in QAbstractItemDelegatePrivate, so that both can use it and we'll have one place to fix instead of two. Change-Id: I0c5decdfac7b0dc6e001c8c970491080f7b2e75f Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: David Faure <david.faure@kdab.com>
This commit is contained in:
parent
164a3017e6
commit
f5f8a8c346
@ -12,6 +12,7 @@ HEADERS += \
|
||||
itemviews/qtreeview.h \
|
||||
itemviews/qtreeview_p.h \
|
||||
itemviews/qabstractitemdelegate.h \
|
||||
itemviews/qabstractitemdelegate_p.h \
|
||||
itemviews/qitemdelegate.h \
|
||||
itemviews/qdirmodel.h \
|
||||
itemviews/qlistwidget.h \
|
||||
|
@ -42,7 +42,17 @@
|
||||
#include <qevent.h>
|
||||
#include <qstring.h>
|
||||
#include <qdebug.h>
|
||||
#include <qlineedit.h>
|
||||
#include <qtextedit.h>
|
||||
#include <qplaintextedit.h>
|
||||
#include <qapplication.h>
|
||||
#include <private/qtextengine_p.h>
|
||||
#include <private/qabstractitemdelegate_p.h>
|
||||
|
||||
#include <qpa/qplatformintegration.h>
|
||||
#include <qpa/qplatformdrag.h>
|
||||
#include <private/qguiapplication_p.h>
|
||||
#include <private/qdnd_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@ -165,7 +175,7 @@ QT_BEGIN_NAMESPACE
|
||||
Creates a new abstract item delegate with the given \a parent.
|
||||
*/
|
||||
QAbstractItemDelegate::QAbstractItemDelegate(QObject *parent)
|
||||
: QObject(parent)
|
||||
: QObject(*new QAbstractItemDelegatePrivate, parent)
|
||||
{
|
||||
|
||||
}
|
||||
@ -405,6 +415,112 @@ QVector<int> QAbstractItemDelegate::paintingRoles() const
|
||||
return QVector<int>();
|
||||
}
|
||||
|
||||
QAbstractItemDelegatePrivate::QAbstractItemDelegatePrivate()
|
||||
: QObjectPrivate()
|
||||
{
|
||||
}
|
||||
|
||||
bool QAbstractItemDelegatePrivate::editorEventFilter(QObject *object, QEvent *event)
|
||||
{
|
||||
Q_Q(QAbstractItemDelegate);
|
||||
|
||||
QWidget *editor = qobject_cast<QWidget*>(object);
|
||||
if (!editor)
|
||||
return false;
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
switch (static_cast<QKeyEvent *>(event)->key()) {
|
||||
case Qt::Key_Tab:
|
||||
if (tryFixup(editor)) {
|
||||
emit q->commitData(editor);
|
||||
emit q->closeEditor(editor, QAbstractItemDelegate::EditNextItem);
|
||||
}
|
||||
return true;
|
||||
case Qt::Key_Backtab:
|
||||
if (tryFixup(editor)) {
|
||||
emit q->commitData(editor);
|
||||
emit q->closeEditor(editor, QAbstractItemDelegate::EditPreviousItem);
|
||||
}
|
||||
return true;
|
||||
case Qt::Key_Enter:
|
||||
case Qt::Key_Return:
|
||||
#ifndef QT_NO_TEXTEDIT
|
||||
if (qobject_cast<QTextEdit *>(editor) || qobject_cast<QPlainTextEdit *>(editor))
|
||||
return false; // don't filter enter key events for QTextEdit or QPlainTextEdit
|
||||
#endif // QT_NO_TEXTEDIT
|
||||
// We want the editor to be able to process the key press
|
||||
// before committing the data (e.g. so it can do
|
||||
// validation/fixup of the input).
|
||||
if (!tryFixup(editor))
|
||||
return true;
|
||||
|
||||
QMetaObject::invokeMethod(q, "_q_commitDataAndCloseEditor",
|
||||
Qt::QueuedConnection, Q_ARG(QWidget*, editor));
|
||||
return false;
|
||||
case Qt::Key_Escape:
|
||||
// don't commit data
|
||||
emit q->closeEditor(editor, QAbstractItemDelegate::RevertModelCache);
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) {
|
||||
//the Hide event will take care of he editors that are in fact complete dialogs
|
||||
if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) {
|
||||
QWidget *w = QApplication::focusWidget();
|
||||
while (w) { // don't worry about focus changes internally in the editor
|
||||
if (w == editor)
|
||||
return false;
|
||||
w = w->parentWidget();
|
||||
}
|
||||
#ifndef QT_NO_DRAGANDDROP
|
||||
// The window may lose focus during an drag operation.
|
||||
// i.e when dragging involves the taskbar on Windows.
|
||||
QPlatformDrag *platformDrag = QGuiApplicationPrivate::instance()->platformIntegration()->drag();
|
||||
if (platformDrag && platformDrag->currentDrag()) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
if (tryFixup(editor))
|
||||
emit q->commitData(editor);
|
||||
|
||||
emit q->closeEditor(editor, QAbstractItemDelegate::NoHint);
|
||||
}
|
||||
} else if (event->type() == QEvent::ShortcutOverride) {
|
||||
if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
|
||||
event->accept();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QAbstractItemDelegatePrivate::tryFixup(QWidget *editor)
|
||||
{
|
||||
#ifndef QT_NO_LINEEDIT
|
||||
if (QLineEdit *e = qobject_cast<QLineEdit*>(editor)) {
|
||||
if (!e->hasAcceptableInput()) {
|
||||
if (const QValidator *validator = e->validator()) {
|
||||
QString text = e->text();
|
||||
validator->fixup(text);
|
||||
e->setText(text);
|
||||
}
|
||||
return e->hasAcceptableInput();
|
||||
}
|
||||
}
|
||||
#endif // QT_NO_LINEEDIT
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void QAbstractItemDelegatePrivate::_q_commitDataAndCloseEditor(QWidget *editor)
|
||||
{
|
||||
Q_Q(QAbstractItemDelegate);
|
||||
emit q->commitData(editor);
|
||||
emit q->closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#include "moc_qabstractitemdelegate.cpp"
|
||||
|
||||
#endif // QT_NO_ITEMVIEWS
|
||||
|
@ -47,6 +47,7 @@ class QModelIndex;
|
||||
class QAbstractItemModel;
|
||||
class QAbstractItemView;
|
||||
class QHelpEvent;
|
||||
class QAbstractItemDelegatePrivate;
|
||||
|
||||
class Q_WIDGETS_EXPORT QAbstractItemDelegate : public QObject
|
||||
{
|
||||
@ -114,7 +115,9 @@ Q_SIGNALS:
|
||||
protected:
|
||||
QAbstractItemDelegate(QObjectPrivate &, QObject *parent = 0);
|
||||
private:
|
||||
Q_DECLARE_PRIVATE(QAbstractItemDelegate)
|
||||
Q_DISABLE_COPY(QAbstractItemDelegate)
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*))
|
||||
};
|
||||
|
||||
#endif // QT_NO_ITEMVIEWS
|
||||
|
70
src/widgets/itemviews/qabstractitemdelegate_p.h
Normal file
70
src/widgets/itemviews/qabstractitemdelegate_p.h
Normal file
@ -0,0 +1,70 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the QtWidgets module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QABSTRACTITEMDELEGATE_P_H
|
||||
#define QABSTRACTITEMDELEGATE_P_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists for the convenience
|
||||
// of other Qt classes. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#include "qabstractitemdelegate.h"
|
||||
#include <private/qobject_p.h>
|
||||
|
||||
#ifndef QT_NO_ITEMVIEWS
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QAbstractItemDelegatePrivate : public QObjectPrivate
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QAbstractItemDelegate)
|
||||
public:
|
||||
explicit QAbstractItemDelegatePrivate();
|
||||
|
||||
bool editorEventFilter(QObject *object, QEvent *event);
|
||||
bool tryFixup(QWidget *editor);
|
||||
void _q_commitDataAndCloseEditor(QWidget *editor);
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QT_NO_ITEMVIEWS
|
||||
|
||||
#endif // QABSTRACTITEMDELEGATE_P_H
|
@ -36,13 +36,7 @@
|
||||
#ifndef QT_NO_ITEMVIEWS
|
||||
#include <qabstractitemmodel.h>
|
||||
#include <qapplication.h>
|
||||
#include <qpa/qplatformintegration.h>
|
||||
#include <qpa/qplatformdrag.h>
|
||||
#include <private/qguiapplication_p.h>
|
||||
#include <qbrush.h>
|
||||
#include <qlineedit.h>
|
||||
#include <qtextedit.h>
|
||||
#include <qplaintextedit.h>
|
||||
#include <qpainter.h>
|
||||
#include <qpalette.h>
|
||||
#include <qpoint.h>
|
||||
@ -58,8 +52,7 @@
|
||||
#include <qitemeditorfactory.h>
|
||||
#include <qmetaobject.h>
|
||||
#include <qtextlayout.h>
|
||||
#include <private/qobject_p.h>
|
||||
#include <private/qdnd_p.h>
|
||||
#include <private/qabstractitemdelegate_p.h>
|
||||
#include <private/qtextengine_p.h>
|
||||
#include <qdebug.h>
|
||||
#include <qlocale.h>
|
||||
@ -74,7 +67,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QItemDelegatePrivate : public QObjectPrivate
|
||||
class QItemDelegatePrivate : public QAbstractItemDelegatePrivate
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QItemDelegate)
|
||||
|
||||
@ -105,9 +98,6 @@ public:
|
||||
|
||||
static QString valueToText(const QVariant &value, const QStyleOptionViewItem &option);
|
||||
|
||||
bool tryFixup(QWidget *editor);
|
||||
void _q_commitDataAndCloseEditor(QWidget *editor);
|
||||
|
||||
QItemEditorFactory *f;
|
||||
bool clipPainting;
|
||||
|
||||
@ -129,13 +119,6 @@ public:
|
||||
} tmp;
|
||||
};
|
||||
|
||||
void QItemDelegatePrivate::_q_commitDataAndCloseEditor(QWidget *editor)
|
||||
{
|
||||
Q_Q(QItemDelegate);
|
||||
emit q->commitData(editor);
|
||||
emit q->closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
|
||||
}
|
||||
|
||||
QRect QItemDelegatePrivate::textLayoutBounds(const QStyleOptionViewItem &option) const
|
||||
{
|
||||
QRect rect = option.rect;
|
||||
@ -379,24 +362,6 @@ QString QItemDelegatePrivate::valueToText(const QVariant &value, const QStyleOpt
|
||||
return text;
|
||||
}
|
||||
|
||||
bool QItemDelegatePrivate::tryFixup(QWidget *editor)
|
||||
{
|
||||
#ifndef QT_NO_LINEEDIT
|
||||
if (QLineEdit *e = qobject_cast<QLineEdit*>(editor)) {
|
||||
if (!e->hasAcceptableInput()) {
|
||||
if (const QValidator *validator = e->validator()) {
|
||||
QString text = e->text();
|
||||
validator->fixup(text);
|
||||
e->setText(text);
|
||||
}
|
||||
return e->hasAcceptableInput();
|
||||
}
|
||||
}
|
||||
#endif // QT_NO_LINEEDIT
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*!
|
||||
Renders the delegate using the given \a painter and style \a option for
|
||||
the item specified by \a index.
|
||||
@ -1166,75 +1131,7 @@ QRect QItemDelegate::textRectangle(QPainter * /*painter*/, const QRect &rect,
|
||||
bool QItemDelegate::eventFilter(QObject *object, QEvent *event)
|
||||
{
|
||||
Q_D(QItemDelegate);
|
||||
|
||||
QWidget *editor = qobject_cast<QWidget*>(object);
|
||||
if (!editor)
|
||||
return false;
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
switch (static_cast<QKeyEvent *>(event)->key()) {
|
||||
case Qt::Key_Tab:
|
||||
if (d->tryFixup(editor)) {
|
||||
emit commitData(editor);
|
||||
emit closeEditor(editor, EditNextItem);
|
||||
}
|
||||
return true;
|
||||
case Qt::Key_Backtab:
|
||||
if (d->tryFixup(editor)) {
|
||||
emit commitData(editor);
|
||||
emit closeEditor(editor, EditPreviousItem);
|
||||
}
|
||||
return true;
|
||||
case Qt::Key_Enter:
|
||||
case Qt::Key_Return:
|
||||
#ifndef QT_NO_TEXTEDIT
|
||||
if (qobject_cast<QTextEdit *>(editor) || qobject_cast<QPlainTextEdit *>(editor))
|
||||
return false; // don't filter enter key events for QTextEdit or QPlainTextEdit
|
||||
#endif // QT_NO_TEXTEDIT
|
||||
// We want the editor to be able to process the key press
|
||||
// before committing the data (e.g. so it can do
|
||||
// validation/fixup of the input).
|
||||
if (!d->tryFixup(editor))
|
||||
return true;
|
||||
|
||||
QMetaObject::invokeMethod(this, "_q_commitDataAndCloseEditor",
|
||||
Qt::QueuedConnection, Q_ARG(QWidget*, editor));
|
||||
return false;
|
||||
case Qt::Key_Escape:
|
||||
// don't commit data
|
||||
emit closeEditor(editor, QAbstractItemDelegate::RevertModelCache);
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) {
|
||||
//the Hide event will take care of he editors that are in fact complete dialogs
|
||||
if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) {
|
||||
QWidget *w = QApplication::focusWidget();
|
||||
while (w) { // don't worry about focus changes internally in the editor
|
||||
if (w == editor)
|
||||
return false;
|
||||
w = w->parentWidget();
|
||||
}
|
||||
#ifndef QT_NO_DRAGANDDROP
|
||||
// The window may lose focus during an drag operation.
|
||||
// i.e when dragging involves the taskbar on Windows.
|
||||
QPlatformDrag *platformDrag = QGuiApplicationPrivate::instance()->platformIntegration()->drag();
|
||||
if (platformDrag && platformDrag->currentDrag()) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
if (d->tryFixup(editor))
|
||||
emit commitData(editor);
|
||||
|
||||
emit closeEditor(editor, NoHint);
|
||||
}
|
||||
} else if (event->type() == QEvent::ShortcutOverride) {
|
||||
if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
|
||||
event->accept();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return d->editorEventFilter(object, event);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -117,8 +117,6 @@ protected:
|
||||
private:
|
||||
Q_DECLARE_PRIVATE(QItemDelegate)
|
||||
Q_DISABLE_COPY(QItemDelegate)
|
||||
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*))
|
||||
};
|
||||
|
||||
#endif // QT_NO_ITEMVIEWS
|
||||
|
@ -36,9 +36,6 @@
|
||||
#ifndef QT_NO_ITEMVIEWS
|
||||
#include <qabstractitemmodel.h>
|
||||
#include <qapplication.h>
|
||||
#include <qpa/qplatformintegration.h>
|
||||
#include <qpa/qplatformdrag.h>
|
||||
#include <private/qguiapplication_p.h>
|
||||
#include <qbrush.h>
|
||||
#include <qlineedit.h>
|
||||
#include <qtextedit.h>
|
||||
@ -59,8 +56,7 @@
|
||||
#include <private/qitemeditorfactory_p.h>
|
||||
#include <qmetaobject.h>
|
||||
#include <qtextlayout.h>
|
||||
#include <private/qobject_p.h>
|
||||
#include <private/qdnd_p.h>
|
||||
#include <private/qabstractitemdelegate_p.h>
|
||||
#include <private/qtextengine_p.h>
|
||||
#include <private/qlayoutengine_p.h>
|
||||
#include <qdebug.h>
|
||||
@ -72,7 +68,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QStyledItemDelegatePrivate : public QObjectPrivate
|
||||
class QStyledItemDelegatePrivate : public QAbstractItemDelegatePrivate
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QStyledItemDelegate)
|
||||
|
||||
@ -89,34 +85,9 @@ public:
|
||||
return factory ? factory : QItemEditorFactory::defaultFactory();
|
||||
}
|
||||
|
||||
bool tryFixup(QWidget *editor);
|
||||
void _q_commitDataAndCloseEditor(QWidget *editor)
|
||||
{
|
||||
Q_Q(QStyledItemDelegate);
|
||||
emit q->commitData(editor);
|
||||
emit q->closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
|
||||
}
|
||||
QItemEditorFactory *factory;
|
||||
};
|
||||
|
||||
bool QStyledItemDelegatePrivate::tryFixup(QWidget *editor)
|
||||
{
|
||||
#ifndef QT_NO_LINEEDIT
|
||||
if (QLineEdit *e = qobject_cast<QLineEdit*>(editor)) {
|
||||
if (!e->hasAcceptableInput()) {
|
||||
if (const QValidator *validator = e->validator()) {
|
||||
QString text = e->text();
|
||||
validator->fixup(text);
|
||||
e->setText(text);
|
||||
}
|
||||
return e->hasAcceptableInput();
|
||||
}
|
||||
}
|
||||
#endif // QT_NO_LINEEDIT
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*!
|
||||
\class QStyledItemDelegate
|
||||
|
||||
@ -637,75 +608,7 @@ void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)
|
||||
bool QStyledItemDelegate::eventFilter(QObject *object, QEvent *event)
|
||||
{
|
||||
Q_D(QStyledItemDelegate);
|
||||
|
||||
QWidget *editor = qobject_cast<QWidget*>(object);
|
||||
if (!editor)
|
||||
return false;
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
switch (static_cast<QKeyEvent *>(event)->key()) {
|
||||
case Qt::Key_Tab:
|
||||
if (d->tryFixup(editor)) {
|
||||
emit commitData(editor);
|
||||
emit closeEditor(editor, EditNextItem);
|
||||
}
|
||||
return true;
|
||||
case Qt::Key_Backtab:
|
||||
if (d->tryFixup(editor)) {
|
||||
emit commitData(editor);
|
||||
emit closeEditor(editor, EditPreviousItem);
|
||||
}
|
||||
return true;
|
||||
case Qt::Key_Enter:
|
||||
case Qt::Key_Return:
|
||||
#ifndef QT_NO_TEXTEDIT
|
||||
if (qobject_cast<QTextEdit *>(editor) || qobject_cast<QPlainTextEdit *>(editor))
|
||||
return false; // don't filter enter key events for QTextEdit or QPlainTextEdit
|
||||
#endif // QT_NO_TEXTEDIT
|
||||
// We want the editor to be able to process the key press
|
||||
// before committing the data (e.g. so it can do
|
||||
// validation/fixup of the input).
|
||||
if (!d->tryFixup(editor))
|
||||
return true;
|
||||
|
||||
QMetaObject::invokeMethod(this, "_q_commitDataAndCloseEditor",
|
||||
Qt::QueuedConnection, Q_ARG(QWidget*, editor));
|
||||
return false;
|
||||
case Qt::Key_Escape:
|
||||
// don't commit data
|
||||
emit closeEditor(editor, QAbstractItemDelegate::RevertModelCache);
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) {
|
||||
//the Hide event will take care of he editors that are in fact complete dialogs
|
||||
if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) {
|
||||
QWidget *w = QApplication::focusWidget();
|
||||
while (w) { // don't worry about focus changes internally in the editor
|
||||
if (w == editor)
|
||||
return false;
|
||||
w = w->parentWidget();
|
||||
}
|
||||
#ifndef QT_NO_DRAGANDDROP
|
||||
// The window may lose focus during an drag operation.
|
||||
// i.e when dragging involves the taskbar on Windows.
|
||||
QPlatformDrag *platformDrag = QGuiApplicationPrivate::instance()->platformIntegration()->drag();
|
||||
if (platformDrag && platformDrag->currentDrag()) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
if (d->tryFixup(editor))
|
||||
emit commitData(editor);
|
||||
|
||||
emit closeEditor(editor, NoHint);
|
||||
}
|
||||
} else if (event->type() == QEvent::ShortcutOverride) {
|
||||
if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
|
||||
event->accept();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return d->editorEventFilter(object, event);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -92,8 +92,6 @@ protected:
|
||||
private:
|
||||
Q_DECLARE_PRIVATE(QStyledItemDelegate)
|
||||
Q_DISABLE_COPY(QStyledItemDelegate)
|
||||
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*))
|
||||
};
|
||||
|
||||
#endif // QT_NO_ITEMVIEWS
|
||||
|
Loading…
Reference in New Issue
Block a user