summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-08-14 09:05:42 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-08-14 09:06:31 +0200
commit5c23199d4e8ff21661dfa5aacc13149178e78cab (patch)
tree322aee61581d7c85f1ccb65e47d1e79eba1ba6c9 /src/widgets
parent252bad7c589e03d3e12df02354b00a84d8e3159a (diff)
parentc8d9b17367cfdcb034d11f8a168ca4ae3993e7c3 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Conflicts: configure mkspecs/macx-xcode/Info.plist.app mkspecs/macx-xcode/Info.plist.lib qmake/doc/qmake.qdocconf src/corelib/global/qglobal.h tests/auto/other/exceptionsafety/exceptionsafety.pro tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp Change-Id: I3c769a4a82dc2e99a12c69123fbf17613fd2ac2a
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/doc/src/model-view-programming.qdoc2
-rw-r--r--src/widgets/doc/src/modelview.qdoc32
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp12
-rw-r--r--src/widgets/graphicsview/qgraphicsview.cpp1
-rw-r--r--src/widgets/kernel/qapplication.cpp9
-rw-r--r--src/widgets/kernel/qdesktopwidget.h1
-rw-r--r--src/widgets/kernel/qdesktopwidget_qpa.cpp44
-rw-r--r--src/widgets/kernel/qdesktopwidget_qpa_p.h2
-rw-r--r--src/widgets/kernel/qwidget.cpp2
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp5
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm2
-rw-r--r--src/widgets/util/qcompleter.cpp1
-rw-r--r--src/widgets/widgets/qcombobox.cpp31
-rw-r--r--src/widgets/widgets/qcombobox.h4
-rw-r--r--src/widgets/widgets/qcombobox_p.h4
-rw-r--r--src/widgets/widgets/qdockarealayout.cpp2
16 files changed, 106 insertions, 48 deletions
diff --git a/src/widgets/doc/src/model-view-programming.qdoc b/src/widgets/doc/src/model-view-programming.qdoc
index 6bcd0943a1..377ecf204e 100644
--- a/src/widgets/doc/src/model-view-programming.qdoc
+++ b/src/widgets/doc/src/model-view-programming.qdoc
@@ -189,7 +189,7 @@
to the QTableView::sortByColumn() slot or the
QTreeView::sortByColumn() slot, respectively.
- The alternative approach, if your model do not have the required
+ The alternative approach, if your model does not have the required
interface or if you want to use a list view to present your data,
is to use a proxy model to transform the structure of your model
before presenting the data in the view. This is covered in detail
diff --git a/src/widgets/doc/src/modelview.qdoc b/src/widgets/doc/src/modelview.qdoc
index 97d1c72e85..b2f9da9563 100644
--- a/src/widgets/doc/src/modelview.qdoc
+++ b/src/widgets/doc/src/modelview.qdoc
@@ -73,7 +73,7 @@
This tutorial includes example code for you to edit and integrate into your
project. The tutorial's source code is located in Qt's
- \c examples/tutorials/modelview directory.
+ \e examples/widgets/tutorials/modelview directory.
For more detailed information you may also want to look at the
\l{model-view-programming.html}{reference documentation}
@@ -190,14 +190,14 @@
Below are 7 very simple and independent applications that show different
sides of model/view programming. The source code can be found inside the
- \c{examples/tutorials/modelview} directory.
+ \c{examples/widgets/tutorials/modelview} directory.
\section2 2.1 A Read Only Table
We start with an application that uses a QTableView to show data. We will
add editing capabilities later.
- (file source: examples/tutorials/modelview/1_readonly/main.cpp)
+ (file source: examples/widgets/tutorials/modelview/1_readonly/main.cpp)
\snippet tutorials/modelview/1_readonly/main.cpp Quoting ModelView Tutorial
We have the usual \l {modelview-part2-main-cpp.html}{main()} function:
@@ -218,12 +218,12 @@
We have a table data set, so let's start with QAbstractTableModel since it
is easier to use than the more general QAbstractItemModel.
- (file source: examples/tutorials/modelview/1_readonly/mymodel.h)
+ (file source: examples/widgets/tutorials/modelview/1_readonly/mymodel.h)
\snippet tutorials/modelview/1_readonly/mymodel.h Quoting ModelView Tutorial
QAbstractTableModel requires the implementation of three abstract methods.
- (file source: examples/tutorials/modelview/1_readonly/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/1_readonly/mymodel.cpp)
\snippet tutorials/modelview/1_readonly/mymodel.cpp Quoting ModelView Tutorial
The number of rows and columns is provided by
@@ -259,7 +259,7 @@
result shown above. The difference is that this time we use parameter int
role to return different pieces of information depending on its value.
- (file source: examples/tutorials/modelview/2_formatting/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/2_formatting/mymodel.cpp)
\snippet tutorials/modelview/2_formatting/mymodel.cpp Quoting ModelView Tutorial
Each formatting property will be requested from the model with a separate
@@ -320,7 +320,7 @@
We still have a read only table, but this time the content changes every
second because we are showing the current time.
- (file source: examples/tutorials/modelview/3_changingmodel/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/3_changingmodel/mymodel.cpp)
\snippet tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_QVariant
Something is missing to make the clock tick. We need to tell the view every
@@ -328,12 +328,12 @@
this with a timer. In the constructor, we set its interval to 1 second and
connect its timeout signal.
- (file source: examples/tutorials/modelview/3_changingmodel/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/3_changingmodel/mymodel.cpp)
\snippet tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_a
Here is the corresponding slot:
- (file source: examples/tutorials/modelview/3_changingmodel/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/3_changingmodel/mymodel.cpp)
\snippet tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_b
We ask the view to read the data in the top left cell again by emitting the
@@ -349,7 +349,7 @@
The header content, however, is set via the model, so we reimplement the
\l{QAbstractItemModel::headerData()}{headerData()} method:
- (file source: examples/tutorials/modelview/4_headers/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/4_headers/mymodel.cpp)
\snippet tutorials/modelview/4_headers/mymodel.cpp quoting mymodel_c
Note that method \l{QAbstractItemModel::headerData()}{headerData()} also has
@@ -368,7 +368,7 @@
enabled. This is done by reimplementing the following virtual methods:
\l{QAbstractItemModel::}{setData()} and \l{QAbstractItemModel::}{flags()}.
- (file source: examples/tutorials/modelview/5_edit/mymodel.h)
+ (file source: examples/widgets/tutorials/modelview/5_edit/mymodel.h)
\snippet tutorials/modelview/5_edit/mymodel.h Quoting ModelView Tutorial
We use \c the two-dimensional array QString \c m_gridData to store our data.
@@ -377,7 +377,7 @@
interface. We have also introduced the \c editCompleted() signal, which
makes it possible to transfer the modified text to the window title.
- (file source: examples/tutorials/modelview/5_edit/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/5_edit/mymodel.cpp)
\snippet tutorials/modelview/5_edit/mymodel.cpp quoting mymodel_e
\l{QAbstractItemModel::setData()}{setData()} will be called each time the
@@ -388,7 +388,7 @@
checkbox to be selected, calls would also be made with the role set to
\l Qt::CheckStateRole.
- (file source: examples/tutorials/modelview/5_edit/mymodel.cpp)
+ (file source: examples/widgets/tutorials/modelview/5_edit/mymodel.cpp)
\snippet tutorials/modelview/5_edit/mymodel.cpp quoting mymodel_f
Various properties of a cell can be adjusted with
@@ -432,7 +432,7 @@
\image tree_2_with_algorithm.png
- (file source: examples/tutorials/modelview/6_treeview/mainwindow.cpp)
+ (file source: examples/widgets/tutorials/modelview/6_treeview/mainwindow.cpp)
\snippet tutorials/modelview/6_treeview/mainwindow.cpp Quoting ModelView Tutorial
We simply instantiate a QStandardItemModel and add a couple of
@@ -450,7 +450,7 @@
So let's create a couple of items:
- (file source: examples/tutorials/modelview/7_selections/mainwindow.cpp)
+ (file source: examples/widgets/tutorials/modelview/7_selections/mainwindow.cpp)
\snippet tutorials/modelview/7_selections/mainwindow.cpp quoting modelview_a
Views manage selections within a separate selection model, which can be
@@ -458,7 +458,7 @@
retrieve the selection Model in order to connect a slot to its
\l{QAbstractItemView::}{selectionChanged()} signal.
- (file source: examples/tutorials/modelview/7_selections/mainwindow.cpp)
+ (file source: examples/widgets/tutorials/modelview/7_selections/mainwindow.cpp)
\snippet tutorials/modelview/7_selections/mainwindow.cpp quoting modelview_b
We get the model index that corresponds to the selection by calling
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index 1c15905ff0..bb6033ba6c 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -4199,9 +4199,14 @@ QTransform QGraphicsItem::deviceTransform(const QTransform &viewportTransform) c
return QTransform();
}
- // First translate the base untransformable item.
- untransformedAncestor->d_ptr->ensureSceneTransform();
- QPointF mappedPoint = (untransformedAncestor->d_ptr->sceneTransform * viewportTransform).map(QPointF(0, 0));
+ // Determine the inherited origin. Find the parent of the topmost untransformable.
+ // Use its scene transform to map the position of the untransformable. Then use
+ // that viewport position as the anchoring point for the untransformable subtree.
+ QGraphicsItem *parentOfUntransformedAncestor = untransformedAncestor->parentItem();
+ QTransform inheritedMatrix;
+ if (parentOfUntransformedAncestor)
+ inheritedMatrix = parentOfUntransformedAncestor->sceneTransform();
+ QPointF mappedPoint = (inheritedMatrix * viewportTransform).map(untransformedAncestor->pos());
// COMBINE
QTransform matrix = QTransform::fromTranslate(mappedPoint.x(), mappedPoint.y());
@@ -7355,7 +7360,6 @@ void QGraphicsItem::updateMicroFocus()
if (qApp)
qApp->inputMethod()->update(Qt::ImQueryAll);
break;
- }
}
}
}
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp
index d78e32205f..846858ab31 100644
--- a/src/widgets/graphicsview/qgraphicsview.cpp
+++ b/src/widgets/graphicsview/qgraphicsview.cpp
@@ -3214,7 +3214,6 @@ void QGraphicsView::mouseDoubleClickEvent(QMouseEvent *event)
mouseEvent.setLastScenePos(d->lastMouseMoveScenePoint);
mouseEvent.setLastScreenPos(d->lastMouseMoveScreenPoint);
mouseEvent.setButtons(event->buttons());
- mouseEvent.setButtons(event->buttons());
mouseEvent.setAccepted(false);
mouseEvent.setButton(event->button());
mouseEvent.setModifiers(event->modifiers());
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 27a152b706..af3d134a5a 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -2861,7 +2861,14 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
QKeyEvent* key = static_cast<QKeyEvent*>(e);
#ifndef QT_NO_SHORTCUT
// Try looking for a Shortcut before sending key events
- if (qApp->d_func()->shortcutMap.tryShortcutEvent(receiver, key))
+ QObject *shortcutReceiver = receiver;
+ if (!isWidget && isWindow) {
+ QWindow *w = qobject_cast<QWindow *>(receiver);
+ QObject *focus = w ? w->focusObject() : 0;
+ if (focus)
+ shortcutReceiver = focus;
+ }
+ if (qApp->d_func()->shortcutMap.tryShortcutEvent(shortcutReceiver, key))
return true;
#endif
qt_in_tab_key_event = (key->key() == Qt::Key_Backtab
diff --git a/src/widgets/kernel/qdesktopwidget.h b/src/widgets/kernel/qdesktopwidget.h
index da44242b86..42c338f696 100644
--- a/src/widgets/kernel/qdesktopwidget.h
+++ b/src/widgets/kernel/qdesktopwidget.h
@@ -92,6 +92,7 @@ protected:
private:
Q_DISABLE_COPY(QDesktopWidget)
Q_DECLARE_PRIVATE(QDesktopWidget)
+ Q_PRIVATE_SLOT(d_func(), void _q_updateScreens())
friend class QApplication;
friend class QApplicationPrivate;
diff --git a/src/widgets/kernel/qdesktopwidget_qpa.cpp b/src/widgets/kernel/qdesktopwidget_qpa.cpp
index 64236321a4..015573dfbe 100644
--- a/src/widgets/kernel/qdesktopwidget_qpa.cpp
+++ b/src/widgets/kernel/qdesktopwidget_qpa.cpp
@@ -49,12 +49,13 @@ QT_BEGIN_NAMESPACE
QT_USE_NAMESPACE
-void QDesktopWidgetPrivate::updateScreenList()
+void QDesktopWidgetPrivate::_q_updateScreens()
{
Q_Q(QDesktopWidget);
- QList<QScreen *> screenList = QGuiApplication::screens();
- int targetLength = screenList.length();
- int currentLength = screens.length();
+ const QList<QScreen *> screenList = QGuiApplication::screens();
+ const int targetLength = screenList.length();
+ const int oldLength = screens.length();
+ int currentLength = oldLength;
// Add or remove screen widgets as necessary
if(currentLength > targetLength) {
@@ -65,23 +66,41 @@ void QDesktopWidgetPrivate::updateScreenList()
}
}
else if (currentLength < targetLength) {
- QDesktopScreenWidget *screen;
while (currentLength < targetLength) {
- screen = new QDesktopScreenWidget(currentLength++);
- screens.append(screen);
+ QScreen *qScreen = screenList.at(currentLength);
+ QDesktopScreenWidget *screenWidget = new QDesktopScreenWidget(currentLength++);
+ screenWidget->setGeometry(qScreen->geometry());
+ QObject::connect(qScreen, SIGNAL(geometryChanged(QRect)),
+ q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
+ QObject::connect(qScreen, SIGNAL(destroyed()),
+ q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
+ screens.append(screenWidget);
}
}
QRegion virtualGeometry;
- // update the geometry of each screen widget
+ // update the geometry of each screen widget, determine virtual geometry
+ // and emit change signals afterwards.
+ QList<int> changedScreens;
for (int i = 0; i < screens.length(); i++) {
- QRect screenGeometry = screenList.at(i)->geometry();
- screens.at(i)->setGeometry(screenGeometry);
+ const QRect screenGeometry = screenList.at(i)->geometry();
+ if (screenGeometry != screens.at(i)->geometry()) {
+ screens.at(i)->setGeometry(screenGeometry);
+ changedScreens.push_back(i);
+ }
virtualGeometry += screenGeometry;
}
q->setGeometry(virtualGeometry.boundingRect());
+
+ if (oldLength != targetLength)
+ emit q->screenCountChanged(targetLength);
+
+ foreach (int changedScreen, changedScreens) {
+ emit q->resized(changedScreen);
+ emit q->workAreaResized(changedScreen);
+ }
}
QDesktopWidget::QDesktopWidget()
@@ -89,7 +108,8 @@ QDesktopWidget::QDesktopWidget()
{
Q_D(QDesktopWidget);
setObjectName(QLatin1String("desktop"));
- d->updateScreenList();
+ d->_q_updateScreens();
+ connect(qApp, SIGNAL(screenAdded(QScreen*)), this, SLOT(_q_updateScreens()));
}
QDesktopWidget::~QDesktopWidget()
@@ -169,3 +189,5 @@ void QDesktopWidget::resizeEvent(QResizeEvent *)
}
QT_END_NAMESPACE
+
+#include "moc_qdesktopwidget.cpp"
diff --git a/src/widgets/kernel/qdesktopwidget_qpa_p.h b/src/widgets/kernel/qdesktopwidget_qpa_p.h
index 017934fbf1..f461869f1b 100644
--- a/src/widgets/kernel/qdesktopwidget_qpa_p.h
+++ b/src/widgets/kernel/qdesktopwidget_qpa_p.h
@@ -74,7 +74,7 @@ class QDesktopWidgetPrivate : public QWidgetPrivate {
public:
~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; }
- void updateScreenList();
+ void _q_updateScreens();
QList<QDesktopScreenWidget *> screens;
};
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index fcef038e1e..5532b04b22 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -1405,7 +1405,7 @@ QWidget::~QWidget()
w = w->d_func()->extra->focus_proxy;
QWidget *window = w->window();
QWExtra *e = window ? window->d_func()->extra : 0;
- if (!e || !e->proxyWidget)
+ if (!e || !e->proxyWidget || (w->parentWidget() && w->parentWidget()->d_func()->focus_child == this))
#endif
clearFocus();
} QT_CATCH(...) {
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index d29ba82a04..f2bd389769 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -538,9 +538,10 @@ void QWidgetWindow::handleResizeEvent(QResizeEvent *event)
}
}
-void QWidgetWindow::handleCloseEvent(QCloseEvent *)
+void QWidgetWindow::handleCloseEvent(QCloseEvent *event)
{
- m_widget->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
+ bool is_closing = m_widget->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
+ event->setAccepted(is_closing);
}
#ifndef QT_NO_WHEELEVENT
diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm
index 9119e2cfba..0b860450d1 100644
--- a/src/widgets/styles/qmacstyle_mac.mm
+++ b/src/widgets/styles/qmacstyle_mac.mm
@@ -3741,6 +3741,8 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
comboCopy.direction = Qt::LeftToRight;
if ((opt->state & QStyle::State_Small) && QSysInfo::macVersion() > QSysInfo::MV_10_6)
comboCopy.rect.translate(0, w ? -1 : -2); // Supports Qt Quick Controls
+ else if (QSysInfo::macVersion() > QSysInfo::MV_10_8)
+ comboCopy.rect.translate(0, 1);
QCommonStyle::drawControl(CE_ComboBoxLabel, &comboCopy, p, w);
}
break;
diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp
index 64b7b12e90..18c8ed2bd2 100644
--- a/src/widgets/util/qcompleter.cpp
+++ b/src/widgets/util/qcompleter.cpp
@@ -829,6 +829,7 @@ void QCompleterPrivate::_q_complete(QModelIndex index, bool highlighted)
if (!index.isValid() || (!proxy->showAll && (index.row() >= proxy->engine->matchCount()))) {
completion = prefix;
+ index = QModelIndex();
} else {
if (!(index.flags() & Qt::ItemIsEnabled))
return;
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index b89067155d..bdd06da7fc 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -59,6 +59,7 @@
#include <qheaderview.h>
#include <qmath.h>
#include <qmetaobject.h>
+#include <qabstractproxymodel.h>
#include <private/qguiapplication_p.h>
#include <private/qapplication_p.h>
#include <private/qcombobox_p.h>
@@ -173,18 +174,28 @@ QStyleOptionMenuItem QComboMenuDelegate::getStyleOption(const QStyleOptionViewIt
return menuOption;
}
-#ifdef QT_KEYPAD_NAVIGATION
-void QComboBoxPrivate::_q_completerActivated()
+#ifndef QT_NO_COMPLETER
+void QComboBoxPrivate::_q_completerActivated(const QModelIndex &index)
{
Q_Q(QComboBox);
+ if (index.isValid() && q->completer()) {
+ QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(q->completer()->completionModel());
+ if (proxy) {
+ q->setCurrentIndex(proxy->mapToSource(index).row());
+ emitActivated(currentIndex);
+ }
+ }
+
+# ifdef QT_KEYPAD_NAVIGATION
if ( QApplication::keypadNavigationEnabled()
&& q->isEditable()
&& q->completer()
&& q->completer()->completionMode() == QCompleter::UnfilteredPopupCompletion ) {
q->setEditFocus(false);
}
+# endif // QT_KEYPAD_NAVIGATION
}
-#endif
+#endif // !QT_NO_COMPLETER
void QComboBoxPrivate::updateArrow(QStyle::StateFlag state)
{
@@ -1149,6 +1160,14 @@ void QComboBoxPrivate::_q_editingFinished()
void QComboBoxPrivate::_q_returnPressed()
{
Q_Q(QComboBox);
+
+ // The insertion code below does not apply when the policy is QComboBox::NoInsert.
+ // In case a completer is installed, item activation via the completer is handled
+ // in _q_completerActivated(). Otherwise _q_editingFinished() updates the current
+ // index as appropriate.
+ if (insertPolicy == QComboBox::NoInsert)
+ return;
+
if (lineEdit && !lineEdit->text().isEmpty()) {
if (q->count() >= maxCount && !(this->insertPolicy == QComboBox::InsertAtCurrent))
return;
@@ -1191,7 +1210,6 @@ void QComboBoxPrivate::_q_returnPressed()
break;
}
break;
- case QComboBox::NoInsert:
default:
break;
}
@@ -1393,6 +1411,7 @@ void QComboBox::setAutoCompletion(bool enable)
if (d->lineEdit->completer())
return;
d->completer = new QCompleter(d->model, d->lineEdit);
+ connect(d->completer, SIGNAL(activated(QModelIndex)), this, SLOT(_q_completerActivated(QModelIndex)));
d->completer->setCaseSensitivity(d->autoCompletionCaseSensitivity);
d->completer->setCompletionMode(QCompleter::InlineCompletion);
d->completer->setCompletionColumn(d->modelColumn);
@@ -1805,8 +1824,10 @@ void QComboBox::setCompleter(QCompleter *c)
if (!d->lineEdit)
return;
d->lineEdit->setCompleter(c);
- if (c)
+ if (c) {
+ connect(c, SIGNAL(activated(QModelIndex)), this, SLOT(_q_completerActivated(QModelIndex)));
c->setWidget(this);
+ }
}
/*!
diff --git a/src/widgets/widgets/qcombobox.h b/src/widgets/widgets/qcombobox.h
index d4aeeb9620..0002cd08cb 100644
--- a/src/widgets/widgets/qcombobox.h
+++ b/src/widgets/widgets/qcombobox.h
@@ -260,8 +260,8 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_rowsRemoved(const QModelIndex & parent, int start, int end))
Q_PRIVATE_SLOT(d_func(), void _q_modelDestroyed())
Q_PRIVATE_SLOT(d_func(), void _q_modelReset())
-#ifdef QT_KEYPAD_NAVIGATION
- Q_PRIVATE_SLOT(d_func(), void _q_completerActivated())
+#ifndef QT_NO_COMPLETER
+ Q_PRIVATE_SLOT(d_func(), void _q_completerActivated(const QModelIndex &index))
#endif
};
diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h
index 14cf9e7925..07ba9b0925 100644
--- a/src/widgets/widgets/qcombobox_p.h
+++ b/src/widgets/widgets/qcombobox_p.h
@@ -348,8 +348,8 @@ public:
void _q_emitCurrentIndexChanged(const QModelIndex &index);
void _q_modelDestroyed();
void _q_modelReset();
-#ifdef QT_KEYPAD_NAVIGATION
- void _q_completerActivated();
+#ifndef QT_NO_COMPLETER
+ void _q_completerActivated(const QModelIndex &index);
#endif
void _q_resetButton();
void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp
index ac061e7071..72a463b30b 100644
--- a/src/widgets/widgets/qdockarealayout.cpp
+++ b/src/widgets/widgets/qdockarealayout.cpp
@@ -1471,7 +1471,7 @@ QList<int> QDockAreaLayoutInfo::indexOf(QWidget *widget) const
continue;
}
- if (!(item.flags & QDockAreaLayoutItem::GapItem) && item.widgetItem->widget() == widget) {
+ if (!(item.flags & QDockAreaLayoutItem::GapItem) && item.widgetItem && item.widgetItem->widget() == widget) {
QList<int> result;
result << i;
return result;