diff options
Diffstat (limited to 'src/widgets/widgets')
34 files changed, 199 insertions, 148 deletions
diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp index d956d2ba23..19528d61d2 100644 --- a/src/widgets/widgets/qabstractbutton.cpp +++ b/src/widgets/widgets/qabstractbutton.cpp @@ -468,7 +468,7 @@ void QAbstractButtonPrivate::emitToggled(bool checked) Constructs an abstract button with a \a parent. */ QAbstractButton::QAbstractButton(QWidget *parent) - : QWidget(*new QAbstractButtonPrivate, parent, 0) + : QWidget(*new QAbstractButtonPrivate, parent, { }) { Q_D(QAbstractButton); d->init(); @@ -490,7 +490,7 @@ QAbstractButton::QAbstractButton(QWidget *parent) /*! \internal */ QAbstractButton::QAbstractButton(QAbstractButtonPrivate &dd, QWidget *parent) - : QWidget(dd, parent, 0) + : QWidget(dd, parent, { }) { Q_D(QAbstractButton); d->init(); diff --git a/src/widgets/widgets/qabstractbutton.h b/src/widgets/widgets/qabstractbutton.h index e8dee142f2..50c94654f3 100644 --- a/src/widgets/widgets/qabstractbutton.h +++ b/src/widgets/widgets/qabstractbutton.h @@ -64,7 +64,7 @@ class Q_WIDGETS_EXPORT QAbstractButton : public QWidget Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut) #endif Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable) - Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true) + Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled USER true) Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat) Q_PROPERTY(bool autoExclusive READ autoExclusive WRITE setAutoExclusive) Q_PROPERTY(int autoRepeatDelay READ autoRepeatDelay WRITE setAutoRepeatDelay) diff --git a/src/widgets/widgets/qabstractslider.cpp b/src/widgets/widgets/qabstractslider.cpp index dc325ab871..a0611565b8 100644 --- a/src/widgets/widgets/qabstractslider.cpp +++ b/src/widgets/widgets/qabstractslider.cpp @@ -273,13 +273,13 @@ void QAbstractSliderPrivate::setSteps(int single, int page) \l value of 0. */ QAbstractSlider::QAbstractSlider(QWidget *parent) - :QWidget(*new QAbstractSliderPrivate, parent, 0) + :QWidget(*new QAbstractSliderPrivate, parent, { }) { } /*! \internal */ QAbstractSlider::QAbstractSlider(QAbstractSliderPrivate &dd, QWidget *parent) - :QWidget(dd, parent, 0) + :QWidget(dd, parent, { }) { } diff --git a/src/widgets/widgets/qabstractspinbox.cpp b/src/widgets/widgets/qabstractspinbox.cpp index fc19e0793e..b1e1c9bc1b 100644 --- a/src/widgets/widgets/qabstractspinbox.cpp +++ b/src/widgets/widgets/qabstractspinbox.cpp @@ -147,7 +147,7 @@ QT_BEGIN_NAMESPACE */ QAbstractSpinBox::QAbstractSpinBox(QWidget *parent) - : QWidget(*new QAbstractSpinBoxPrivate, parent, 0) + : QWidget(*new QAbstractSpinBoxPrivate, parent, { }) { Q_D(QAbstractSpinBox); d->init(); @@ -157,7 +157,7 @@ QAbstractSpinBox::QAbstractSpinBox(QWidget *parent) \internal */ QAbstractSpinBox::QAbstractSpinBox(QAbstractSpinBoxPrivate &dd, QWidget *parent) - : QWidget(dd, parent, 0) + : QWidget(dd, parent, { }) { Q_D(QAbstractSpinBox); d->init(); diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index 8593001f8b..749ae96df2 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -1207,9 +1207,9 @@ Qt::ItemFlags QCalendarModel::flags(const QModelIndex &index) const if (!date.isValid()) return QAbstractTableModel::flags(index); if (date < m_minimumDate) - return 0; + return { }; if (date > m_maximumDate) - return 0; + return { }; return QAbstractTableModel::flags(index); } @@ -2135,7 +2135,7 @@ void QCalendarWidgetPrivate::_q_editingFinished() \sa setCurrentPage() */ QCalendarWidget::QCalendarWidget(QWidget *parent) - : QWidget(*new QCalendarWidgetPrivate, parent, 0) + : QWidget(*new QCalendarWidgetPrivate, parent, { }) { Q_D(QCalendarWidget); diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 9a0e969e1c..19b442f477 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -91,30 +91,11 @@ QT_BEGIN_NAMESPACE QComboBoxPrivate::QComboBoxPrivate() : QWidgetPrivate(), - model(0), - lineEdit(0), - container(0), - insertPolicy(QComboBox::InsertAtBottom), - sizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow), - minimumContentsLength(0), shownOnce(false), autoCompletion(true), duplicatesEnabled(false), frame(true), - maxVisibleItems(10), - maxCount(INT_MAX), - modelColumn(0), - inserting(false), - arrowState(QStyle::State_None), - hoverControl(QStyle::SC_None), - autoCompletionCaseSensitivity(Qt::CaseInsensitive), - indexBeforeChange(-1) -#ifdef Q_OS_MAC - , m_platformMenu(0) -#endif -#if QT_CONFIG(completer) - , completer(0) -#endif + inserting(false) { } @@ -368,6 +349,8 @@ QSize QComboBoxPrivate::recomputeSizeHint(QSize &sh) const } if (minimumContentsLength > 0) sh.setWidth(qMax(sh.width(), minimumContentsLength * fm.horizontalAdvance(QLatin1Char('X')) + (hasIcon ? iconSize.width() + 4 : 0))); + if (!placeholderText.isEmpty()) + sh.setWidth(qMax(sh.width(), fm.boundingRect(placeholderText).width())); // height @@ -445,12 +428,8 @@ void QComboBoxPrivateContainer::paintEvent(QPaintEvent *e) QFrame::paintEvent(e); } -void QComboBoxPrivateContainer::leaveEvent(QEvent *) -{ -} - QComboBoxPrivateContainer::QComboBoxPrivateContainer(QAbstractItemView *itemView, QComboBox *parent) - : QFrame(parent, Qt::Popup), combo(parent), view(0), top(0), bottom(0), maybeIgnoreMouseButtonRelease(false) + : QFrame(parent, Qt::Popup), combo(parent) { // we need the combobox and itemview Q_ASSERT(parent); @@ -555,7 +534,7 @@ void QComboBoxPrivateContainer::updateScrollers() */ void QComboBoxPrivateContainer::viewDestroyed() { - view = 0; + view = nullptr; setItemView(new QComboBoxListView()); } @@ -589,7 +568,7 @@ void QComboBoxPrivateContainer::setItemView(QAbstractItemView *itemView) if (isAncestorOf(view)) delete view; - view = 0; + view = nullptr; } // setup the item view @@ -929,7 +908,7 @@ QStyleOptionComboBox QComboBoxPrivateContainer::comboStyleOption() const model QStandardItemModel. */ QComboBox::QComboBox(QWidget *parent) - : QWidget(*new QComboBoxPrivate(), parent, 0) + : QWidget(*new QComboBoxPrivate(), parent, { }) { Q_D(QComboBox); d->init(); @@ -939,7 +918,7 @@ QComboBox::QComboBox(QWidget *parent) \internal */ QComboBox::QComboBox(QComboBoxPrivate &dd, QWidget *parent) - : QWidget(dd, parent, 0) + : QWidget(dd, parent, { }) { Q_D(QComboBox); d->init(); @@ -1110,8 +1089,9 @@ void QComboBoxPrivate::_q_rowsInserted(const QModelIndex &parent, int start, int q->updateGeometry(); } - // set current index if combo was previously empty - if (start == 0 && (end - start + 1) == q->count() && !currentIndex.isValid()) { + // set current index if combo was previously empty and there is no placeholderText + if (start == 0 && (end - start + 1) == q->count() && !currentIndex.isValid() && + placeholderText.isEmpty()) { q->setCurrentIndex(0); // need to emit changed if model updated index "silently" } else if (currentIndex.row() != indexBeforeChange) { @@ -1214,10 +1194,9 @@ void QComboBox::initStyleOption(QStyleOptionComboBox *option) const } else { option->activeSubControls = d->hoverControl; } - if (d->currentIndex.isValid()) { - option->currentText = currentText(); + option->currentText = currentText(); + if (d->currentIndex.isValid()) option->currentIcon = d->itemIcon(d->currentIndex); - } option->iconSize = iconSize(); if (d->container && d->container->isVisible()) option->state |= QStyle::State_On; @@ -1566,7 +1545,7 @@ void QComboBox::setAutoCompletion(bool enable) d->lineEdit->setCompleter(d->completer); d->completer->setWidget(this); } else { - d->lineEdit->setCompleter(0); + d->lineEdit->setCompleter(nullptr); } } @@ -1755,7 +1734,7 @@ QSize QComboBox::iconSize() const if (d->iconSize.isValid()) return d->iconSize; - int iconWidth = style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this); + int iconWidth = style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this); return QSize(iconWidth, iconWidth); } @@ -1772,6 +1751,45 @@ void QComboBox::setIconSize(const QSize &size) } /*! + \property QComboBox::placeholderText + \brief Sets a \a placeholderText text shown when no valid index is set + + The \a placeholderText will be shown when an invalid index is set. The + text is not accessible in the dropdown list. When this function is called + before items are added the placeholder text will be shown, otherwise you + have to call setCurrentIndex(-1) programmatically if you want to show the + placeholder text. + Set an empty placeholder text to reset the setting. + + When the QComboBox is editable, use QLineEdit::setPlaceholderText() + instead. + + \since 5.15 +*/ +void QComboBox::setPlaceholderText(const QString &placeholderText) +{ + Q_D(QComboBox); + if (placeholderText == d->placeholderText) + return; + + d->placeholderText = placeholderText; + if (currentIndex() == -1) { + if (d->placeholderText.isEmpty() && currentIndex() == -1) + setCurrentIndex(0); + else + update(); + } else { + updateGeometry(); + } +} + +QString QComboBox::placeholderText() const +{ + Q_D(const QComboBox); + return d->placeholderText; +} + +/*! \property QComboBox::editable \brief whether the combo box can be edited by the user @@ -1786,7 +1804,7 @@ void QComboBox::setIconSize(const QSize &size) bool QComboBox::isEditable() const { Q_D(const QComboBox); - return d->lineEdit != 0; + return d->lineEdit != nullptr; } /*! \internal @@ -1842,7 +1860,7 @@ void QComboBox::setEditable(bool editable) setAttribute(Qt::WA_InputMethodEnabled, false); d->lineEdit->hide(); d->lineEdit->deleteLater(); - d->lineEdit = 0; + d->lineEdit = nullptr; } d->updateDelegate(); @@ -1891,6 +1909,8 @@ void QComboBox::setLineEdit(QLineEdit *edit) d->lineEdit->setFocusProxy(this); d->lineEdit->setAttribute(Qt::WA_MacShowFocusRect, false); #if QT_DEPRECATED_SINCE(5, 13) +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED #if QT_CONFIG(completer) setAutoCompletion(d->autoCompletion); @@ -1907,6 +1927,7 @@ void QComboBox::setLineEdit(QLineEdit *edit) } #endif #endif +QT_WARNING_POP #endif setAttribute(Qt::WA_InputMethodEnabled); @@ -1955,7 +1976,7 @@ void QComboBox::setValidator(const QValidator *v) const QValidator *QComboBox::validator() const { Q_D(const QComboBox); - return d->lineEdit ? d->lineEdit->validator() : 0; + return d->lineEdit ? d->lineEdit->validator() : nullptr; } #endif // QT_NO_VALIDATOR @@ -1999,7 +2020,7 @@ void QComboBox::setCompleter(QCompleter *c) QCompleter *QComboBox::completer() const { Q_D(const QComboBox); - return d->lineEdit ? d->lineEdit->completer() : 0; + return d->lineEdit ? d->lineEdit->completer() : nullptr; } #endif // QT_CONFIG(completer) @@ -2249,7 +2270,7 @@ QString QComboBox::currentText() const else if (d->currentIndex.isValid()) return d->itemText(d->currentIndex); else - return QString(); + return d->placeholderText; } /*! @@ -2886,7 +2907,7 @@ void QComboBox::hidePopup() QSignalBlocker containerBlocker(d->container); // Flash selected/triggered item (if any). if (style()->styleHint(QStyle::SH_Menu_FlashTriggeredItem)) { - QItemSelectionModel *selectionModel = view() ? view()->selectionModel() : 0; + QItemSelectionModel *selectionModel = view() ? view()->selectionModel() : nullptr; if (selectionModel && selectionModel->hasSelection()) { QEventLoop eventLoop; const QItemSelection selection = selectionModel->selection(); @@ -3079,6 +3100,9 @@ void QComboBox::paintEvent(QPaintEvent *) initStyleOption(&opt); painter.drawComplexControl(QStyle::CC_ComboBox, opt); + if (currentIndex() < 0) + opt.palette.setBrush(QPalette::ButtonText, opt.palette.brush(QPalette::ButtonText).color().lighter()); + // draw the icon and text painter.drawControl(QStyle::CE_ComboBoxLabel, opt); } diff --git a/src/widgets/widgets/qcombobox.h b/src/widgets/widgets/qcombobox.h index 286772c091..4f89d7f542 100644 --- a/src/widgets/widgets/qcombobox.h +++ b/src/widgets/widgets/qcombobox.h @@ -71,6 +71,7 @@ class Q_WIDGETS_EXPORT QComboBox : public QWidget Q_PROPERTY(SizeAdjustPolicy sizeAdjustPolicy READ sizeAdjustPolicy WRITE setSizeAdjustPolicy) Q_PROPERTY(int minimumContentsLength READ minimumContentsLength WRITE setMinimumContentsLength) Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize) + Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText) #if QT_CONFIG(completer) #if QT_DEPRECATED_SINCE(5, 13) @@ -148,6 +149,9 @@ public: QSize iconSize() const; void setIconSize(const QSize &size); + void setPlaceholderText(const QString &placeholderText); + QString placeholderText() const; + bool isEditable() const; void setEditable(bool editable); void setLineEdit(QLineEdit *edit); diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h index 5967776a61..c79406eafd 100644 --- a/src/widgets/widgets/qcombobox_p.h +++ b/src/widgets/widgets/qcombobox_p.h @@ -79,7 +79,6 @@ QT_REQUIRE_CONFIG(combobox); QT_BEGIN_NAMESPACE -class QAction; class QPlatformMenu; class QComboBoxListView : public QListView @@ -131,9 +130,6 @@ private: QComboBox *combo; }; - -class QStandardItemModel; - class Q_AUTOTEST_EXPORT QComboBoxPrivateScroller : public QWidget { Q_OBJECT @@ -212,7 +208,7 @@ Q_SIGNALS: private: QAbstractSlider::SliderAction sliderAction; QBasicTimer timer; - bool fast; + bool fast = false; }; class Q_WIDGETS_EXPORT QComboBoxPrivateContainer : public QFrame @@ -246,7 +242,6 @@ protected: void showEvent(QShowEvent *e) override; void hideEvent(QHideEvent *e) override; void timerEvent(QTimerEvent *timerEvent) override; - void leaveEvent(QEvent *e) override; void resizeEvent(QResizeEvent *e) override; void paintEvent(QPaintEvent *e) override; QStyleOptionComboBox comboStyleOption() const; @@ -257,18 +252,19 @@ Q_SIGNALS: private: QComboBox *combo; - QAbstractItemView *view; - QComboBoxPrivateScroller *top; - QComboBoxPrivateScroller *bottom; - bool maybeIgnoreMouseButtonRelease; + QAbstractItemView *view = nullptr; + QComboBoxPrivateScroller *top = nullptr; + QComboBoxPrivateScroller *bottom = nullptr; QElapsedTimer popupTimer; + bool maybeIgnoreMouseButtonRelease = false; friend class QComboBox; friend class QComboBoxPrivate; }; class Q_AUTOTEST_EXPORT QComboMenuDelegate : public QAbstractItemDelegate -{ Q_OBJECT +{ + Q_OBJECT public: QComboMenuDelegate(QObject *parent, QComboBox *cmb) : QAbstractItemDelegate(parent), mCombo(cmb) {} @@ -355,8 +351,8 @@ public: void _q_complete(); void _q_itemSelected(const QModelIndex &item); bool contains(const QString &text, int role); - void emitActivated(const QModelIndex&); - void _q_emitHighlighted(const QModelIndex&); + void emitActivated(const QModelIndex &index); + void _q_emitHighlighted(const QModelIndex &index); void _q_emitCurrentIndexChanged(const QModelIndex &index); void _q_modelDestroyed(); void _q_modelReset(); @@ -366,8 +362,8 @@ public: void _q_resetButton(); void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); void _q_updateIndexBeforeChange(); - void _q_rowsInserted(const QModelIndex & parent, int start, int end); - void _q_rowsRemoved(const QModelIndex & parent, int start, int end); + void _q_rowsInserted(const QModelIndex &parent, int start, int end); + void _q_rowsRemoved(const QModelIndex &parent, int start, int end); void updateArrow(QStyle::StateFlag state); bool updateHoverControl(const QPoint &pos); QRect popupGeometry(int screen = -1) const; @@ -402,39 +398,38 @@ public: }; #endif - QAbstractItemModel *model; - QLineEdit *lineEdit; - QComboBoxPrivateContainer *container; - QComboBox::InsertPolicy insertPolicy; - QComboBox::SizeAdjustPolicy sizeAdjustPolicy; - int minimumContentsLength; - QSize iconSize; - uint shownOnce : 1; - uint autoCompletion : 1; - uint duplicatesEnabled : 1; - uint frame : 1; - uint padding : 26; - int maxVisibleItems; - int maxCount; - int modelColumn; - bool inserting; - mutable QSize minimumSizeHint; - mutable QSize sizeHint; - QStyle::StateFlag arrowState; - QStyle::SubControl hoverControl; - QRect hoverRect; - QPersistentModelIndex currentIndex; - QPersistentModelIndex root; - Qt::CaseSensitivity autoCompletionCaseSensitivity; - int indexBeforeChange; + QAbstractItemModel *model = nullptr; + QLineEdit *lineEdit = nullptr; + QComboBoxPrivateContainer *container = nullptr; #ifdef Q_OS_MAC - QPlatformMenu *m_platformMenu; + QPlatformMenu *m_platformMenu = nullptr; #endif #if QT_CONFIG(completer) QPointer<QCompleter> completer; #endif - static QPalette viewContainerPalette(QComboBox *cmb) - { return cmb->d_func()->viewContainer()->palette(); } + QPersistentModelIndex currentIndex; + QPersistentModelIndex root; + QString placeholderText; + QRect hoverRect; + QSize iconSize; + mutable QSize minimumSizeHint; + mutable QSize sizeHint; + QComboBox::InsertPolicy insertPolicy = QComboBox::InsertAtBottom; + QComboBox::SizeAdjustPolicy sizeAdjustPolicy = QComboBox::AdjustToContentsOnFirstShow; + QStyle::StateFlag arrowState = QStyle::State_None; + QStyle::SubControl hoverControl = QStyle::SC_None; + Qt::CaseSensitivity autoCompletionCaseSensitivity = Qt::CaseInsensitive; + int minimumContentsLength = 0; + int indexBeforeChange = -1; + int maxVisibleItems = 10; + int maxCount = std::numeric_limits<int>::max(); + int modelColumn = 0; + int placeholderIndex = -1; + bool shownOnce : 1; + bool autoCompletion : 1; + bool duplicatesEnabled : 1; + bool frame : 1; + bool inserting : 1; }; QT_END_NAMESPACE diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index e26993fb23..3be163ff75 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -1416,12 +1416,12 @@ QDateTimeEdit::StepEnabled QDateTimeEdit::stepEnabled() const { Q_D(const QDateTimeEdit); if (d->readOnly) - return StepEnabled(0); + return {}; if (d->specialValue()) { - return (d->minimum == d->maximum ? StepEnabled(0) : StepEnabled(StepUpEnabled)); + return (d->minimum == d->maximum ? StepEnabled{} : StepEnabled(StepUpEnabled)); } - QAbstractSpinBox::StepEnabled ret = 0; + QAbstractSpinBox::StepEnabled ret = { }; #ifdef QT_KEYPAD_NAVIGATION if (QApplicationPrivate::keypadNavigationEnabled() && !hasEditFocus()) { @@ -1456,7 +1456,7 @@ QDateTimeEdit::StepEnabled QDateTimeEdit::stepEnabled() const switch (d->sectionType(d->currentSectionIndex)) { case QDateTimeParser::NoSection: case QDateTimeParser::FirstSection: - case QDateTimeParser::LastSection: return 0; + case QDateTimeParser::LastSection: return { }; default: break; } if (d->wrapping) @@ -1659,12 +1659,11 @@ QDateTimeEditPrivate::QDateTimeEditPrivate() cacheGuard = false; fixday = true; type = QVariant::DateTime; - sections = 0; + sections = { }; cachedDay = -1; currentSectionIndex = FirstSectionIndex; first.pos = 0; - sections = 0; calendarPopup = false; minimum = QDATETIMEEDIT_COMPAT_DATE_MIN.startOfDay(); maximum = QDATETIMEEDIT_DATE_MAX.endOfDay(); @@ -2256,7 +2255,7 @@ QDateTimeEdit::Section QDateTimeEditPrivate::convertToPublic(QDateTimeParser::Se QDateTimeEdit::Sections QDateTimeEditPrivate::convertSections(QDateTimeParser::Sections s) { - QDateTimeEdit::Sections ret = 0; + QDateTimeEdit::Sections ret; if (s & QDateTimeParser::MSecSection) ret |= QDateTimeEdit::MSecSection; if (s & QDateTimeParser::SecondSection) diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp index 28f6cdc7bd..9096ee82f6 100644 --- a/src/widgets/widgets/qdialogbuttonbox.cpp +++ b/src/widgets/widgets/qdialogbuttonbox.cpp @@ -482,7 +482,7 @@ QDialogButtonBox::QDialogButtonBox(QWidget *parent) \sa orientation, addButton() */ QDialogButtonBox::QDialogButtonBox(Qt::Orientation orientation, QWidget *parent) - : QWidget(*new QDialogButtonBoxPrivate(orientation), parent, 0) + : QWidget(*new QDialogButtonBoxPrivate(orientation), parent, { }) { d_func()->initLayout(); } diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 05ec3aface..687ef8ba29 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -238,8 +238,8 @@ void QDockWidgetTitleButton::paintEvent(QPaintEvent *) } opt.icon = icon(); - opt.subControls = 0; - opt.activeSubControls = 0; + opt.subControls = { }; + opt.activeSubControls = { }; opt.features = QStyleOptionToolButton::None; opt.arrowType = Qt::NoArrow; opt.iconSize = dockButtonIconSize(); diff --git a/src/widgets/widgets/qdockwidget_p.h b/src/widgets/widgets/qdockwidget_p.h index bc6ac86c45..e663ec4c2d 100644 --- a/src/widgets/widgets/qdockwidget_p.h +++ b/src/widgets/widgets/qdockwidget_p.h @@ -201,7 +201,11 @@ inline QLayoutItem *QDockWidgetItem::dockWidgetChildItem() const inline QDockWidgetLayout *QDockWidgetItem::dockWidgetLayout() const { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QWidget *w = const_cast<QDockWidgetItem*>(this)->widget(); +#else + QWidget *w = widget(); +#endif if (w != nullptr) return qobject_cast<QDockWidgetLayout*>(w->layout()); return nullptr; diff --git a/src/widgets/widgets/qeffects.cpp b/src/widgets/widgets/qeffects.cpp index 7069ef0368..e69366d7c8 100644 --- a/src/widgets/widgets/qeffects.cpp +++ b/src/widgets/widgets/qeffects.cpp @@ -65,7 +65,7 @@ class QAlphaWidget: public QWidget, private QEffects { Q_OBJECT public: - QAlphaWidget(QWidget* w, Qt::WindowFlags f = 0); + QAlphaWidget(QWidget* w, Qt::WindowFlags f = { }); ~QAlphaWidget(); void run(int time); diff --git a/src/widgets/widgets/qfocusframe.cpp b/src/widgets/widgets/qfocusframe.cpp index 0992becdf0..ee24e92c7e 100644 --- a/src/widgets/widgets/qfocusframe.cpp +++ b/src/widgets/widgets/qfocusframe.cpp @@ -154,7 +154,7 @@ void QFocusFrame::initStyleOption(QStyleOption *option) const */ QFocusFrame::QFocusFrame(QWidget *parent) - : QWidget(*new QFocusFramePrivate, parent, 0) + : QWidget(*new QFocusFramePrivate, parent, { }) { setAttribute(Qt::WA_TransparentForMouseEvents); setFocusPolicy(Qt::NoFocus); diff --git a/src/widgets/widgets/qgroupbox.cpp b/src/widgets/widgets/qgroupbox.cpp index eec794562a..f7fe072302 100644 --- a/src/widgets/widgets/qgroupbox.cpp +++ b/src/widgets/widgets/qgroupbox.cpp @@ -178,7 +178,7 @@ void QGroupBoxPrivate::click() */ QGroupBox::QGroupBox(QWidget *parent) - : QWidget(*new QGroupBoxPrivate, parent, 0) + : QWidget(*new QGroupBoxPrivate, parent, { }) { Q_D(QGroupBox); d->init(); diff --git a/src/widgets/widgets/qgroupbox.h b/src/widgets/widgets/qgroupbox.h index deaeba4656..bd8394b43b 100644 --- a/src/widgets/widgets/qgroupbox.h +++ b/src/widgets/widgets/qgroupbox.h @@ -57,7 +57,7 @@ class Q_WIDGETS_EXPORT QGroupBox : public QWidget Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment) Q_PROPERTY(bool flat READ isFlat WRITE setFlat) Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable) - Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true) + Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled USER true) public: explicit QGroupBox(QWidget *parent = nullptr); explicit QGroupBox(const QString &title, QWidget *parent = nullptr); diff --git a/src/widgets/widgets/qkeysequenceedit.cpp b/src/widgets/widgets/qkeysequenceedit.cpp index 6f2a6b2d5a..b63b0b4d72 100644 --- a/src/widgets/widgets/qkeysequenceedit.cpp +++ b/src/widgets/widgets/qkeysequenceedit.cpp @@ -131,7 +131,7 @@ void QKeySequenceEditPrivate::finishEditing() Constructs a QKeySequenceEdit widget with the given \a parent. */ QKeySequenceEdit::QKeySequenceEdit(QWidget *parent) - : QKeySequenceEdit(*new QKeySequenceEditPrivate, parent, 0) + : QKeySequenceEdit(*new QKeySequenceEditPrivate, parent, { }) { } diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 658315028a..dc767cdae6 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -274,7 +274,7 @@ QLineEdit::QLineEdit(QWidget* parent) \sa text(), setMaxLength() */ QLineEdit::QLineEdit(const QString& contents, QWidget* parent) - : QWidget(*new QLineEditPrivate, parent, 0) + : QWidget(*new QLineEditPrivate, parent, { }) { Q_D(QLineEdit); d->init(contents); diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h index 967b713096..ebed47da30 100644 --- a/src/widgets/widgets/qmainwindowlayout_p.h +++ b/src/widgets/widgets/qmainwindowlayout_p.h @@ -334,7 +334,7 @@ class QDockWidgetGroupWindow : public QWidget { Q_OBJECT public: - explicit QDockWidgetGroupWindow(QWidget* parent = nullptr, Qt::WindowFlags f = nullptr) + explicit QDockWidgetGroupWindow(QWidget* parent = nullptr, Qt::WindowFlags f = { }) : QWidget(parent, f) {} QDockAreaLayoutInfo *layoutInfo() const; #if QT_CONFIG(tabbar) diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index d58a1d06db..a0286dfcb1 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -2212,7 +2212,7 @@ void QMdiSubWindowPrivate::updateInternalWindowTitle() \sa QMdiArea::addSubWindow() */ QMdiSubWindow::QMdiSubWindow(QWidget *parent, Qt::WindowFlags flags) - : QWidget(*new QMdiSubWindowPrivate, parent, 0) + : QWidget(*new QMdiSubWindowPrivate, parent, { }) { Q_D(QMdiSubWindow); #if QT_CONFIG(menu) diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index 3d31a3b73a..afa5ca7142 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -324,15 +324,10 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst) QPoint pos(q->mapToGlobal(QPoint(adjustedActionRect.left(), adjustedActionRect.bottom() + 1))); QSize popup_size = activeMenu->sizeHint(); //we put the popup menu on the screen containing the bottom-center of the action rect - QScreen *popupScreen = q->window()->windowHandle()->screen(); - QPoint bottomMiddlePos = pos + QPoint(adjustedActionRect.width() / 2, 0); - const auto &siblings = popupScreen->virtualSiblings(); - for (QScreen *sibling : siblings) { - if (sibling->geometry().contains(bottomMiddlePos)) { - popupScreen = sibling; - break; - } - } + QScreen *menubarScreen = q->window()->windowHandle()->screen(); + QScreen *popupScreen = menubarScreen->virtualSiblingAt(pos + QPoint(adjustedActionRect.width() / 2, 0)); + if (!popupScreen) + popupScreen = menubarScreen; QRect screenRect = popupScreen->geometry(); pos = QPoint(qMax(pos.x(), screenRect.x()), qMax(pos.y(), screenRect.y())); const bool fitUp = (pos.y() - popup_size.height() >= screenRect.top()); @@ -740,7 +735,7 @@ QAction *QMenuBarPrivate::getNextAction(const int _start, const int increment) c /*! Constructs a menu bar with parent \a parent. */ -QMenuBar::QMenuBar(QWidget *parent) : QWidget(*new QMenuBarPrivate, parent, 0) +QMenuBar::QMenuBar(QWidget *parent) : QWidget(*new QMenuBarPrivate, parent, { }) { Q_D(QMenuBar); d->init(); diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp index 56253b8e44..04241fda09 100644 --- a/src/widgets/widgets/qprogressbar.cpp +++ b/src/widgets/widgets/qprogressbar.cpp @@ -234,7 +234,7 @@ bool QProgressBarPrivate::repaintRequired() const */ QProgressBar::QProgressBar(QWidget *parent) - : QWidget(*(new QProgressBarPrivate), parent, 0) + : QWidget(*(new QProgressBarPrivate), parent, { }) { d_func()->init(); } diff --git a/src/widgets/widgets/qscrollarea_p.h b/src/widgets/widgets/qscrollarea_p.h index 2bdf9ed596..26335285a4 100644 --- a/src/widgets/widgets/qscrollarea_p.h +++ b/src/widgets/widgets/qscrollarea_p.h @@ -65,7 +65,7 @@ class QScrollAreaPrivate: public QAbstractScrollAreaPrivate Q_DECLARE_PUBLIC(QScrollArea) public: - QScrollAreaPrivate(): resizable(false), alignment(nullptr){} + QScrollAreaPrivate(): resizable(false) {} void updateScrollBars(); void updateWidgetPosition(); QPointer<QWidget> widget; diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp index 835af9c7b8..662d4c9e92 100644 --- a/src/widgets/widgets/qsizegrip.cpp +++ b/src/widgets/widgets/qsizegrip.cpp @@ -195,7 +195,7 @@ Qt::Corner QSizeGripPrivate::corner() const parent. */ QSizeGrip::QSizeGrip(QWidget * parent) - : QWidget(*new QSizeGripPrivate, parent, 0) + : QWidget(*new QSizeGripPrivate, parent, { }) { Q_D(QSizeGrip); d->init(); diff --git a/src/widgets/widgets/qsplashscreen.cpp b/src/widgets/widgets/qsplashscreen.cpp index e39ef6d1cd..b7c3426e08 100644 --- a/src/widgets/widgets/qsplashscreen.cpp +++ b/src/widgets/widgets/qsplashscreen.cpp @@ -123,6 +123,11 @@ public: wish to do your own drawing you can get a pointer to the pixmap used in the splash screen with pixmap(). Alternatively, you can subclass QSplashScreen and reimplement drawContents(). + + In case of having multiple screens, it is also possible to show the + splash screen on a different screen than the primary one. For example: + + \snippet qsplashscreen/main.cpp 2 */ /*! @@ -139,6 +144,23 @@ QSplashScreen::QSplashScreen(const QPixmap &pixmap, Qt::WindowFlags f) /*! \overload + \since 5.15 + + This function allows you to specify the screen for your splashscreen. The + typical use for this constructor is if you have multiple screens and + prefer to have the splash screen on a different screen than your primary + one. In that case pass the proper \a screen. +*/ +QSplashScreen::QSplashScreen(QScreen *screen, const QPixmap &pixmap, Qt::WindowFlags f) + : QWidget(*(new QSplashScreenPrivate()), nullptr, Qt::SplashScreen | Qt::FramelessWindowHint | f) +{ + d_func()->setPixmap(pixmap, screen); +} + +#if QT_DEPRECATED_SINCE(5, 15) +/*! + \overload + \obsolete This function allows you to specify a parent for your splashscreen. The typical use for this constructor is if you have a multiple screens and @@ -152,6 +174,7 @@ QSplashScreen::QSplashScreen(QWidget *parent, const QPixmap &pixmap, Qt::WindowF // is still 0 here due to QWidget's special handling. d_func()->setPixmap(pixmap, QSplashScreenPrivate::screenFor(parent)); } +#endif /*! Destructor. @@ -286,26 +309,35 @@ void QSplashScreen::setPixmap(const QPixmap &pixmap) } // In setPixmap(), resize and try to position on a screen according to: -// 1) If a QDesktopScreenWidget is found in the parent hierarchy, use that (see docs on +// 1) If the screen for the given widget is available, use that +// 2) If a QDesktopScreenWidget is found in the parent hierarchy, use that (see docs on // QSplashScreen(QWidget *, QPixmap). -// 2) If a widget with associated QWindow is found, use that -// 3) When nothing can be found, try to center it over the cursor +// 3) If a widget with associated QWindow is found, use that +// 4) When nothing can be found, try to center it over the cursor +#if QT_DEPRECATED_SINCE(5, 15) static inline int screenNumberOf(const QDesktopScreenWidget *dsw) { auto desktopWidgetPrivate = static_cast<QDesktopWidgetPrivate *>(qt_widget_private(QApplication::desktop())); return desktopWidgetPrivate->screens.indexOf(const_cast<QDesktopScreenWidget *>(dsw)); } +#endif const QScreen *QSplashScreenPrivate::screenFor(const QWidget *w) { + if (w && w->screen()) + return w->screen(); + for (const QWidget *p = w; p !=nullptr ; p = p->parentWidget()) { +#if QT_DEPRECATED_SINCE(5, 15) if (auto dsw = qobject_cast<const QDesktopScreenWidget *>(p)) return QGuiApplication::screens().value(screenNumberOf(dsw)); +#endif if (QWindow *window = p->windowHandle()) return window->screen(); } + #if QT_CONFIG(cursor) // Note: We could rely on QPlatformWindow::initialGeometry() to center it // over the cursor, but not all platforms (namely Android) use that. diff --git a/src/widgets/widgets/qsplashscreen.h b/src/widgets/widgets/qsplashscreen.h index 8bdf4e7749..1877493fcf 100644 --- a/src/widgets/widgets/qsplashscreen.h +++ b/src/widgets/widgets/qsplashscreen.h @@ -55,7 +55,11 @@ class Q_WIDGETS_EXPORT QSplashScreen : public QWidget Q_OBJECT public: explicit QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()); + QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()); +#if QT_DEPRECATED_SINCE(5, 15) + QT_DEPRECATED_VERSION_X_5_15("Use the constructor taking a QScreen *") QSplashScreen(QWidget *parent, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()); +#endif virtual ~QSplashScreen(); void setPixmap(const QPixmap &pixmap); diff --git a/src/widgets/widgets/qsplitter.cpp b/src/widgets/widgets/qsplitter.cpp index e7a4889996..1a5fb7f251 100644 --- a/src/widgets/widgets/qsplitter.cpp +++ b/src/widgets/widgets/qsplitter.cpp @@ -119,7 +119,7 @@ QSplitterPrivate::~QSplitterPrivate() \a parent. */ QSplitterHandle::QSplitterHandle(Qt::Orientation orientation, QSplitter *parent) - : QWidget(*new QSplitterHandlePrivate, parent, 0) + : QWidget(*new QSplitterHandlePrivate, parent, { }) { Q_D(QSplitterHandle); d->s = parent; diff --git a/src/widgets/widgets/qstatusbar.cpp b/src/widgets/widgets/qstatusbar.cpp index 39f0f11daf..943b576ee3 100644 --- a/src/widgets/widgets/qstatusbar.cpp +++ b/src/widgets/widgets/qstatusbar.cpp @@ -226,7 +226,7 @@ QRect QStatusBarPrivate::messageRect() const \sa setSizeGripEnabled() */ QStatusBar::QStatusBar(QWidget * parent) - : QWidget(*new QStatusBarPrivate, parent, 0) + : QWidget(*new QStatusBarPrivate, parent, { }) { Q_D(QStatusBar); d->box = 0; diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index 7e1794efef..dfe362bdca 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -859,7 +859,7 @@ void QTabBarPrivate::refresh() Creates a new tab bar with the given \a parent. */ QTabBar::QTabBar(QWidget* parent) - :QWidget(*new QTabBarPrivate, parent, 0) + :QWidget(*new QTabBarPrivate, parent, { }) { Q_D(QTabBar); d->init(); diff --git a/src/widgets/widgets/qtabwidget.cpp b/src/widgets/widgets/qtabwidget.cpp index 4d7b39ae01..2b3b8280bb 100644 --- a/src/widgets/widgets/qtabwidget.cpp +++ b/src/widgets/widgets/qtabwidget.cpp @@ -359,7 +359,7 @@ void QTabWidget::initStyleOption(QStyleOptionTabWidgetFrame *option) const Constructs a tabbed widget with parent \a parent. */ QTabWidget::QTabWidget(QWidget *parent) - : QWidget(*new QTabWidgetPrivate, parent, 0) + : QWidget(*new QTabWidgetPrivate, parent, { }) { Q_D(QTabWidget); d->init(); diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp index 58e9c4fd87..79182dfa33 100644 --- a/src/widgets/widgets/qtoolbar.cpp +++ b/src/widgets/widgets/qtoolbar.cpp @@ -503,7 +503,7 @@ void QToolBarPrivate::plug(const QRect &r) Constructs a QToolBar with the given \a parent. */ QToolBar::QToolBar(QWidget *parent) - : QWidget(*new QToolBarPrivate, parent, 0) + : QWidget(*new QToolBarPrivate, parent, { }) { Q_D(QToolBar); d->init(); diff --git a/src/widgets/widgets/qtoolbar.h b/src/widgets/widgets/qtoolbar.h index 0c434e8d1d..6aaf59cafd 100644 --- a/src/widgets/widgets/qtoolbar.h +++ b/src/widgets/widgets/qtoolbar.h @@ -59,15 +59,9 @@ class Q_WIDGETS_EXPORT QToolBar : public QWidget { Q_OBJECT - Q_PROPERTY(bool movable READ isMovable WRITE setMovable - DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) != 0) - NOTIFY movableChanged) - Q_PROPERTY(Qt::ToolBarAreas allowedAreas READ allowedAreas WRITE setAllowedAreas - DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) != 0) - NOTIFY allowedAreasChanged) - Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation - DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) == 0) - NOTIFY orientationChanged) + Q_PROPERTY(bool movable READ isMovable WRITE setMovable NOTIFY movableChanged) + Q_PROPERTY(Qt::ToolBarAreas allowedAreas READ allowedAreas WRITE setAllowedAreas NOTIFY allowedAreasChanged) + Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged) Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged) Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle NOTIFY toolButtonStyleChanged) diff --git a/src/widgets/widgets/qtoolbarlayout.cpp b/src/widgets/widgets/qtoolbarlayout.cpp index 961a261e8f..ec60309806 100644 --- a/src/widgets/widgets/qtoolbarlayout.cpp +++ b/src/widgets/widgets/qtoolbarlayout.cpp @@ -240,9 +240,9 @@ Qt::Orientations QToolBarLayout::expandingDirections() const updateGeomArray(); QToolBar *tb = qobject_cast<QToolBar*>(parentWidget()); if (!tb) - return Qt::Orientations(0); + return {}; Qt::Orientation o = tb->orientation(); - return expanding ? Qt::Orientations(o) : Qt::Orientations(0); + return expanding ? Qt::Orientations(o) : Qt::Orientations{}; } bool QToolBarLayout::movable() const diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h index 59bf5466e6..1f06aa0b97 100644 --- a/src/widgets/widgets/qwidgettextcontrol_p.h +++ b/src/widgets/widgets/qwidgettextcontrol_p.h @@ -116,12 +116,12 @@ public: void setCurrentCharFormat(const QTextCharFormat &format); QTextCharFormat currentCharFormat() const; - bool find(const QString &exp, QTextDocument::FindFlags options = nullptr); + bool find(const QString &exp, QTextDocument::FindFlags options = { }); #ifndef QT_NO_REGEXP - bool find(const QRegExp &exp, QTextDocument::FindFlags options = nullptr); + bool find(const QRegExp &exp, QTextDocument::FindFlags options = { }); #endif #if QT_CONFIG(regularexpression) - bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = nullptr); + bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = { }); #endif QString toPlainText() const; |