diff options
100 files changed, 481 insertions, 340 deletions
diff --git a/examples/widgets/dialogs/classwizard/classwizard.cpp b/examples/widgets/dialogs/classwizard/classwizard.cpp index 81adf85b0d..8421289eab 100644 --- a/examples/widgets/dialogs/classwizard/classwizard.cpp +++ b/examples/widgets/dialogs/classwizard/classwizard.cpp @@ -118,9 +118,9 @@ void ClassWizard::accept() block += "public:\n"; if (field("qobjectCtor").toBool()) { - block += " " + className + "(QObject *parent = 0);\n"; + block += " " + className + "(QObject *parent = nullptr);\n"; } else if (field("qwidgetCtor").toBool()) { - block += " " + className + "(QWidget *parent = 0);\n"; + block += " " + className + "(QWidget *parent = nullptr);\n"; } else if (field("defaultCtor").toBool()) { block += " " + className + "();\n"; if (field("copyCtor").toBool()) { diff --git a/examples/widgets/dialogs/classwizard/classwizard.h b/examples/widgets/dialogs/classwizard/classwizard.h index fee0f6df66..0c386f0553 100644 --- a/examples/widgets/dialogs/classwizard/classwizard.h +++ b/examples/widgets/dialogs/classwizard/classwizard.h @@ -67,7 +67,7 @@ class ClassWizard : public QWizard Q_OBJECT public: - ClassWizard(QWidget *parent = 0); + ClassWizard(QWidget *parent = nullptr); void accept() override; }; @@ -79,7 +79,7 @@ class IntroPage : public QWizardPage Q_OBJECT public: - IntroPage(QWidget *parent = 0); + IntroPage(QWidget *parent = nullptr); private: QLabel *label; @@ -92,7 +92,7 @@ class ClassInfoPage : public QWizardPage Q_OBJECT public: - ClassInfoPage(QWidget *parent = 0); + ClassInfoPage(QWidget *parent = nullptr); private: QLabel *classNameLabel; @@ -114,7 +114,7 @@ class CodeStylePage : public QWizardPage Q_OBJECT public: - CodeStylePage(QWidget *parent = 0); + CodeStylePage(QWidget *parent = nullptr); protected: void initializePage() override; @@ -135,7 +135,7 @@ class OutputFilesPage : public QWizardPage Q_OBJECT public: - OutputFilesPage(QWidget *parent = 0); + OutputFilesPage(QWidget *parent = nullptr); protected: void initializePage() override; @@ -154,7 +154,7 @@ class ConclusionPage : public QWizardPage Q_OBJECT public: - ConclusionPage(QWidget *parent = 0); + ConclusionPage(QWidget *parent = nullptr); protected: void initializePage() override; diff --git a/examples/widgets/dialogs/extension/finddialog.h b/examples/widgets/dialogs/extension/finddialog.h index 858e1c929b..9b4b5b5f3d 100644 --- a/examples/widgets/dialogs/extension/finddialog.h +++ b/examples/widgets/dialogs/extension/finddialog.h @@ -68,7 +68,7 @@ class FindDialog : public QDialog Q_OBJECT public: - FindDialog(QWidget *parent = 0); + FindDialog(QWidget *parent = nullptr); private: QLabel *label; diff --git a/examples/widgets/dialogs/findfiles/window.h b/examples/widgets/dialogs/findfiles/window.h index 949df704bb..b74ba5e70c 100644 --- a/examples/widgets/dialogs/findfiles/window.h +++ b/examples/widgets/dialogs/findfiles/window.h @@ -68,7 +68,7 @@ class Window : public QWidget Q_OBJECT public: - Window(QWidget *parent = 0); + Window(QWidget *parent = nullptr); private slots: void browse(); diff --git a/examples/widgets/dialogs/licensewizard/licensewizard.h b/examples/widgets/dialogs/licensewizard/licensewizard.h index c7709d88b3..e2890e484f 100644 --- a/examples/widgets/dialogs/licensewizard/licensewizard.h +++ b/examples/widgets/dialogs/licensewizard/licensewizard.h @@ -72,7 +72,7 @@ public: Page_Conclusion }; //! [2] - LicenseWizard(QWidget *parent = 0); + LicenseWizard(QWidget *parent = nullptr); private slots: void showHelp(); @@ -86,7 +86,7 @@ class IntroPage : public QWizardPage Q_OBJECT public: - IntroPage(QWidget *parent = 0); + IntroPage(QWidget *parent = nullptr); int nextId() const override; @@ -103,7 +103,7 @@ class EvaluatePage : public QWizardPage Q_OBJECT public: - EvaluatePage(QWidget *parent = 0); + EvaluatePage(QWidget *parent = nullptr); int nextId() const override; @@ -120,7 +120,7 @@ class RegisterPage : public QWizardPage Q_OBJECT public: - RegisterPage(QWidget *parent = 0); + RegisterPage(QWidget *parent = nullptr); int nextId() const override; @@ -136,7 +136,7 @@ class DetailsPage : public QWizardPage Q_OBJECT public: - DetailsPage(QWidget *parent = 0); + DetailsPage(QWidget *parent = nullptr); int nextId() const override; @@ -155,7 +155,7 @@ class ConclusionPage : public QWizardPage Q_OBJECT public: - ConclusionPage(QWidget *parent = 0); + ConclusionPage(QWidget *parent = nullptr); void initializePage() override; int nextId() const override; diff --git a/examples/widgets/dialogs/standarddialogs/dialog.h b/examples/widgets/dialogs/standarddialogs/dialog.h index 0d1c8d3e54..6d9cbdc07a 100644 --- a/examples/widgets/dialogs/standarddialogs/dialog.h +++ b/examples/widgets/dialogs/standarddialogs/dialog.h @@ -66,7 +66,7 @@ class Dialog : public QWidget Q_OBJECT public: - Dialog(QWidget *parent = 0); + Dialog(QWidget *parent = nullptr); private slots: void setInteger(); diff --git a/examples/widgets/dialogs/tabdialog/tabdialog.h b/examples/widgets/dialogs/tabdialog/tabdialog.h index 2db47c9ddd..b7c6c5b8da 100644 --- a/examples/widgets/dialogs/tabdialog/tabdialog.h +++ b/examples/widgets/dialogs/tabdialog/tabdialog.h @@ -65,7 +65,7 @@ class GeneralTab : public QWidget Q_OBJECT public: - explicit GeneralTab(const QFileInfo &fileInfo, QWidget *parent = 0); + explicit GeneralTab(const QFileInfo &fileInfo, QWidget *parent = nullptr); }; //! [0] @@ -76,7 +76,7 @@ class PermissionsTab : public QWidget Q_OBJECT public: - explicit PermissionsTab(const QFileInfo &fileInfo, QWidget *parent = 0); + explicit PermissionsTab(const QFileInfo &fileInfo, QWidget *parent = nullptr); }; //! [1] @@ -87,7 +87,7 @@ class ApplicationsTab : public QWidget Q_OBJECT public: - explicit ApplicationsTab(const QFileInfo &fileInfo, QWidget *parent = 0); + explicit ApplicationsTab(const QFileInfo &fileInfo, QWidget *parent = nullptr); }; //! [2] @@ -98,7 +98,7 @@ class TabDialog : public QDialog Q_OBJECT public: - explicit TabDialog(const QString &fileName, QWidget *parent = 0); + explicit TabDialog(const QString &fileName, QWidget *parent = nullptr); private: QTabWidget *tabWidget; diff --git a/examples/widgets/effects/blurpicker/blurpicker.h b/examples/widgets/effects/blurpicker/blurpicker.h index 3f444419a8..dc7fc4dabb 100644 --- a/examples/widgets/effects/blurpicker/blurpicker.h +++ b/examples/widgets/effects/blurpicker/blurpicker.h @@ -63,7 +63,7 @@ class BlurPicker: public QGraphicsView Q_PROPERTY(qreal index READ index WRITE setIndex) public: - BlurPicker(QWidget *parent = 0); + BlurPicker(QWidget *parent = nullptr); qreal index() const; void setIndex(qreal); diff --git a/examples/widgets/effects/fademessage/fademessage.h b/examples/widgets/effects/fademessage/fademessage.h index d17a1616ce..4d84c4ed21 100644 --- a/examples/widgets/effects/fademessage/fademessage.h +++ b/examples/widgets/effects/fademessage/fademessage.h @@ -62,7 +62,7 @@ class FadeMessage: public QGraphicsView Q_OBJECT public: - FadeMessage(QWidget *parent = 0); + FadeMessage(QWidget *parent = nullptr); private: void setupScene(); diff --git a/examples/widgets/gestures/imagegestures/imagewidget.cpp b/examples/widgets/gestures/imagegestures/imagewidget.cpp index 0a6b963559..fb5351f949 100644 --- a/examples/widgets/gestures/imagegestures/imagewidget.cpp +++ b/examples/widgets/gestures/imagegestures/imagewidget.cpp @@ -50,26 +50,23 @@ #include "imagewidget.h" -#include <QtWidgets> +#include <QDir> +#include <QImageReader> +#include <QGestureEvent> +#include <QPainter> Q_LOGGING_CATEGORY(lcExample, "qt.examples.imagegestures") //! [constructor] ImageWidget::ImageWidget(QWidget *parent) - : QWidget(parent), - position(0), - horizontalOffset(0), - verticalOffset(0), - rotationAngle(0), - scaleFactor(1), - currentStepScaleFactor(1) - + : QWidget(parent), position(0), horizontalOffset(0), verticalOffset(0) + , rotationAngle(0), scaleFactor(1), currentStepScaleFactor(1) { - setMinimumSize(QSize(100,100)); + setMinimumSize(QSize(100, 100)); } //! [constructor] -void ImageWidget::grabGestures(const QList<Qt::GestureType> &gestures) +void ImageWidget::grabGestures(const QVector<Qt::GestureType> &gestures) { //! [enable gestures] for (Qt::GestureType gesture : gestures) @@ -96,11 +93,11 @@ void ImageWidget::paintEvent(QPaintEvent*) const qreal wh = height(); const qreal ww = width(); - p.translate(ww/2, wh/2); + p.translate(ww / 2, wh / 2); p.translate(horizontalOffset, verticalOffset); p.rotate(rotationAngle); p.scale(currentStepScaleFactor * scaleFactor, currentStepScaleFactor * scaleFactor); - p.translate(-iw/2, -ih/2); + p.translate(-iw / 2, -ih / 2); p.drawImage(0, 0, currentImage); } //! [paint method] @@ -198,8 +195,7 @@ void ImageWidget::openDirectory(const QString &path) { this->path = path; QDir dir(path); - QStringList nameFilters; - nameFilters << "*.jpg" << "*.png"; + const QStringList nameFilters{"*.jpg", "*.png"}; files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name); position = 0; @@ -207,7 +203,7 @@ void ImageWidget::openDirectory(const QString &path) update(); } -QImage ImageWidget::loadImage(const QString &fileName) +QImage ImageWidget::loadImage(const QString &fileName) const { QImageReader reader(fileName); reader.setAutoTransform(true); diff --git a/examples/widgets/gestures/imagegestures/imagewidget.h b/examples/widgets/gestures/imagegestures/imagewidget.h index 5e92541067..ae5eb7bc2b 100644 --- a/examples/widgets/gestures/imagegestures/imagewidget.h +++ b/examples/widgets/gestures/imagegestures/imagewidget.h @@ -51,9 +51,9 @@ #ifndef IMAGEWIDGET_H #define IMAGEWIDGET_H -#include <QWidget> #include <QImage> -#include <QtWidgets> +#include <QLoggingCategory> +#include <QWidget> QT_BEGIN_NAMESPACE class QGestureEvent; @@ -70,9 +70,9 @@ class ImageWidget : public QWidget Q_OBJECT public: - ImageWidget(QWidget *parent = 0); + ImageWidget(QWidget *parent = nullptr); void openDirectory(const QString &path); - void grabGestures(const QList<Qt::GestureType> &gestures); + void grabGestures(const QVector<Qt::GestureType> &gestures); protected: bool event(QEvent *event) override; @@ -87,7 +87,7 @@ private: void swipeTriggered(QSwipeGesture*); //! [class definition begin] - QImage loadImage(const QString &fileName); + QImage loadImage(const QString &fileName) const; void loadImage(); void goNextImage(); void goPrevImage(); diff --git a/examples/widgets/gestures/imagegestures/main.cpp b/examples/widgets/gestures/imagegestures/main.cpp index ecd7462bd3..4f8d4ec15e 100644 --- a/examples/widgets/gestures/imagegestures/main.cpp +++ b/examples/widgets/gestures/imagegestures/main.cpp @@ -102,7 +102,7 @@ int main(int argc, char *argv[]) return -1; } - QList<Qt::GestureType> gestures; + QVector<Qt::GestureType> gestures; if (!commandLineParser.isSet(disablePanOption)) gestures << Qt::PanGesture; if (!commandLineParser.isSet(disablePinchOption)) diff --git a/examples/widgets/gestures/imagegestures/mainwidget.cpp b/examples/widgets/gestures/imagegestures/mainwidget.cpp index c4e63e9e7d..d1c786a93a 100644 --- a/examples/widgets/gestures/imagegestures/mainwidget.cpp +++ b/examples/widgets/gestures/imagegestures/mainwidget.cpp @@ -72,7 +72,7 @@ void MainWidget::openDirectory(const QString &path) imageWidget->openDirectory(path); } -void MainWidget::grabGestures(const QList<Qt::GestureType> &gestures) +void MainWidget::grabGestures(const QVector<Qt::GestureType> &gestures) { imageWidget->grabGestures(gestures); } diff --git a/examples/widgets/gestures/imagegestures/mainwidget.h b/examples/widgets/gestures/imagegestures/mainwidget.h index f3763ffffc..1600597251 100644 --- a/examples/widgets/gestures/imagegestures/mainwidget.h +++ b/examples/widgets/gestures/imagegestures/mainwidget.h @@ -60,8 +60,8 @@ class MainWidget : public QMainWindow Q_OBJECT public: - MainWidget(QWidget *parent = 0); - void grabGestures(const QList<Qt::GestureType> &gestures); + MainWidget(QWidget *parent = nullptr); + void grabGestures(const QVector<Qt::GestureType> &gestures); public slots: void openDirectory(const QString &path); diff --git a/examples/widgets/graphicsview/collidingmice/mouse.cpp b/examples/widgets/graphicsview/collidingmice/mouse.cpp index 556e58d19b..8375092c39 100644 --- a/examples/widgets/graphicsview/collidingmice/mouse.cpp +++ b/examples/widgets/graphicsview/collidingmice/mouse.cpp @@ -69,8 +69,9 @@ static qreal normalizeAngle(qreal angle) } //! [0] -Mouse::Mouse() - : color(QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256)) +Mouse::Mouse() : color(QRandomGenerator::global()->bounded(256), + QRandomGenerator::global()->bounded(256), + QRandomGenerator::global()->bounded(256)) { setRotation(QRandomGenerator::global()->bounded(360 * 16)); } diff --git a/examples/widgets/itemviews/frozencolumn/main.cpp b/examples/widgets/itemviews/frozencolumn/main.cpp index 6f2b4a8d71..2965617ba1 100644 --- a/examples/widgets/itemviews/frozencolumn/main.cpp +++ b/examples/widgets/itemviews/frozencolumn/main.cpp @@ -71,7 +71,7 @@ int main(int argc, char* argv[]) model->setHorizontalHeaderLabels(list); int row = 0; - QStandardItem *newItem = 0; + QStandardItem *newItem = nullptr; while (!stream.atEnd()) { line = stream.readLine(); if (!line.startsWith('#') && line.contains(',')) { diff --git a/examples/widgets/itemviews/interview/model.cpp b/examples/widgets/itemviews/interview/model.cpp index feaf8bb98c..519164999d 100644 --- a/examples/widgets/itemviews/interview/model.cpp +++ b/examples/widgets/itemviews/interview/model.cpp @@ -132,7 +132,7 @@ bool Model::hasChildren(const QModelIndex &parent) const Qt::ItemFlags Model::flags(const QModelIndex &index) const { if (!index.isValid()) - return 0; + return {}; return Qt::ItemIsDragEnabled|QAbstractItemModel::flags(index); } @@ -146,7 +146,7 @@ Model::Node *Model::node(int row, Node *parent) const Model::Node *Model::parent(Node *child) const { - return child ? child->parent : 0; + return child ? child->parent : nullptr; } int Model::row(Node *node) const diff --git a/examples/widgets/itemviews/stardelegate/main.cpp b/examples/widgets/itemviews/stardelegate/main.cpp index 452976bba0..5ca85a6151 100644 --- a/examples/widgets/itemviews/stardelegate/main.cpp +++ b/examples/widgets/itemviews/stardelegate/main.cpp @@ -48,7 +48,8 @@ ** ****************************************************************************/ -#include <QtWidgets> +#include <QApplication> +#include <QTableWidget> #include "stardelegate.h" #include "stareditor.h" @@ -57,7 +58,7 @@ //! [0] void populateTableWidget(QTableWidget *tableWidget) { - static const struct { + static constexpr struct { const char *title; const char *genre; const char *artist; @@ -70,12 +71,12 @@ void populateTableWidget(QTableWidget *tableWidget) { "Sex Bomb", "Pop", "Tom Jones", 3 }, { "Barbie Girl", "Pop", "Aqua", 5 }, //! [2] - { 0, 0, 0, 0 } + { nullptr, nullptr, nullptr, 0 } //! [2] //! [3] }; //! [3] //! [4] - for (int row = 0; staticData[row].title != 0; ++row) { + for (int row = 0; staticData[row].title != nullptr; ++row) { QTableWidgetItem *item0 = new QTableWidgetItem(staticData[row].title); QTableWidgetItem *item1 = new QTableWidgetItem(staticData[row].genre); QTableWidgetItem *item2 = new QTableWidgetItem(staticData[row].artist); diff --git a/examples/widgets/painting/deform/pathdeform.cpp b/examples/widgets/painting/deform/pathdeform.cpp index 64e81f8cab..d5c8746247 100644 --- a/examples/widgets/painting/deform/pathdeform.cpp +++ b/examples/widgets/painting/deform/pathdeform.cpp @@ -262,7 +262,7 @@ PathDeformWidget::PathDeformWidget(QWidget *parent, bool smallScreen) QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->addWidget(m_renderer); - m_controls = new PathDeformControls(0, m_renderer, smallScreen); + m_controls = new PathDeformControls(nullptr, m_renderer, smallScreen); m_controls->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); if (!smallScreen) diff --git a/examples/widgets/painting/fontsampler/mainwindow.h b/examples/widgets/painting/fontsampler/mainwindow.h index ffb2839ffa..34e54440d4 100644 --- a/examples/widgets/painting/fontsampler/mainwindow.h +++ b/examples/widgets/painting/fontsampler/mainwindow.h @@ -70,7 +70,7 @@ class MainWindow : public QMainWindow, private Ui::MainWindowBase Q_OBJECT public: - MainWindow(QWidget *parent = 0); + MainWindow(QWidget *parent = nullptr); public slots: void on_clearAction_triggered(); diff --git a/examples/widgets/painting/gradients/gradients.cpp b/examples/widgets/painting/gradients/gradients.cpp index a4528ce06f..d62ae93a15 100644 --- a/examples/widgets/painting/gradients/gradients.cpp +++ b/examples/widgets/painting/gradients/gradients.cpp @@ -102,9 +102,9 @@ uint ShadeWidget::colorAt(int x) generateShade(); QPolygonF pts = m_hoverPoints->points(); - for (int i=1; i < pts.size(); ++i) { - if (pts.at(i-1).x() <= x && pts.at(i).x() >= x) { - QLineF l(pts.at(i-1), pts.at(i)); + for (int i = 1; i < pts.size(); ++i) { + if (pts.at(i - 1).x() <= x && pts.at(i).x() >= x) { + QLineF l(pts.at(i - 1), pts.at(i)); l.setLength(l.length() * ((x - l.x1()) / l.dx())); return m_shade.pixel(qRound(qMin(l.x2(), (qreal(m_shade.width() - 1)))), qRound(qMin(l.y2(), qreal(m_shade.height() - 1)))); @@ -118,9 +118,9 @@ void ShadeWidget::setGradientStops(const QGradientStops &stops) if (m_shade_type == ARGBShade) { m_alpha_gradient = QLinearGradient(0, 0, width(), 0); - for (int i=0; i<stops.size(); ++i) { - QColor c = stops.at(i).second; - m_alpha_gradient.setColorAt(stops.at(i).first, QColor(c.red(), c.green(), c.blue())); + for (const auto &stop : stops) { + QColor c = stop.second; + m_alpha_gradient.setColorAt(stop.first, QColor(c.red(), c.green(), c.blue())); } m_shade = QImage(); @@ -223,13 +223,13 @@ void GradientEditor::pointsUpdated() std::sort(points.begin(), points.end(), x_less_than); for (int i = 0; i < points.size(); ++i) { - qreal x = int(points.at(i).x()); - if (i + 1 < points.size() && x == points.at(i + 1).x()) + const int x = int(points.at(i).x()); + if (i + 1 < points.size() && x == int(points.at(i + 1).x())) continue; - QColor color((0x00ff0000 & m_red_shade->colorAt(int(x))) >> 16, - (0x0000ff00 & m_green_shade->colorAt(int(x))) >> 8, - (0x000000ff & m_blue_shade->colorAt(int(x))), - (0xff000000 & m_alpha_shade->colorAt(int(x))) >> 24); + QColor color((0x00ff0000 & m_red_shade->colorAt(x)) >> 16, + (0x0000ff00 & m_green_shade->colorAt(x)) >> 8, + (0x000000ff & m_blue_shade->colorAt(x)), + (0xff000000 & m_alpha_shade->colorAt(x)) >> 24); if (x / w > 1) return; @@ -568,8 +568,8 @@ void GradientRenderer::paint(QPainter *p) g = QConicalGradient(pts.at(0), angle); } - for (int i = 0; i < m_stops.size(); ++i) - g.setColorAt(m_stops.at(i).first, m_stops.at(i).second); + for (const auto &stop : qAsConst(m_stops)) + g.setColorAt(stop.first, stop.second); g.setSpread(m_spread); diff --git a/examples/widgets/painting/gradients/gradients.h b/examples/widgets/painting/gradients/gradients.h index c6525d18f8..45ef5d0f93 100644 --- a/examples/widgets/painting/gradients/gradients.h +++ b/examples/widgets/painting/gradients/gradients.h @@ -157,7 +157,7 @@ class GradientWidget : public QWidget Q_OBJECT public: - GradientWidget(QWidget *parent); + GradientWidget(QWidget *parent = nullptr); public slots: void setDefault1() { setDefault(1); } diff --git a/examples/widgets/painting/gradients/main.cpp b/examples/widgets/painting/gradients/main.cpp index 539d67e40e..0ddf7a4579 100644 --- a/examples/widgets/painting/gradients/main.cpp +++ b/examples/widgets/painting/gradients/main.cpp @@ -58,8 +58,8 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); - GradientWidget gradientWidget(0); - QStyle *arthurStyle = new ArthurStyle(); + GradientWidget gradientWidget; + QStyle *arthurStyle = new ArthurStyle; gradientWidget.setStyle(arthurStyle); const QList<QWidget *> widgets = gradientWidget.findChildren<QWidget *>(); for (QWidget *w : widgets) { diff --git a/examples/widgets/painting/painterpaths/renderarea.h b/examples/widgets/painting/painterpaths/renderarea.h index 5f0874b772..4b3ea5a397 100644 --- a/examples/widgets/painting/painterpaths/renderarea.h +++ b/examples/widgets/painting/painterpaths/renderarea.h @@ -60,7 +60,7 @@ class RenderArea : public QWidget Q_OBJECT public: - explicit RenderArea(const QPainterPath &path, QWidget *parent = 0); + explicit RenderArea(const QPainterPath &path, QWidget *parent = nullptr); QSize minimumSizeHint() const override; QSize sizeHint() const override; diff --git a/examples/widgets/painting/pathstroke/pathstroke.cpp b/examples/widgets/painting/pathstroke/pathstroke.cpp index e4009f0b1a..a850ce2672 100644 --- a/examples/widgets/painting/pathstroke/pathstroke.cpp +++ b/examples/widgets/painting/pathstroke/pathstroke.cpp @@ -48,11 +48,9 @@ ** ****************************************************************************/ +#include "pathstroke.h" #include "arthurstyle.h" #include "arthurwidgets.h" -#include "pathstroke.h" - -#include <stdio.h> extern void draw_round_rect(QPainter *p, const QRect &bounds, int radius); @@ -164,24 +162,39 @@ void PathStrokeControls::createCommonControls(QWidget* parent) // Connections - connect(flatCap, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setFlatCap); - connect(squareCap, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setSquareCap); - connect(roundCap, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setRoundCap); - - connect(bevelJoin, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setBevelJoin); - connect(miterJoin, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setMiterJoin); - connect(svgMiterJoin, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setSvgMiterJoin); - connect(roundJoin, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setRoundJoin); - - connect(curveMode, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setCurveMode); - connect(lineMode, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setLineMode); - - connect(solidLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setSolidLine); - connect(dashLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDashLine); - connect(dotLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDotLine); - connect(dashDotLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDashDotLine); - connect(dashDotDotLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDashDotDotLine); - connect(customDashLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setCustomDashLine); + connect(flatCap, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setFlatCap); + connect(squareCap, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setSquareCap); + connect(roundCap, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setRoundCap); + + connect(bevelJoin, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setBevelJoin); + connect(miterJoin, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setMiterJoin); + connect(svgMiterJoin, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setSvgMiterJoin); + connect(roundJoin, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setRoundJoin); + + connect(curveMode, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setCurveMode); + connect(lineMode, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setLineMode); + + connect(solidLine, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setSolidLine); + connect(dashLine, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setDashLine); + connect(dotLine, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setDotLine); + connect(dashDotLine, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setDashDotLine); + connect(dashDotDotLine, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setDashDotDotLine); + connect(customDashLine, &QAbstractButton::clicked, + m_renderer, &PathStrokeRenderer::setCustomDashLine); // Set the defaults: flatCap->setChecked(true); @@ -247,15 +260,20 @@ void PathStrokeControls::layoutForDesktop() // Set up connections - connect(animated, &QAbstractButton::toggled, m_renderer, &PathStrokeRenderer::setAnimation); + connect(animated, &QAbstractButton::toggled, + m_renderer, &PathStrokeRenderer::setAnimation); - connect(penWidth, &QAbstractSlider::valueChanged, m_renderer, &PathStrokeRenderer::setPenWidth); + connect(penWidth, &QAbstractSlider::valueChanged, + m_renderer, &PathStrokeRenderer::setPenWidth); - connect(showSourceButton, &QAbstractButton::clicked, m_renderer, &ArthurFrame::showSource); + connect(showSourceButton, &QAbstractButton::clicked, + m_renderer, &ArthurFrame::showSource); #if QT_CONFIG(opengl) - connect(enableOpenGLButton, &QAbstractButton::clicked, m_renderer, &ArthurFrame::enableOpenGL); + connect(enableOpenGLButton, &QAbstractButton::clicked, + m_renderer, &ArthurFrame::enableOpenGL); #endif - connect(whatsThisButton, &QAbstractButton::clicked, m_renderer, &ArthurFrame::setDescriptionEnabled); + connect(whatsThisButton, &QAbstractButton::clicked, + m_renderer, &ArthurFrame::setDescriptionEnabled); connect(m_renderer, &ArthurFrame::descriptionEnabledChanged, whatsThisButton, &QAbstractButton::setChecked); @@ -296,11 +314,11 @@ void PathStrokeControls::layoutForSmallScreens() #endif // Layouts: - QHBoxLayout *penWidthLayout = new QHBoxLayout(0); + QHBoxLayout *penWidthLayout = new QHBoxLayout; penWidthLayout->addWidget(penWidthLabel, 0, Qt::AlignRight); penWidthLayout->addWidget(penWidth); - QVBoxLayout *leftLayout = new QVBoxLayout(0); + QVBoxLayout *leftLayout = new QVBoxLayout; leftLayout->addWidget(m_capGroup); leftLayout->addWidget(m_joinGroup); #if QT_CONFIG(opengl) @@ -308,7 +326,7 @@ void PathStrokeControls::layoutForSmallScreens() #endif leftLayout->addLayout(penWidthLayout); - QVBoxLayout *rightLayout = new QVBoxLayout(0); + QVBoxLayout *rightLayout = new QVBoxLayout; rightLayout->addWidget(m_styleGroup); rightLayout->addWidget(m_pathModeGroup); @@ -356,7 +374,7 @@ PathStrokeWidget::PathStrokeWidget(bool smallScreen) // Widget construction and property setting m_renderer = new PathStrokeRenderer(this, smallScreen); - m_controls = new PathStrokeControls(0, m_renderer, smallScreen); + m_controls = new PathStrokeControls(nullptr, m_renderer, smallScreen); // Layouting QHBoxLayout *viewLayout = new QHBoxLayout(this); @@ -383,10 +401,10 @@ void PathStrokeWidget::hideControls() m_controls->hide(); } -void PathStrokeWidget::setStyle( QStyle * style ) +void PathStrokeWidget::setStyle(QStyle *style) { QWidget::setStyle(style); - if (m_controls != 0) + if (m_controls != nullptr) { m_controls->setStyle(style); @@ -516,7 +534,7 @@ void PathStrokeRenderer::updatePoints() qreal bottom = height() - pad; Q_ASSERT(m_points.size() == m_vectors.size()); - for (int i=0; i<m_points.size(); ++i) { + for (int i = 0; i < m_points.size(); ++i) { QPointF pos = m_points.at(i); QPointF vec = m_vectors.at(i); pos += vec; @@ -540,7 +558,7 @@ void PathStrokeRenderer::mousePressEvent(QMouseEvent *e) setDescriptionEnabled(false); m_activePoint = -1; qreal distance = -1; - for (int i=0; i<m_points.size(); ++i) { + for (int i = 0; i < m_points.size(); ++i) { qreal d = QLineF(e->pos(), m_points.at(i)).length(); if ((distance < 0 && d < 8 * m_pointSize) || d < distance) { distance = d; @@ -673,7 +691,6 @@ bool PathStrokeRenderer::event(QEvent *e) m_fingerPointMapping.clear(); setAnimation(m_wasAnimated); return true; - break; default: break; } diff --git a/examples/widgets/painting/pathstroke/pathstroke.h b/examples/widgets/painting/pathstroke/pathstroke.h index 7bc7e09003..b559ed2ba0 100644 --- a/examples/widgets/painting/pathstroke/pathstroke.h +++ b/examples/widgets/painting/pathstroke/pathstroke.h @@ -169,7 +169,7 @@ class PathStrokeWidget : public QWidget public: PathStrokeWidget(bool smallScreen); - void setStyle ( QStyle * style ); + void setStyle(QStyle *style); private: PathStrokeRenderer *m_renderer; diff --git a/examples/widgets/painting/shared/arthurstyle.h b/examples/widgets/painting/shared/arthurstyle.h index 8ea8354bab..64c888b636 100644 --- a/examples/widgets/painting/shared/arthurstyle.h +++ b/examples/widgets/painting/shared/arthurstyle.h @@ -63,7 +63,7 @@ public: void drawHoverRect(QPainter *painter, const QRect &rect) const; void drawPrimitive(PrimitiveElement element, const QStyleOption *option, - QPainter *painter, const QWidget *widget = 0) const override; + QPainter *painter, const QWidget *widget = nullptr) const override; void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override; void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, diff --git a/examples/widgets/painting/shared/arthurwidgets.cpp b/examples/widgets/painting/shared/arthurwidgets.cpp index 285be99d20..40d712c9e3 100644 --- a/examples/widgets/painting/shared/arthurwidgets.cpp +++ b/examples/widgets/painting/shared/arthurwidgets.cpp @@ -136,7 +136,7 @@ void ArthurFrame::createGlWindow() void ArthurFrame::paintEvent(QPaintEvent *e) { - static QImage *static_image = 0; + static QImage *static_image = nullptr; QPainter painter; @@ -376,7 +376,7 @@ void ArthurFrame::showSource() const QString html = QStringLiteral("<html><pre>") + contents + QStringLiteral("</pre></html>"); - QTextBrowser *sourceViewer = new QTextBrowser(0); + QTextBrowser *sourceViewer = new QTextBrowser; sourceViewer->setWindowTitle(tr("Source: %1").arg(m_sourceFileName.midRef(5))); sourceViewer->setParent(this, Qt::Dialog); sourceViewer->setAttribute(Qt::WA_DeleteOnClose); diff --git a/examples/widgets/painting/shared/fbopaintdevice.cpp b/examples/widgets/painting/shared/fbopaintdevice.cpp index 8207090cc8..9368293218 100644 --- a/examples/widgets/painting/shared/fbopaintdevice.cpp +++ b/examples/widgets/painting/shared/fbopaintdevice.cpp @@ -53,7 +53,7 @@ #include <QOffscreenSurface> #include <QOpenGLFunctions> -QFboPaintDevice::QFboPaintDevice(const QSize& size, bool flipped, bool clearOnInit, +QFboPaintDevice::QFboPaintDevice(const QSize &size, bool flipped, bool clearOnInit, QOpenGLFramebufferObject::Attachment attachment) : QOpenGLPaintDevice(size) { @@ -97,8 +97,8 @@ GLuint QFboPaintDevice::takeTexture() QImage QFboPaintDevice::toImage() const { - QOpenGLContext* currentContext = QOpenGLContext::currentContext(); - QSurface* currentSurface = currentContext ? currentContext->surface() : 0; + QOpenGLContext *currentContext = QOpenGLContext::currentContext(); + QSurface *currentSurface = currentContext ? currentContext->surface() : nullptr; context()->makeCurrent(m_surface); diff --git a/examples/widgets/painting/shared/fbopaintdevice.h b/examples/widgets/painting/shared/fbopaintdevice.h index 78451af895..a42bcc756d 100644 --- a/examples/widgets/painting/shared/fbopaintdevice.h +++ b/examples/widgets/painting/shared/fbopaintdevice.h @@ -60,7 +60,7 @@ class QFboPaintDevice : public QOpenGLPaintDevice { public: - QFboPaintDevice(const QSize&, bool flipped = false, bool clearOnInit = true, + QFboPaintDevice(const QSize &size, bool flipped = false, bool clearOnInit = true, QOpenGLFramebufferObject::Attachment = QOpenGLFramebufferObject::CombinedDepthStencil); ~QFboPaintDevice(); @@ -83,7 +83,7 @@ public: private: QOpenGLFramebufferObject *m_framebufferObject; - QSurface* m_surface; + QSurface *m_surface; }; #endif // QT_NO_OPENGL diff --git a/examples/widgets/painting/shared/hoverpoints.cpp b/examples/widgets/painting/shared/hoverpoints.cpp index 2032fb5a2c..2bf3963e9e 100644 --- a/examples/widgets/painting/shared/hoverpoints.cpp +++ b/examples/widgets/painting/shared/hoverpoints.cpp @@ -262,8 +262,8 @@ bool HoverPoints::eventFilter(QObject *object, QEvent *event) case QEvent::Paint: { QWidget *that_widget = m_widget; - m_widget = 0; - QApplication::sendEvent(object, event); + m_widget = nullptr; + QCoreApplication::sendEvent(object, event); m_widget = that_widget; paintPoints(); return true; diff --git a/examples/widgets/painting/transformations/renderarea.h b/examples/widgets/painting/transformations/renderarea.h index 140be27b2b..d4be7cefa4 100644 --- a/examples/widgets/painting/transformations/renderarea.h +++ b/examples/widgets/painting/transformations/renderarea.h @@ -70,7 +70,7 @@ class RenderArea : public QWidget Q_OBJECT public: - RenderArea(QWidget *parent = 0); + RenderArea(QWidget *parent = nullptr); void setOperations(const QList<Operation> &operations); void setShape(const QPainterPath &shape); diff --git a/examples/widgets/richtext/textedit/textedit.cpp b/examples/widgets/richtext/textedit/textedit.cpp index 996bb8e0a4..85fb83ab89 100644 --- a/examples/widgets/richtext/textedit/textedit.cpp +++ b/examples/widgets/richtext/textedit/textedit.cpp @@ -640,7 +640,7 @@ void TextEdit::textStyle(int styleIndex) { QTextCursor cursor = textEdit->textCursor(); QTextListFormat::Style style = QTextListFormat::ListStyleUndefined; - QTextBlockFormat::MarkerType marker = QTextBlockFormat::NoMarker; + QTextBlockFormat::MarkerType marker = QTextBlockFormat::MarkerType::NoMarker; switch (styleIndex) { case 1: @@ -657,14 +657,14 @@ void TextEdit::textStyle(int styleIndex) style = cursor.currentList()->format().style(); else style = QTextListFormat::ListDisc; - marker = QTextBlockFormat::Unchecked; + marker = QTextBlockFormat::MarkerType::Unchecked; break; case 5: if (cursor.currentList()) style = cursor.currentList()->format().style(); else style = QTextListFormat::ListDisc; - marker = QTextBlockFormat::Checked; + marker = QTextBlockFormat::MarkerType::Checked; break; case 6: style = QTextListFormat::ListDecimal; @@ -823,14 +823,14 @@ void TextEdit::cursorPositionChanged() break; } switch (textEdit->textCursor().block().blockFormat().marker()) { - case QTextBlockFormat::NoMarker: + case QTextBlockFormat::MarkerType::NoMarker: actionToggleCheckState->setChecked(false); break; - case QTextBlockFormat::Unchecked: + case QTextBlockFormat::MarkerType::Unchecked: comboStyle->setCurrentIndex(4); actionToggleCheckState->setChecked(false); break; - case QTextBlockFormat::Checked: + case QTextBlockFormat::MarkerType::Checked: comboStyle->setCurrentIndex(5); actionToggleCheckState->setChecked(true); break; diff --git a/examples/widgets/scroller/graphicsview/main.cpp b/examples/widgets/scroller/graphicsview/main.cpp index d6b2956d50..178c431e6c 100644 --- a/examples/widgets/scroller/graphicsview/main.cpp +++ b/examples/widgets/scroller/graphicsview/main.cpp @@ -64,7 +64,7 @@ class RectObject : public QGraphicsObject public: - RectObject(const QString &text, qreal x, qreal y, qreal width, qreal height, QBrush brush, QGraphicsItem *parent = 0) + RectObject(const QString &text, qreal x, qreal y, qreal width, qreal height, QBrush brush, QGraphicsItem *parent = nullptr) : QGraphicsObject(parent) , m_text(text) , m_rect(x, y, width, height) diff --git a/examples/widgets/statemachine/eventtransitions/main.cpp b/examples/widgets/statemachine/eventtransitions/main.cpp index 2de8e5daa3..fe9518092f 100644 --- a/examples/widgets/statemachine/eventtransitions/main.cpp +++ b/examples/widgets/statemachine/eventtransitions/main.cpp @@ -48,13 +48,18 @@ ** ****************************************************************************/ -#include <QtWidgets> +#include <QApplication> +#include <QEventTransition> +#include <QPushButton> +#include <QStateMachine> +#include <QVBoxLayout> +#include <QWidget> //! [0] class Window : public QWidget { public: - Window(QWidget *parent = 0) + Window(QWidget *parent = nullptr) : QWidget(parent) { QPushButton *button = new QPushButton(this); diff --git a/examples/widgets/statemachine/factorial/main.cpp b/examples/widgets/statemachine/factorial/main.cpp index e9431596fe..e6cbdcae29 100644 --- a/examples/widgets/statemachine/factorial/main.cpp +++ b/examples/widgets/statemachine/factorial/main.cpp @@ -57,10 +57,7 @@ class Factorial : public QObject Q_PROPERTY(int x READ x WRITE setX) Q_PROPERTY(int fac READ fac WRITE setFac) public: - Factorial(QObject *parent = 0) - : QObject(parent), m_x(-1), m_fac(1) - { - } + using QObject::QObject; int x() const { @@ -89,8 +86,8 @@ Q_SIGNALS: void xChanged(int value); private: - int m_x; - int m_fac; + int m_x = -1; + int m_fac = 1; }; //! [0] diff --git a/examples/widgets/statemachine/trafficlight/main.cpp b/examples/widgets/statemachine/trafficlight/main.cpp index a12d2f10d1..dd8bddcb37 100644 --- a/examples/widgets/statemachine/trafficlight/main.cpp +++ b/examples/widgets/statemachine/trafficlight/main.cpp @@ -48,7 +48,13 @@ ** ****************************************************************************/ -#include <QtWidgets> +#include <QApplication> +#include <QFinalState> +#include <QPainter> +#include <QStateMachine> +#include <QTimer> +#include <QVBoxLayout> +#include <QWidget> //! [0] class LightWidget : public QWidget @@ -56,7 +62,7 @@ class LightWidget : public QWidget Q_OBJECT Q_PROPERTY(bool on READ isOn WRITE setOn) public: - LightWidget(const QColor &color, QWidget *parent = 0) + LightWidget(const QColor &color, QWidget *parent = nullptr) : QWidget(parent), m_color(color), m_on(false) {} bool isOn() const @@ -94,7 +100,7 @@ private: class TrafficLightWidget : public QWidget { public: - TrafficLightWidget(QWidget *parent = 0) + TrafficLightWidget(QWidget *parent = nullptr) : QWidget(parent) { QVBoxLayout *vbox = new QVBoxLayout(this); @@ -125,7 +131,7 @@ private: //! [1] //! [2] -QState *createLightState(LightWidget *light, int duration, QState *parent = 0) +QState *createLightState(LightWidget *light, int duration, QState *parent = nullptr) { QState *lightState = new QState(parent); QTimer *timer = new QTimer(lightState); diff --git a/examples/widgets/touch/fingerpaint/scribblearea.h b/examples/widgets/touch/fingerpaint/scribblearea.h index 5138e3a1ab..fcdde53cc4 100644 --- a/examples/widgets/touch/fingerpaint/scribblearea.h +++ b/examples/widgets/touch/fingerpaint/scribblearea.h @@ -62,7 +62,7 @@ class ScribbleArea : public QWidget Q_OBJECT public: - ScribbleArea(QWidget *parent = 0); + ScribbleArea(QWidget *parent = nullptr); bool openImage(const QString &fileName); bool saveImage(const QString &fileName, const char *fileFormat); diff --git a/examples/widgets/touch/pinchzoom/graphicsview.cpp b/examples/widgets/touch/pinchzoom/graphicsview.cpp index 54e134aea2..6412f350a7 100644 --- a/examples/widgets/touch/pinchzoom/graphicsview.cpp +++ b/examples/widgets/touch/pinchzoom/graphicsview.cpp @@ -54,7 +54,7 @@ #include <QTouchEvent> GraphicsView::GraphicsView(QGraphicsScene *scene, QWidget *parent) - : QGraphicsView(scene, parent), totalScaleFactor(1) + : QGraphicsView(scene, parent) { viewport()->setAttribute(Qt::WA_AcceptTouchEvents); setDragMode(ScrollHandDrag); @@ -83,8 +83,8 @@ bool GraphicsView::viewportEvent(QEvent *event) totalScaleFactor *= currentScaleFactor; currentScaleFactor = 1; } - setTransform(QTransform().scale(totalScaleFactor * currentScaleFactor, - totalScaleFactor * currentScaleFactor)); + setTransform(QTransform::fromScale(totalScaleFactor * currentScaleFactor, + totalScaleFactor * currentScaleFactor)); } return true; } diff --git a/examples/widgets/touch/pinchzoom/graphicsview.h b/examples/widgets/touch/pinchzoom/graphicsview.h index d4e2e32d36..c0faeba444 100644 --- a/examples/widgets/touch/pinchzoom/graphicsview.h +++ b/examples/widgets/touch/pinchzoom/graphicsview.h @@ -56,10 +56,10 @@ class GraphicsView : public QGraphicsView Q_OBJECT public: - GraphicsView(QGraphicsScene *scene = 0, QWidget *parent = 0); + GraphicsView(QGraphicsScene *scene = nullptr, QWidget *parent = nullptr); bool viewportEvent(QEvent *event) override; private: - qreal totalScaleFactor; + qreal totalScaleFactor = 1; }; diff --git a/examples/widgets/touch/pinchzoom/main.cpp b/examples/widgets/touch/pinchzoom/main.cpp index 938432600f..2c2ba39a26 100644 --- a/examples/widgets/touch/pinchzoom/main.cpp +++ b/examples/widgets/touch/pinchzoom/main.cpp @@ -51,11 +51,10 @@ #include "graphicsview.h" #include "mouse.h" -#include <QtWidgets> +#include <QApplication> +#include <cmath> -#include <math.h> - -static const int MouseCount = 7; +static constexpr int MouseCount = 7; //! [0] int main(int argc, char **argv) diff --git a/examples/widgets/touch/pinchzoom/mouse.cpp b/examples/widgets/touch/pinchzoom/mouse.cpp index 1dfd7d749c..8456a0214d 100644 --- a/examples/widgets/touch/pinchzoom/mouse.cpp +++ b/examples/widgets/touch/pinchzoom/mouse.cpp @@ -56,8 +56,8 @@ #include <QStyleOption> #include <qmath.h> -const qreal Pi = M_PI; -const qreal TwoPi = 2 * M_PI; +constexpr qreal Pi = M_PI; +constexpr qreal TwoPi = 2 * M_PI; static qreal normalizeAngle(qreal angle) { @@ -69,9 +69,9 @@ static qreal normalizeAngle(qreal angle) } //! [0] -Mouse::Mouse() - : angle(0), speed(0), mouseEyeDirection(0), - color(QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256)) +Mouse::Mouse() : color(QRandomGenerator::global()->bounded(256), + QRandomGenerator::global()->bounded(256), + QRandomGenerator::global()->bounded(256)) { setTransform(QTransform().rotate(QRandomGenerator::global()->bounded(360 * 16)), true); startTimer(1000 / 33); diff --git a/examples/widgets/touch/pinchzoom/mouse.h b/examples/widgets/touch/pinchzoom/mouse.h index 870bfcd6c0..8ac110821e 100644 --- a/examples/widgets/touch/pinchzoom/mouse.h +++ b/examples/widgets/touch/pinchzoom/mouse.h @@ -70,9 +70,9 @@ protected: void timerEvent(QTimerEvent *event) override; private: - qreal angle; - qreal speed; - qreal mouseEyeDirection; + qreal angle = 0; + qreal speed = 0; + qreal mouseEyeDirection = 0; QColor color; }; //! [0] diff --git a/examples/widgets/tutorials/addressbook/part1/addressbook.h b/examples/widgets/tutorials/addressbook/part1/addressbook.h index 1d575e1260..4c2b456a41 100644 --- a/examples/widgets/tutorials/addressbook/part1/addressbook.h +++ b/examples/widgets/tutorials/addressbook/part1/addressbook.h @@ -65,7 +65,7 @@ class AddressBook : public QWidget Q_OBJECT public: - AddressBook(QWidget *parent = 0); + AddressBook(QWidget *parent = nullptr); private: QLineEdit *nameLine; diff --git a/examples/widgets/tutorials/addressbook/part2/addressbook.h b/examples/widgets/tutorials/addressbook/part2/addressbook.h index 7b1714b443..e690d14244 100644 --- a/examples/widgets/tutorials/addressbook/part2/addressbook.h +++ b/examples/widgets/tutorials/addressbook/part2/addressbook.h @@ -66,7 +66,7 @@ class AddressBook : public QWidget Q_OBJECT public: - AddressBook(QWidget *parent = 0); + AddressBook(QWidget *parent = nullptr); //! [slots] public slots: diff --git a/examples/widgets/tutorials/addressbook/part3/addressbook.h b/examples/widgets/tutorials/addressbook/part3/addressbook.h index 746a58a32a..f4a8aaa976 100644 --- a/examples/widgets/tutorials/addressbook/part3/addressbook.h +++ b/examples/widgets/tutorials/addressbook/part3/addressbook.h @@ -66,7 +66,7 @@ class AddressBook : public QWidget Q_OBJECT public: - AddressBook(QWidget *parent = 0); + AddressBook(QWidget *parent = nullptr); public slots: void addContact(); diff --git a/examples/widgets/tutorials/addressbook/part4/addressbook.h b/examples/widgets/tutorials/addressbook/part4/addressbook.h index a8d4d9fe1d..307df1eb15 100644 --- a/examples/widgets/tutorials/addressbook/part4/addressbook.h +++ b/examples/widgets/tutorials/addressbook/part4/addressbook.h @@ -66,7 +66,7 @@ class AddressBook : public QWidget Q_OBJECT public: - AddressBook(QWidget *parent = 0); + AddressBook(QWidget *parent = nullptr); //! [Mode enum] enum Mode { NavigationMode, AddingMode, EditingMode }; //! [Mode enum] diff --git a/examples/widgets/tutorials/addressbook/part5/addressbook.h b/examples/widgets/tutorials/addressbook/part5/addressbook.h index b60929a50c..9dd7ed1d89 100644 --- a/examples/widgets/tutorials/addressbook/part5/addressbook.h +++ b/examples/widgets/tutorials/addressbook/part5/addressbook.h @@ -69,7 +69,7 @@ class AddressBook : public QWidget Q_OBJECT public: - AddressBook(QWidget *parent = 0); + AddressBook(QWidget *parent = nullptr); enum Mode { NavigationMode, AddingMode, EditingMode }; public slots: diff --git a/examples/widgets/tutorials/addressbook/part5/finddialog.h b/examples/widgets/tutorials/addressbook/part5/finddialog.h index 0fca6be81b..8e63eeee79 100644 --- a/examples/widgets/tutorials/addressbook/part5/finddialog.h +++ b/examples/widgets/tutorials/addressbook/part5/finddialog.h @@ -63,7 +63,7 @@ class FindDialog : public QDialog Q_OBJECT public: - FindDialog(QWidget *parent = 0); + FindDialog(QWidget *parent = nullptr); QString getFindText(); public slots: diff --git a/examples/widgets/tutorials/addressbook/part6/addressbook.h b/examples/widgets/tutorials/addressbook/part6/addressbook.h index 8d328310f7..fca62c52b7 100644 --- a/examples/widgets/tutorials/addressbook/part6/addressbook.h +++ b/examples/widgets/tutorials/addressbook/part6/addressbook.h @@ -68,7 +68,7 @@ class AddressBook : public QWidget Q_OBJECT public: - AddressBook(QWidget *parent = 0); + AddressBook(QWidget *parent = nullptr); enum Mode { NavigationMode, AddingMode, EditingMode }; public slots: diff --git a/examples/widgets/tutorials/addressbook/part6/finddialog.h b/examples/widgets/tutorials/addressbook/part6/finddialog.h index 527e0254e9..46f8047a56 100644 --- a/examples/widgets/tutorials/addressbook/part6/finddialog.h +++ b/examples/widgets/tutorials/addressbook/part6/finddialog.h @@ -63,7 +63,7 @@ class FindDialog : public QDialog Q_OBJECT public: - FindDialog(QWidget *parent = 0); + FindDialog(QWidget *parent = nullptr); QString getFindText(); public slots: diff --git a/examples/widgets/tutorials/addressbook/part7/addressbook.h b/examples/widgets/tutorials/addressbook/part7/addressbook.h index 0f109b2ef1..47a0f3c062 100644 --- a/examples/widgets/tutorials/addressbook/part7/addressbook.h +++ b/examples/widgets/tutorials/addressbook/part7/addressbook.h @@ -68,7 +68,7 @@ class AddressBook : public QWidget Q_OBJECT public: - AddressBook(QWidget *parent = 0); + AddressBook(QWidget *parent = nullptr); enum Mode { NavigationMode, AddingMode, EditingMode }; public slots: diff --git a/examples/widgets/tutorials/addressbook/part7/finddialog.h b/examples/widgets/tutorials/addressbook/part7/finddialog.h index 527e0254e9..46f8047a56 100644 --- a/examples/widgets/tutorials/addressbook/part7/finddialog.h +++ b/examples/widgets/tutorials/addressbook/part7/finddialog.h @@ -63,7 +63,7 @@ class FindDialog : public QDialog Q_OBJECT public: - FindDialog(QWidget *parent = 0); + FindDialog(QWidget *parent = nullptr); QString getFindText(); public slots: diff --git a/examples/widgets/tutorials/modelview/3_changingmodel/main.cpp b/examples/widgets/tutorials/modelview/3_changingmodel/main.cpp index 2330019f93..90a8c6e894 100644 --- a/examples/widgets/tutorials/modelview/3_changingmodel/main.cpp +++ b/examples/widgets/tutorials/modelview/3_changingmodel/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); QTableView tableView; - MyModel myModel(0); + MyModel myModel; tableView.setModel(&myModel); tableView.show(); return a.exec(); diff --git a/examples/widgets/tutorials/modelview/7_selections/mainwindow.h b/examples/widgets/tutorials/modelview/7_selections/mainwindow.h index c9761dd3d9..74906c831d 100644 --- a/examples/widgets/tutorials/modelview/7_selections/mainwindow.h +++ b/examples/widgets/tutorials/modelview/7_selections/mainwindow.h @@ -69,7 +69,7 @@ private: private slots: void selectionChangedSlot(const QItemSelection &newSelection, const QItemSelection &oldSelection); public: - MainWindow(QWidget *parent = 0); + MainWindow(QWidget *parent = nullptr); }; #endif // MAINWINDOW_H diff --git a/examples/widgets/tutorials/notepad/notepad.h b/examples/widgets/tutorials/notepad/notepad.h index 9580ab8071..5e44dfeedc 100644 --- a/examples/widgets/tutorials/notepad/notepad.h +++ b/examples/widgets/tutorials/notepad/notepad.h @@ -72,7 +72,7 @@ class Notepad : public QMainWindow //! [4] public: - explicit Notepad(QWidget *parent = 0); + explicit Notepad(QWidget *parent = nullptr); //! [4] //! [5] ~Notepad(); diff --git a/examples/widgets/windowcontainer/windowcontainer.cpp b/examples/widgets/windowcontainer/windowcontainer.cpp index 9f2124c4e1..b920c85420 100644 --- a/examples/widgets/windowcontainer/windowcontainer.cpp +++ b/examples/widgets/windowcontainer/windowcontainer.cpp @@ -50,16 +50,14 @@ #include "openglwindow.h" -#include <QPainter> -#include <QMouseEvent> -#include <QKeyEvent> -#include <QFocusEvent> - #include <QApplication> -#include <QWidget> +#include <QFocusEvent> #include <QHBoxLayout> +#include <QKeyEvent> #include <QLineEdit> - +#include <QMouseEvent> +#include <QPainter> +#include <QWidget> // Making use of the class from the opengl example in gui. @@ -67,13 +65,10 @@ class Window : public OpenGLWindow { Q_OBJECT public: - Window() - : m_mouseDown(false) - , m_focus(false) - { - } + using OpenGLWindow::OpenGLWindow; - void render(QPainter *p) override { + void render(QPainter *p) override + { QLinearGradient g(0, 0, 0, height()); g.setColorAt(0, QColor("lightsteelblue")); g.setColorAt(1, Qt::black); @@ -93,15 +88,15 @@ public: p->restore(); } - if (m_focus) { + if (m_focus) p->drawText(20, height() - 20, QLatin1String("Window has focus!")); - } p->setRenderHint(QPainter::Antialiasing); p->drawPolyline(m_polygon); } - void mousePressEvent(QMouseEvent *e) override { + void mousePressEvent(QMouseEvent *e) override + { if (!m_mouseDown) { m_mouseDown = true; m_polygon.clear(); @@ -110,14 +105,16 @@ public: } } - void mouseMoveEvent(QMouseEvent *e) override { + void mouseMoveEvent(QMouseEvent *e) override + { if (m_mouseDown) { m_polygon.append(e->pos()); renderLater(); } } - void mouseReleaseEvent(QMouseEvent *e) override { + void mouseReleaseEvent(QMouseEvent *e) override + { if (m_mouseDown) { m_mouseDown = false; m_polygon.append(e->pos()); @@ -125,33 +122,35 @@ public: } } - void focusInEvent(QFocusEvent *) override { + void focusInEvent(QFocusEvent *) override + { m_focus = true; renderLater(); } - void focusOutEvent(QFocusEvent *) override { + void focusOutEvent(QFocusEvent *) override + { m_focus = false; m_polygon.clear(); renderLater(); } - void keyPressEvent(QKeyEvent *e) override { + void keyPressEvent(QKeyEvent *e) override + { m_key = e->text(); renderLater(); } - void keyReleaseEvent(QKeyEvent *) override { + void keyReleaseEvent(QKeyEvent *) override + { m_key = QString(); renderLater(); } private: QPolygon m_polygon; - bool m_mouseDown; - - bool m_focus; - QString m_key; + bool m_mouseDown = false; + bool m_focus = false; }; @@ -162,7 +161,7 @@ int main(int argc, char *argv[]) QWidget *widget = new QWidget; QHBoxLayout *layout = new QHBoxLayout(widget); - Window *window = new Window(); + Window *window = new Window; QWidget *container = QWidget::createWindowContainer(window); container->setMinimumSize(300, 300); diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 52baca1fbb..adac835c26 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -758,9 +758,7 @@ defineTest(qtConfLibrary_pkgConfig) { !qtConfResolveLibs($${1}.libs, $$libs): \ return(false) contains($${1}.libs, ".*\\.$${QMAKE_EXTENSION_STATICLIB}$") { - qtRunLoggedCommand("$$pkg_config --static --libs-only-L $$args", libpaths)|return(false) - qtRunLoggedCommand("$$pkg_config --static --libs-only-l $$args", libs)|return(false) - eval(libs = $$libpaths $$libs) + qtRunLoggedCommand("$$pkg_config --static --libs $$args", libs)|return(false) !qtConfResolveLibs($${1}.libs, $$libs): \ return(false) } diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index ee6a4b352a..661b7dd961 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -159,8 +159,12 @@ defineTest(qtAddToolEnv) { !isEmpty(cmd): cmd = "$$cmd " equals(ds, /) { batch_name = $${batch_name}.sh + equals(QMAKE_HOST.os, Darwin):exists(/bin/bash): \ + shell = /bin/bash + else: \ + shell = /bin/sh batch_cont = \ - "$$LITERAL_HASH!/bin/sh" \ + "$$LITERAL_HASH!$$shell" \ $$batch_sets \ "exec $$cmd\"$@\"" # It would be nicer to use the '.' command (without 'exec' above), diff --git a/mkspecs/features/qt_tracepoints.prf b/mkspecs/features/qt_tracepoints.prf index d1b45a47cb..56d315e1cd 100644 --- a/mkspecs/features/qt_tracepoints.prf +++ b/mkspecs/features/qt_tracepoints.prf @@ -16,7 +16,7 @@ PROVIDER_NAME = qt$$lower($$MODULE) INCLUDEPATH += $$absolute_path($$TRACEGEN_DIR, $$OUT_PWD) HEADER_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints_p$${first(QMAKE_EXT_H)} -!force_bootstrap:if(qtConfig(lttng)|qtConfig(etw)) { +if(qtConfig(lttng)|qtConfig(etw)) { SOURCE_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints$${first(QMAKE_EXT_CPP)} isEmpty(BUILDS)|build_pass { diff --git a/mkspecs/features/uikit/xcodebuild.mk b/mkspecs/features/uikit/xcodebuild.mk index 0c8d99f4b8..e1156d0e76 100644 --- a/mkspecs/features/uikit/xcodebuild.mk +++ b/mkspecs/features/uikit/xcodebuild.mk @@ -27,8 +27,8 @@ distclean: clean_all $(EXPORT_SUBTARGETS): % : %-build # Generic targets -%_first: $(firstword $(call targets, %)) ; -%_all: $(call targets, %) ; +%_first: $(EXPORT_PRE_TARGETDEPS) $(firstword $(call targets, %)) ; +%_all: $(EXPORT_PRE_TARGETDEPS) $(call targets, %) ; # Actions %-build: ACTION = build diff --git a/mkspecs/features/uikit/xcodebuild.prf b/mkspecs/features/uikit/xcodebuild.prf index 7a6b2acfc2..01022c7b99 100644 --- a/mkspecs/features/uikit/xcodebuild.prf +++ b/mkspecs/features/uikit/xcodebuild.prf @@ -29,6 +29,8 @@ cmd = "$$QMAKE_QMAKE $$system_quote($$_PRO_FILE_) -spec macx-xcode $$args" debug(1, "Generating Xcode project in $$OUT_PWD using '$$cmd'") system("$$QMAKE_CD $$system_quote($$OUT_PWD) && $$cmd") +QMAKE_EXTRA_VARIABLES += PRE_TARGETDEPS + # Subtargets for(build, BUILDS): \ diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index ebacd8a0c6..aa83cf2bcc 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -569,6 +569,23 @@ static QString getRelocatablePrefix() #error "The chosen platform / config does not support querying for a dynamic prefix." #endif +#if defined(Q_OS_LINUX) && !defined(QT_STATIC) && defined(__GLIBC__) + // QTBUG-78948: libQt5Core.so may be located in subdirectories below libdir. + // See "Hardware capabilities" in the ld.so documentation and the Qt 5.3.0 + // changelog regarding SSE2 support. + const QString libdir = QString::fromLatin1( + qt_configure_strs + qt_configure_str_offsets[QLibraryInfo::LibrariesPath - 1]); + QDir prefixDir(prefixPath); + while (!prefixDir.exists(libdir)) { + prefixDir.cdUp(); + prefixPath = prefixDir.absolutePath(); + if (prefixDir.isRoot()) { + prefixPath.clear(); + break; + } + } +#endif + Q_ASSERT_X(!prefixPath.isEmpty(), "getRelocatablePrefix", "Failed to find the Qt prefix path."); return prefixPath; diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp index f56fef7f8e..3b5f2f97da 100644 --- a/src/corelib/io/qstandardpaths.cpp +++ b/src/corelib/io/qstandardpaths.cpp @@ -232,7 +232,7 @@ QT_BEGIN_NAMESPACE \row \li DocumentsLocation \li "~/Documents" \row \li FontsLocation - \li "~/.fonts" + \li "~/.fonts", "~/.local/share/fonts", "/usr/local/share/fonts", "/usr/share/fonts" \row \li ApplicationsLocation \li "~/.local/share/applications", "/usr/local/share/applications", "/usr/share/applications" \row \li MusicLocation diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp index 6425890e3f..c35d7adc9f 100644 --- a/src/corelib/io/qstandardpaths_unix.cpp +++ b/src/corelib/io/qstandardpaths_unix.cpp @@ -339,6 +339,9 @@ QStringList QStandardPaths::standardLocations(StandardLocation type) break; case FontsLocation: dirs += QDir::homePath() + QLatin1String("/.fonts"); + dirs += xdgDataDirs(); + for (int i = 1; i < dirs.count(); ++i) + dirs[i].append(QLatin1String("/fonts")); break; default: break; diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp index 6ed0efe77d..95a7255a04 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp @@ -3861,6 +3861,9 @@ int QDateTime::offsetFromUtc() const QString QDateTime::timeZoneAbbreviation() const { + if (!isValid()) + return QString(); + switch (getSpec(d)) { case Qt::UTC: return QLatin1String("UTC"); @@ -3895,6 +3898,9 @@ QString QDateTime::timeZoneAbbreviation() const bool QDateTime::isDaylightTime() const { + if (!isValid()) + return false; + switch (getSpec(d)) { case Qt::UTC: case Qt::OffsetFromUTC: @@ -4761,17 +4767,24 @@ QDateTime QDateTime::toTimeZone(const QTimeZone &timeZone) const Returns \c true if this datetime is equal to the \a other datetime; otherwise returns \c false. + Since 5.14, all invalid datetimes are equal to one another and differ from + all other datetimes. + \sa operator!=() */ bool QDateTime::operator==(const QDateTime &other) const { - if (getSpec(d) == Qt::LocalTime - && getStatus(d) == getStatus(other.d)) { + if (!isValid()) + return !other.isValid(); + if (!other.isValid()) + return false; + + if (getSpec(d) == Qt::LocalTime && getStatus(d) == getStatus(other.d)) return getMSecs(d) == getMSecs(other.d); - } + // Convert to UTC and compare - return (toMSecsSinceEpoch() == other.toMSecsSinceEpoch()); + return toMSecsSinceEpoch() == other.toMSecsSinceEpoch(); } /*! @@ -4780,8 +4793,9 @@ bool QDateTime::operator==(const QDateTime &other) const Returns \c true if this datetime is different from the \a other datetime; otherwise returns \c false. - Two datetimes are different if either the date, the time, or the - time zone components are different. + Two datetimes are different if either the date, the time, or the time zone + components are different. Since 5.14, any invalid datetime is less than all + valid datetimes. \sa operator==() */ @@ -4793,12 +4807,16 @@ bool QDateTime::operator==(const QDateTime &other) const bool QDateTime::operator<(const QDateTime &other) const { - if (getSpec(d) == Qt::LocalTime - && getStatus(d) == getStatus(other.d)) { + if (!isValid()) + return other.isValid(); + if (!other.isValid()) + return false; + + if (getSpec(d) == Qt::LocalTime && getStatus(d) == getStatus(other.d)) return getMSecs(d) < getMSecs(other.d); - } + // Convert to UTC and compare - return (toMSecsSinceEpoch() < other.toMSecsSinceEpoch()); + return toMSecsSinceEpoch() < other.toMSecsSinceEpoch(); } /*! @@ -5849,7 +5867,7 @@ uint qHash(const QDateTime &key, uint seed) // QDate/QTime/spec/offset because QDateTime::operator== converts both arguments // to the same timezone. If we don't, qHash would return different hashes for // two QDateTimes that are equivalent once converted to the same timezone. - return qHash(key.toMSecsSinceEpoch(), seed); + return key.isValid() ? qHash(key.toMSecsSinceEpoch(), seed) : seed; } /*! \fn uint qHash(const QDate &key, uint seed = 0) diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index 2ae63fe135..52c8d13fe3 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -583,6 +583,13 @@ struct BezierEase : public QEasingCurveFunction qWarning("QEasingCurve: Invalid bezier curve"); return x; } + + // The bezier computation is not always precise on the endpoints, so handle explicitly + if (!(x > 0)) + return 0; + if (!(x < 1)) + return 1; + SingleCubicBezier *singleCubicBezier = 0; getBezierSegment(singleCubicBezier, x); @@ -998,6 +1005,11 @@ struct BackEase : public QEasingCurveFunction qreal value(qreal t) override { + // The *Back() functions are not always precise on the endpoints, so handle explicitly + if (!(t > 0)) + return 0; + if (!(t < 1)) + return 1; qreal o = (_o < 0) ? qreal(1.70158) : _o; switch(_t) { case QEasingCurve::InBack: diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index 58b5af3615..d6f3230fd2 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -871,8 +871,12 @@ bool QDBusConnection::disconnect(const QString &service, const QString &path, co This function does not replace existing objects: if there is already an object registered at path \a path, this function will return false. Use unregisterObject() to unregister it first. + The ExportChildObjects flag exports child objects on D-Bus based on the + path of the registered objects and the QObject::objectName of the child. + Therefore, it is important for the child object to have an object name. + You cannot register an object as a child object of an object that - was registered with QDBusConnection::ExportChildObjects. + was registered with ExportChildObjects. */ bool QDBusConnection::registerObject(const QString &path, QObject *object, RegisterOptions options) { @@ -891,8 +895,12 @@ bool QDBusConnection::registerObject(const QString &path, QObject *object, Regis This function does not replace existing objects: if there is already an object registered at path \a path, this function will return false. Use unregisterObject() to unregister it first. + The ExportChildObjects flag exports child objects on D-Bus based on the + path of the registered objects and the QObject::objectName of the child. + Therefore, it is important for the child object to have an object name. + You cannot register an object as a child object of an object that - was registered with QDBusConnection::ExportChildObjects. + was registered with ExportChildObjects. */ bool QDBusConnection::registerObject(const QString &path, const QString &interface, QObject *object, RegisterOptions options) { diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index 3e975115ab..25fce050a1 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -414,7 +414,7 @@ QFrameInfo QMoviePrivate::infoForFrame(int frameNumber) } else { // We've read all frames now. Return an end marker haveReadAll = true; - return QFrameInfo::endMarker(); + return frameNumber == greatestFrameNumber + 1 ? QFrameInfo::endMarker() : QFrameInfo(); } } } diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 03be72ca30..5f61853a6d 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -617,6 +617,7 @@ bool QWindowSystemInterface::isTouchDeviceRegistered(const QTouchDevice *device) static int g_nextPointId = 1; // map from device-independent point id (arbitrary) to "Qt point" ids +QMutex QWindowSystemInterfacePrivate::pointIdMapMutex; typedef QMap<quint64, int> PointIdMap; Q_GLOBAL_STATIC(PointIdMap, g_pointIdMap) @@ -634,6 +635,8 @@ Q_GLOBAL_STATIC(PointIdMap, g_pointIdMap) */ static int acquireCombinedPointId(quint8 deviceId, int pointId) { + QMutexLocker locker(&QWindowSystemInterfacePrivate::pointIdMapMutex); + quint64 combinedId64 = (quint64(deviceId) << 32) + pointId; auto it = g_pointIdMap->constFind(combinedId64); int uid; @@ -693,6 +696,8 @@ QList<QTouchEvent::TouchPoint> } if (states == Qt::TouchPointReleased) { + QMutexLocker locker(&QWindowSystemInterfacePrivate::pointIdMapMutex); + // All points on deviceId have been released. // Remove all points associated with that device from g_pointIdMap. // (On other devices, some touchpoints might still be pressed. @@ -712,6 +717,7 @@ QList<QTouchEvent::TouchPoint> void QWindowSystemInterfacePrivate::clearPointIdMap() { + QMutexLocker locker(&QWindowSystemInterfacePrivate::pointIdMapMutex); g_pointIdMap->clear(); g_nextPointId = 1; } diff --git a/src/gui/kernel/qwindowsysteminterface_p.h b/src/gui/kernel/qwindowsysteminterface_p.h index 540170f733..55fd181ef0 100644 --- a/src/gui/kernel/qwindowsysteminterface_p.h +++ b/src/gui/kernel/qwindowsysteminterface_p.h @@ -528,6 +528,7 @@ public: static QWaitCondition eventsFlushed; static QMutex flushEventMutex; + static QMutex pointIdMapMutex; static QAtomicInt eventAccepted; static QList<QTouchEvent::TouchPoint> diff --git a/src/gui/text/qabstracttextdocumentlayout.cpp b/src/gui/text/qabstracttextdocumentlayout.cpp index 5263ece87c..8b8f3e28ac 100644 --- a/src/gui/text/qabstracttextdocumentlayout.cpp +++ b/src/gui/text/qabstracttextdocumentlayout.cpp @@ -660,7 +660,7 @@ QTextBlock QAbstractTextDocumentLayout::blockWithMarkerAt(const QPointF &pos) co { QTextBlock block = document()->firstBlock(); while (block.isValid()) { - if (block.blockFormat().marker() != QTextBlockFormat::NoMarker) { + if (block.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker) { QRectF blockBr = blockBoundingRect(block); QTextBlockFormat blockFmt = block.blockFormat(); QFontMetrics fm(block.charFormat().font()); diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 1d5afee16b..7be114adf9 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2194,11 +2194,11 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p QBrush brush = context.palette.brush(QPalette::Text); - bool marker = bl.blockFormat().marker() != QTextBlockFormat::NoMarker; + bool marker = bl.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker; if (marker) { int adj = fontMetrics.lineSpacing() / 6; r.adjust(-adj, 0, -adj, 0); - if (bl.blockFormat().marker() == QTextBlockFormat::Checked) { + if (bl.blockFormat().marker() == QTextBlockFormat::MarkerType::Checked) { // ### Qt6: render with QStyle / PE_IndicatorCheckBox. We don't currently // have access to that here, because it would be a widget dependency. painter->setPen(QPen(painter->pen().color(), 2)); diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h index 12f14a1555..28da0fe344 100644 --- a/src/gui/text/qtextformat.h +++ b/src/gui/text/qtextformat.h @@ -627,7 +627,7 @@ public: LineDistanceHeight = 4 }; - enum MarkerType { + enum class MarkerType { NoMarker = 0, Unchecked = 1, Checked = 2 diff --git a/src/gui/text/qtextmarkdownimporter.cpp b/src/gui/text/qtextmarkdownimporter.cpp index b96263f5fc..fe7e422923 100644 --- a/src/gui/text/qtextmarkdownimporter.cpp +++ b/src/gui/text/qtextmarkdownimporter.cpp @@ -190,8 +190,8 @@ int QTextMarkdownImporter::cbEnterBlock(int blockType, void *det) m_listItem = true; MD_BLOCK_LI_DETAIL *detail = static_cast<MD_BLOCK_LI_DETAIL *>(det); m_markerType = detail->is_task ? - (detail->task_mark == ' ' ? QTextBlockFormat::Unchecked : QTextBlockFormat::Checked) : - QTextBlockFormat::NoMarker; + (detail->task_mark == ' ' ? QTextBlockFormat::MarkerType::Unchecked : QTextBlockFormat::MarkerType::Checked) : + QTextBlockFormat::MarkerType::NoMarker; qCDebug(lcMD) << "LI"; } break; case MD_BLOCK_UL: { @@ -549,7 +549,7 @@ void QTextMarkdownImporter::insertBlock() blockFormat.setTopMargin(m_paragraphMargin); blockFormat.setBottomMargin(m_paragraphMargin); } - if (m_markerType == QTextBlockFormat::NoMarker) + if (m_markerType == QTextBlockFormat::MarkerType::NoMarker) blockFormat.clearProperty(QTextFormat::BlockMarker); else blockFormat.setMarker(m_markerType); diff --git a/src/gui/text/qtextmarkdownimporter_p.h b/src/gui/text/qtextmarkdownimporter_p.h index 1b8c2ca354..35655aff8a 100644 --- a/src/gui/text/qtextmarkdownimporter_p.h +++ b/src/gui/text/qtextmarkdownimporter_p.h @@ -128,7 +128,7 @@ private: Features m_features; QTextImageFormat m_imageFormat; QTextListFormat m_listFormat; - QTextBlockFormat::MarkerType m_markerType = QTextBlockFormat::NoMarker; + QTextBlockFormat::MarkerType m_markerType = QTextBlockFormat::MarkerType::NoMarker; bool m_needsInsertBlock = false; bool m_needsInsertList = false; bool m_listItem = false; // true from the beginning of LI to the end of the first P diff --git a/src/gui/text/qtextmarkdownwriter.cpp b/src/gui/text/qtextmarkdownwriter.cpp index cbfb092485..764c64aead 100644 --- a/src/gui/text/qtextmarkdownwriter.cpp +++ b/src/gui/text/qtextmarkdownwriter.cpp @@ -327,10 +327,10 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign break; } switch (blockFmt.marker()) { - case QTextBlockFormat::Checked: + case QTextBlockFormat::MarkerType::Checked: bullet += " [x]"; break; - case QTextBlockFormat::Unchecked: + case QTextBlockFormat::MarkerType::Unchecked: bullet += " [ ]"; break; default: diff --git a/src/gui/text/qtextodfwriter.cpp b/src/gui/text/qtextodfwriter.cpp index 3561c185a6..0e8666565f 100644 --- a/src/gui/text/qtextodfwriter.cpp +++ b/src/gui/text/qtextodfwriter.cpp @@ -358,7 +358,7 @@ void QTextOdfWriter::writeBlock(QXmlStreamWriter &writer, const QTextBlock &bloc int precedingSpaces = 0; int exportedIndex = 0; for (int i=0; i <= fragmentText.count(); ++i) { - QChar character = fragmentText[i]; + QChar character = (i == fragmentText.count() ? QChar() : fragmentText.at(i)); bool isSpace = character.unicode() == ' '; // find more than one space. -> <text:s text:c="2" /> diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp index b280f27fac..bf2df93d11 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp @@ -98,8 +98,8 @@ void QEvdevTouchManager::addDevice(const QString &deviceNode) qCDebug(qLcEvdevTouch, "evdevtouch: Adding device at %ls", qUtf16Printable(deviceNode)); auto handler = qt_make_unique<QEvdevTouchScreenHandlerThread>(deviceNode, m_spec); if (handler) { - m_activeDevices.add(deviceNode, std::move(handler)); connect(handler.get(), &QEvdevTouchScreenHandlerThread::touchDeviceRegistered, this, &QEvdevTouchManager::updateInputDeviceCount); + m_activeDevices.add(deviceNode, std::move(handler)); } else { qWarning("evdevtouch: Failed to open touch device %ls", qUtf16Printable(deviceNode)); } diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index 2cf6672da9..2df85c791b 100644 --- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm @@ -171,12 +171,8 @@ QT_USE_NAMESPACE // This function will only be called when NSApp is actually running. - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { - // The reflection delegate gets precedence - if (reflectionDelegate) { - if ([reflectionDelegate respondsToSelector:@selector(applicationShouldTerminate:)]) - return [reflectionDelegate applicationShouldTerminate:sender]; - return NSTerminateNow; - } + if ([reflectionDelegate respondsToSelector:_cmd]) + return [reflectionDelegate applicationShouldTerminate:sender]; if ([self canQuit]) { if (!startedQuit) { @@ -228,10 +224,6 @@ QT_USE_NAMESPACE */ NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager]; [eventManager setEventHandler:self - andSelector:@selector(appleEventQuit:withReplyEvent:) - forEventClass:kCoreEventClass - andEventID:kAEQuitApplication]; - [eventManager setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; @@ -241,7 +233,6 @@ QT_USE_NAMESPACE - (void)removeAppleEventHandlers { NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager]; - [eventManager removeEventHandlerForEventClass:kCoreEventClass andEventID:kAEQuitApplication]; [eventManager removeEventHandlerForEventClass:kInternetEventClass andEventID:kAEGetURL]; } @@ -282,26 +273,22 @@ QT_USE_NAMESPACE QWindowSystemInterface::handleFileOpenEvent(qtFileName); } - if (reflectionDelegate && - [reflectionDelegate respondsToSelector:@selector(application:openFiles:)]) + if ([reflectionDelegate respondsToSelector:_cmd]) [reflectionDelegate application:sender openFiles:filenames]; } - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { - // If we have a reflection delegate, that will get to call the shots. - if (reflectionDelegate - && [reflectionDelegate respondsToSelector: - @selector(applicationShouldTerminateAfterLastWindowClosed:)]) + if ([reflectionDelegate respondsToSelector:_cmd]) return [reflectionDelegate applicationShouldTerminateAfterLastWindowClosed:sender]; + return NO; // Someday qApp->quitOnLastWindowClosed(); when QApp and NSApp work closer together. } - (void)applicationDidBecomeActive:(NSNotification *)notification { - if (reflectionDelegate - && [reflectionDelegate respondsToSelector:@selector(applicationDidBecomeActive:)]) + if ([reflectionDelegate respondsToSelector:_cmd]) [reflectionDelegate applicationDidBecomeActive:notification]; QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationActive); @@ -309,8 +296,7 @@ QT_USE_NAMESPACE - (void)applicationDidResignActive:(NSNotification *)notification { - if (reflectionDelegate - && [reflectionDelegate respondsToSelector:@selector(applicationDidResignActive:)]) + if ([reflectionDelegate respondsToSelector:_cmd]) [reflectionDelegate applicationDidResignActive:notification]; QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationInactive); @@ -318,10 +304,7 @@ QT_USE_NAMESPACE - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag { - Q_UNUSED(theApplication); - Q_UNUSED(flag); - if (reflectionDelegate - && [reflectionDelegate respondsToSelector:@selector(applicationShouldHandleReopen:hasVisibleWindows:)]) + if ([reflectionDelegate respondsToSelector:_cmd]) return [reflectionDelegate applicationShouldHandleReopen:theApplication hasVisibleWindows:flag]; /* @@ -354,16 +337,13 @@ QT_USE_NAMESPACE - (BOOL)respondsToSelector:(SEL)aSelector { - BOOL result = [super respondsToSelector:aSelector]; - if (!result && reflectionDelegate) - result = [reflectionDelegate respondsToSelector:aSelector]; - return result; + return [super respondsToSelector:aSelector] || [reflectionDelegate respondsToSelector:aSelector]; } - (void)forwardInvocation:(NSInvocation *)invocation { SEL invocationSelector = [invocation selector]; - if (reflectionDelegate && [reflectionDelegate respondsToSelector:invocationSelector]) + if ([reflectionDelegate respondsToSelector:invocationSelector]) [invocation invokeWithTarget:reflectionDelegate]; else [self doesNotRecognizeSelector:invocationSelector]; @@ -375,14 +355,6 @@ QT_USE_NAMESPACE NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; QWindowSystemInterface::handleFileOpenEvent(QUrl(QString::fromNSString(urlString))); } - -- (void)appleEventQuit:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent -{ - Q_UNUSED(event); - Q_UNUSED(replyEvent); - [NSApp terminate:self]; -} - @end @implementation QCocoaApplicationDelegate (Menus) diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.mm b/src/plugins/platforms/cocoa/qcocoabackingstore.mm index eb316c53a8..b17302a640 100644 --- a/src/plugins/platforms/cocoa/qcocoabackingstore.mm +++ b/src/plugins/platforms/cocoa/qcocoabackingstore.mm @@ -560,17 +560,26 @@ void QCALayerBackingStore::flush(QWindow *flushedWindow, const QRegion ®ion, flushedView.layer.contents = nil; } - qCInfo(lcQpaBackingStore) << "Flushing" << backBufferSurface - << "to" << flushedView.layer << "of" << flushedView; - - flushedView.layer.contents = backBufferSurface; + if (flushedView == backingStoreView) { + qCInfo(lcQpaBackingStore) << "Flushing" << backBufferSurface + << "to" << flushedView.layer << "of" << flushedView; + flushedView.layer.contents = backBufferSurface; + } else { + auto subviewRect = [flushedView convertRect:flushedView.bounds toView:backingStoreView]; + auto scale = flushedView.layer.contentsScale; + subviewRect = CGRectApplyAffineTransform(subviewRect, CGAffineTransformMakeScale(scale, scale)); + + // We make a copy of the image data up front, which means we don't + // need to mark the IOSurface as being in use. FIXME: Investigate + // if there's a cheaper way to get sub-image data to a layer. + m_buffers.back()->lock(QPlatformGraphicsBuffer::SWReadAccess); + QImage subImage = m_buffers.back()->asImage()->copy(QRectF::fromCGRect(subviewRect).toRect()); + m_buffers.back()->unlock(); - if (flushedView != backingStoreView) { - const CGSize backingStoreSize = backingStoreView.bounds.size; - flushedView.layer.contentsRect = CGRectApplyAffineTransform( - [flushedView convertRect:flushedView.bounds toView:backingStoreView], - // The contentsRect is in unit coordinate system - CGAffineTransformMakeScale(1.0 / backingStoreSize.width, 1.0 / backingStoreSize.height)); + qCInfo(lcQpaBackingStore) << "Flushing" << subImage + << "to" << flushedView.layer << "of subview" << flushedView; + QCFType<CGImageRef> cgImage = subImage.toCGImage(); + flushedView.layer.contents = (__bridge id)static_cast<CGImageRef>(cgImage); } // Since we may receive multiple flushes before a new frame is started, we do not diff --git a/src/plugins/platforms/windows/openglblacklists/default.json b/src/plugins/platforms/windows/openglblacklists/default.json index 3cfa7e3856..e37351f9e0 100644 --- a/src/plugins/platforms/windows/openglblacklists/default.json +++ b/src/plugins/platforms/windows/openglblacklists/default.json @@ -152,6 +152,18 @@ "features": [ "disable_program_cache" ] - } + }, + { + "id": 13, + "description": "Disable DesktopGL on Windows with Mobile Intel(R) 4 Series Express Chipset Family graphics card (QTBUG-58772)", + "vendor_id": "0x8086", + "device_id": [ "0x2A42" ], + "os": { + "type": "win" + }, + "features": [ + "disable_desktopgl" + ] + } ] } diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp index b87e43f3f7..4e6d3306e1 100644 --- a/src/plugins/platforms/windows/qwindowsclipboard.cpp +++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp @@ -115,12 +115,21 @@ static QDebug operator<<(QDebug d, const QMimeData *mimeData) IDataObject *QWindowsClipboardRetrievalMimeData::retrieveDataObject() const { + enum : int { attempts = 3 }; IDataObject * pDataObj = nullptr; - if (OleGetClipboard(&pDataObj) == S_OK) { - if (QWindowsContext::verbose > 1) - qCDebug(lcQpaMime) << __FUNCTION__ << pDataObj; - return pDataObj; + // QTBUG-53979, retry in case the other application has clipboard locked + for (int i = 1; i <= attempts; ++i) { + if (SUCCEEDED(OleGetClipboard(&pDataObj))) { + if (QWindowsContext::verbose > 1) + qCDebug(lcQpaMime) << __FUNCTION__ << pDataObj; + return pDataObj; + } + qCWarning(lcQpaMime, i == attempts + ? "Unable to obtain clipboard." + : "Retrying to obtain clipboard."); + QThread::msleep(50); } + return nullptr; } diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 0fe22bd318..8da299d491 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -773,7 +773,7 @@ void QXcbScreen::updateRefreshRate(xcb_randr_mode_t mode) xcb_randr_mode_info_t *modeInfo = modesIter.data; if (modeInfo->id == mode) { const uint32_t dotCount = modeInfo->htotal * modeInfo->vtotal; - m_refreshRate = (dotCount != 0) ? modeInfo->dot_clock / dotCount : 0; + m_refreshRate = (dotCount != 0) ? modeInfo->dot_clock / qreal(dotCount) : 0; m_mode = mode; break; } diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h index 62931d2500..79698b4ef3 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -226,7 +226,7 @@ private: QRect m_availableGeometry; Qt::ScreenOrientation m_orientation = Qt::PrimaryOrientation; QXcbCursor *m_cursor; - int m_refreshRate = 60; + qreal m_refreshRate = 60.0; QEdidParser m_edid; }; diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index 0a216e540d..63dc49fd18 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -328,6 +328,20 @@ static const int closeButtonSize = 14; static const qreal closeButtonCornerRadius = 2.0; #endif // QT_CONFIG(tabbar) +#ifndef QT_NO_ACCESSIBILITY // This ifdef to avoid "unused function" warning. +QBrush brushForToolButton(bool isOnKeyWindow) +{ + // When a toolbutton in a toolbar is in the 'ON' state, we draw a + // partially transparent background. The colors must be different + // for 'Aqua' and 'DarkAqua' appearances though. + if (isDarkMode()) + return isOnKeyWindow ? QColor(73, 73, 73, 100) : QColor(56, 56, 56, 100); + + return isOnKeyWindow ? QColor(0, 0, 0, 28) : QColor(0, 0, 0, 21); +} +#endif // QT_NO_ACCESSIBILITY + + static const int headerSectionArrowHeight = 6; static const int headerSectionSeparatorInset = 2; @@ -5603,8 +5617,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex if (view) isKey = [view.window isKeyWindow]; - QBrush brush(isKey ? QColor(0, 0, 0, 28) - : QColor(0, 0, 0, 21)); + QBrush brush(brushForToolButton(isKey)); QPainterPath path; path.addRoundedRect(QRectF(tb->rect.x(), tb->rect.y(), tb->rect.width(), tb->rect.height() + 4), 4, 4); p->setRenderHint(QPainter::Antialiasing); diff --git a/src/src.pro b/src/src.pro index 832a3b6d82..8ff3ec4c1f 100644 --- a/src/src.pro +++ b/src/src.pro @@ -70,7 +70,7 @@ src_winmain.depends = sub-corelib # just for the module .pri file src_corelib.subdir = $$PWD/corelib src_corelib.target = sub-corelib -src_corelib.depends = src_tools_moc src_tools_rcc +src_corelib.depends = src_tools_moc src_tools_rcc src_tools_tracegen src_xml.subdir = $$PWD/xml src_xml.target = sub-xml @@ -157,17 +157,12 @@ src_android.subdir = $$PWD/android src_3rdparty_freetype.depends += src_corelib } } -SUBDIRS += src_tools_bootstrap src_tools_moc src_tools_rcc +SUBDIRS += src_tools_bootstrap src_tools_moc src_tools_rcc src_tools_tracegen qtConfig(regularexpression):pcre2 { SUBDIRS += src_3rdparty_pcre2 src_corelib.depends += src_3rdparty_pcre2 } -TOOLS = src_tools_moc src_tools_rcc src_tools_qlalr -!force_bootstrap:if(qtConfig(lttng)|qtConfig(etw)) { - SUBDIRS += src_tools_tracegen - src_corelib.depends += src_tools_tracegen - TOOLS += src_tools_tracegen -} +TOOLS = src_tools_moc src_tools_rcc src_tools_tracegen src_tools_qlalr SUBDIRS += src_corelib src_tools_qlalr win32:SUBDIRS += src_winmain qtConfig(network) { diff --git a/src/tools/tracegen/provider.h b/src/tools/tracegen/provider.h index 9be0c33d89..a4baf56815 100644 --- a/src/tools/tracegen/provider.h +++ b/src/tools/tracegen/provider.h @@ -42,6 +42,7 @@ #include <qvector.h> #include <qstring.h> +#include <qstringlist.h> #include <qtypeinfo.h> struct Tracepoint diff --git a/src/widgets/kernel/qopenglwidget.cpp b/src/widgets/kernel/qopenglwidget.cpp index 451b18d8d3..bc5ca21b97 100644 --- a/src/widgets/kernel/qopenglwidget.cpp +++ b/src/widgets/kernel/qopenglwidget.cpp @@ -788,10 +788,12 @@ void QOpenGLWidgetPrivate::initialize() if (initialized) return; - // Get our toplevel's context with which we will share in order to make the - // texture usable by the underlying window's backingstore. + // If no global shared context get our toplevel's context with which we + // will share in order to make the texture usable by the underlying window's backingstore. QWidget *tlw = q->window(); - QOpenGLContext *shareContext = get(tlw)->shareContext(); + QOpenGLContext *shareContext = qt_gl_global_share_context(); + if (!shareContext) + shareContext = get(tlw)->shareContext(); // If shareContext is null, showing content on-screen will not work. // However, offscreen rendering and grabFramebuffer() will stay fully functional. diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index b70a03b311..588bed0366 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -7669,7 +7669,7 @@ void QWidget::show() else if (defaultState == Qt::WindowMaximized) showMaximized(); else - setVisible(true); // FIXME: Why not showNormal(), like QWindow::show()? + setVisible(true); // Don't call showNormal() as not to clobber Qt::Window(Max/Min)imized } /*! \internal diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index ba2b6b0ed9..b58dc1660a 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -88,6 +88,7 @@ #include <private/qstylehelper_p.h> #include <private/qdrawhelper_p.h> #include <private/qapplication_p.h> +#include <private/qwidget_p.h> QT_BEGIN_NAMESPACE @@ -364,6 +365,11 @@ static void qt_fusion_draw_mdibutton(QPainter *painter, const QStyleOptionTitleB painter->drawPoint(tmp.right() , tmp.bottom() - 1); } +static QWindow *qt_getWindow(const QWidget *widget) +{ + return widget ? QWidgetPrivate::get(widget)->windowHandle(QWidgetPrivate::WindowHandleMode::Closest) : nullptr; +} + /* \internal */ @@ -995,7 +1001,7 @@ void QFusionStyle::drawPrimitive(PrimitiveElement elem, d->tabBarcloseButtonIcon = proxy()->standardIcon(SP_DialogCloseButton, option, widget); if ((option->state & State_Enabled) && (option->state & State_MouseOver)) proxy()->drawPrimitive(PE_PanelButtonCommand, option, painter, widget); - QPixmap pixmap = d->tabBarcloseButtonIcon.pixmap(QSize(16, 16), QIcon::Normal, QIcon::On); + QPixmap pixmap = d->tabBarcloseButtonIcon.pixmap(qt_getWindow(widget), QSize(16, 16), QIcon::Normal, QIcon::On); proxy()->drawItemPixmap(painter, option->rect, Qt::AlignCenter, pixmap); } break; @@ -1035,7 +1041,7 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio if (!cb->currentIcon.isNull()) { QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal : QIcon::Disabled; - QPixmap pixmap = cb->currentIcon.pixmap(cb->iconSize, mode); + QPixmap pixmap = cb->currentIcon.pixmap(qt_getWindow(widget), cb->iconSize, mode); QRect iconRect(editRect); iconRect.setWidth(cb->iconSize.width() + 4); iconRect = alignedRect(cb->direction, @@ -1647,9 +1653,9 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio iconSize = combo->iconSize(); #endif if (checked) - pixmap = menuItem->icon.pixmap(iconSize, mode, QIcon::On); + pixmap = menuItem->icon.pixmap(qt_getWindow(widget), iconSize, mode, QIcon::On); else - pixmap = menuItem->icon.pixmap(iconSize, mode); + pixmap = menuItem->icon.pixmap(qt_getWindow(widget), iconSize, mode); const int pixw = pixmap.width() / pixmap.devicePixelRatio(); const int pixh = pixmap.height() / pixmap.devicePixelRatio(); @@ -1783,7 +1789,7 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio if (button->state & State_On) state = QIcon::On; - QPixmap pixmap = button->icon.pixmap(button->iconSize, mode, state); + QPixmap pixmap = button->icon.pixmap(qt_getWindow(widget), button->iconSize, mode, state); int w = pixmap.width() / pixmap.devicePixelRatio(); int h = pixmap.height() / pixmap.devicePixelRatio(); diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index b295e66574..d2372a7be9 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -1144,11 +1144,14 @@ void QAbstractScrollArea::paintEvent(QPaintEvent*) mouse press events for the viewport() widget. The event is passed in \a e. + The default implementation calls QWidget::mousePressEvent() for + default popup handling. + \sa QWidget::mousePressEvent() */ void QAbstractScrollArea::mousePressEvent(QMouseEvent *e) { - e->ignore(); + QWidget::mousePressEvent(e); } /*! diff --git a/src/widgets/widgets/qgroupbox.cpp b/src/widgets/widgets/qgroupbox.cpp index 69eac1ebf7..eec794562a 100644 --- a/src/widgets/widgets/qgroupbox.cpp +++ b/src/widgets/widgets/qgroupbox.cpp @@ -389,9 +389,13 @@ bool QGroupBox::event(QEvent *e) void QGroupBox::childEvent(QChildEvent *c) { Q_D(QGroupBox); - if (c->type() != QEvent::ChildAdded || !c->child()->isWidgetType()) + /* + Children might have been enabled after being added to the group box, in which case + the childEvent handler ran too early, and we need to disabled children again. + */ + if (!(c->added() || c->polished()) || !c->child()->isWidgetType()) return; - QWidget *w = (QWidget*)c->child(); + QWidget *w = static_cast<QWidget*>(c->child()); if (w->isWindow()) return; if (d->checkable) { diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 0ccbad7eaa..dd2ea3f18f 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -237,7 +237,7 @@ void QTextEditPrivate::_q_hoveredBlockWithMarkerChanged(const QTextBlock &block) Qt::CursorShape cursor = cursorToRestoreAfterHover; if (block.isValid() && !q->isReadOnly()) { QTextBlockFormat::MarkerType marker = block.blockFormat().marker(); - if (marker != QTextBlockFormat::NoMarker) { + if (marker != QTextBlockFormat::MarkerType::NoMarker) { if (viewport->cursor().shape() != Qt::PointingHandCursor) cursorToRestoreAfterHover = viewport->cursor().shape(); cursor = Qt::PointingHandCursor; @@ -772,6 +772,7 @@ void QTextEdit::setAlignment(Qt::Alignment a) QTextCursor cursor = d->control->textCursor(); cursor.mergeBlockFormat(fmt); d->control->setTextCursor(cursor); + d->relayoutDocument(); } /*! diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index fdbaf29dd8..094c59a0c9 100644 --- a/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/src/widgets/widgets/qwidgettextcontrol.cpp @@ -1810,11 +1810,11 @@ void QWidgetTextControlPrivate::mouseReleaseEvent(QEvent *e, Qt::MouseButton but if (markerBlock == blockWithMarkerUnderMouse) { auto fmt = blockWithMarkerUnderMouse.blockFormat(); switch (fmt.marker()) { - case QTextBlockFormat::Unchecked : - fmt.setMarker(QTextBlockFormat::Checked); + case QTextBlockFormat::MarkerType::Unchecked : + fmt.setMarker(QTextBlockFormat::MarkerType::Checked); break; - case QTextBlockFormat::Checked: - fmt.setMarker(QTextBlockFormat::Unchecked); + case QTextBlockFormat::MarkerType::Checked: + fmt.setMarker(QTextBlockFormat::MarkerType::Unchecked); break; default: break; diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp index 99176dc68d..216ae1f79e 100644 --- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp @@ -360,6 +360,7 @@ void tst_QDateTime::ctor() void tst_QDateTime::operator_eq() { + QVERIFY(QDateTime() != QDateTime(QDate(1970, 1, 1), QTime(0, 0))); // QTBUG-79006 QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::UTC); QDateTime dt2(QDate(2005, 3, 11), QTime(), Qt::UTC); dt2 = dt1; @@ -1675,29 +1676,30 @@ void tst_QDateTime::currentDateTimeUtc2() void tst_QDateTime::toSecsSinceEpoch_data() { QTest::addColumn<QString>("dateTimeStr"); - QTest::addColumn<bool>("res"); + QTest::addColumn<bool>("valid"); - QTest::newRow( "data1" ) << str( 1800, 1, 1, 12, 0, 0 ) << false; - QTest::newRow( "data2" ) << str( 1969, 1, 1, 12, 0, 0 ) << false; + QTest::newRow( "data1" ) << str( 1800, 1, 1, 12, 0, 0 ) << true; + QTest::newRow( "data2" ) << str( 1969, 1, 1, 12, 0, 0 ) << true; QTest::newRow( "data3" ) << str( 2002, 1, 1, 12, 0, 0 ) << true; QTest::newRow( "data4" ) << str( 2002, 6, 1, 12, 0, 0 ) << true; QTest::newRow( "data5" ) << QString("INVALID") << false; QTest::newRow( "data6" ) << str( 2038, 1, 1, 12, 0, 0 ) << true; QTest::newRow( "data7" ) << str( 2063, 4, 5, 12, 0, 0 ) << true; // the day of First Contact - QTest::newRow( "data8" ) << str( 2107, 1, 1, 12, 0, 0 ) - << bool( sizeof(uint) > 32 && sizeof(time_t) > 32 ); + QTest::newRow( "data8" ) << str( 2107, 1, 1, 12, 0, 0 ) << true; } void tst_QDateTime::toSecsSinceEpoch() { - QFETCH( QString, dateTimeStr ); - QDateTime datetime = dt( dateTimeStr ); - - qint64 asSecsSinceEpoch = datetime.toSecsSinceEpoch(); - QCOMPARE(asSecsSinceEpoch, datetime.toMSecsSinceEpoch() / 1000); + QFETCH(const QString, dateTimeStr); + const QDateTime datetime = dt(dateTimeStr); + QFETCH(const bool, valid); + QCOMPARE(datetime.isValid(), valid); - QDateTime datetime2 = QDateTime::fromSecsSinceEpoch(asSecsSinceEpoch); - QCOMPARE(datetime, datetime2); + if (valid) { + const qint64 asSecsSinceEpoch = datetime.toSecsSinceEpoch(); + QCOMPARE(asSecsSinceEpoch, datetime.toMSecsSinceEpoch() / 1000); + QCOMPARE(QDateTime::fromSecsSinceEpoch(asSecsSinceEpoch), datetime); + } } #if QT_DEPRECATED_SINCE(5, 8) @@ -1725,14 +1727,10 @@ void tst_QDateTime::toTime_t() uint asTime_t = datetime.toTime_t(); QFETCH( bool, res ); if (res) { - QVERIFY( asTime_t != (uint)-1 ); + QVERIFY(asTime_t != uint(-1)); + QCOMPARE(QDateTime::fromTime_t(asTime_t), datetime); } else { - QVERIFY( asTime_t == (uint)-1 ); - } - - if ( asTime_t != (uint) -1 ) { - QDateTime datetime2 = QDateTime::fromTime_t( asTime_t ); - QCOMPARE(datetime, datetime2); + QCOMPARE(asTime_t, uint(-1)); } } #endif @@ -1929,8 +1927,8 @@ void tst_QDateTime::operator_eqeq_data() QDateTime dateTime1(QDate(2012, 6, 20), QTime(14, 33, 2, 500)); QDateTime dateTime1a = dateTime1.addMSecs(1); - QDateTime dateTime2(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); - QDateTime dateTime2a = dateTime2.addMSecs(-1); + QDateTime dateTime2(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); // Invalid + QDateTime dateTime2a = dateTime2.addMSecs(-1); // Still invalid QDateTime dateTime3(QDate(1970, 1, 1), QTime(0, 0, 0, 0), Qt::UTC); // UTC epoch QDateTime dateTime3a = dateTime3.addDays(1); QDateTime dateTime3b = dateTime3.addDays(-1); @@ -1946,7 +1944,7 @@ void tst_QDateTime::operator_eqeq_data() QTest::newRow("data2") << dateTime1a << dateTime1a << true << false; QTest::newRow("data3") << dateTime1 << dateTime2 << false << false; QTest::newRow("data4") << dateTime1 << dateTime1a << false << false; - QTest::newRow("data5") << dateTime2 << dateTime2a << false << false; + QTest::newRow("data5") << dateTime2 << dateTime2a << true << false; QTest::newRow("data6") << dateTime2 << dateTime3 << false << false; QTest::newRow("data7") << dateTime3 << dateTime3a << false << false; QTest::newRow("data8") << dateTime3 << dateTime3b << false << false; diff --git a/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp b/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp index 3af6132695..2a9c1e1e41 100644 --- a/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp +++ b/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp @@ -404,6 +404,11 @@ void tst_QEasingCurve::valueForProgress() const qreal error = qAbs(ex - curve.valueForProgress(at.at(i)/qreal(100))); QVERIFY(error <= errorBound); } + + if (type != QEasingCurve::SineCurve && type != QEasingCurve::CosineCurve) { + QVERIFY( !(curve.valueForProgress(0) > 0) ); + QVERIFY( !(curve.valueForProgress(1) < 1) ); + } #endif } @@ -632,6 +637,9 @@ void tst_QEasingCurve::bezierSpline() QCOMPARE(value, ex); QVERIFY(error <= errorBound); } + + QVERIFY( !(bezierEasingCurve.valueForProgress(0) > 0) ); + QVERIFY( !(bezierEasingCurve.valueForProgress(1) < 1) ); } void tst_QEasingCurve::tcbSpline_data() @@ -691,6 +699,9 @@ void tst_QEasingCurve::tcbSpline() QCOMPARE(value, ex); QVERIFY(error <= errorBound); } + + QVERIFY( !(tcbEasingCurve.valueForProgress(0) > 0) ); + QVERIFY( !(tcbEasingCurve.valueForProgress(1) < 1) ); } /*This is single precision code for a cubic root used inside the spline easing curve. diff --git a/tests/auto/gui/image/qmovie/tst_qmovie.cpp b/tests/auto/gui/image/qmovie/tst_qmovie.cpp index 4e9e9b8115..c8217b2cec 100644 --- a/tests/auto/gui/image/qmovie/tst_qmovie.cpp +++ b/tests/auto/gui/image/qmovie/tst_qmovie.cpp @@ -62,6 +62,7 @@ private slots: #ifndef QT_NO_WIDGETS void infiniteLoop(); #endif + void emptyMovie(); }; // Testing get/set functions @@ -220,5 +221,13 @@ void tst_QMovie::infiniteLoop() } #endif +void tst_QMovie::emptyMovie() +{ + QMovie movie; + movie.setCacheMode(QMovie::CacheAll); + movie.jumpToFrame(100); + QCOMPARE(movie.currentFrameNumber(), -1); +} + QTEST_MAIN(tst_QMovie) #include "tst_qmovie.moc" diff --git a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp index 8d38cbb18a..1e6c354f17 100644 --- a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp +++ b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp @@ -159,7 +159,7 @@ void tst_QTextMarkdownWriter::testWriteNestedBulletLists() QTextCursor cursor(document); QTextBlockFormat blockFmt = cursor.blockFormat(); if (checkbox) { - blockFmt.setMarker(checked ? QTextBlockFormat::Checked : QTextBlockFormat::Unchecked); + blockFmt.setMarker(checked ? QTextBlockFormat::MarkerType::Checked : QTextBlockFormat::MarkerType::Unchecked); cursor.setBlockFormat(blockFmt); } diff --git a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp index 420ef56106..1b477fbbd0 100644 --- a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp +++ b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp @@ -295,6 +295,12 @@ void tst_QGroupBox::enabledChildPropagation() QVERIFY(!childWidget->isEnabled()); dialog = new QDialog(&testWidget); QVERIFY(dialog->isEnabled()); + + // children that are enabled after adding should still be disabled before + // they are shown + childWidget->setEnabled(true); + testWidget.show(); + QVERIFY(!childWidget->isEnabled()); } void tst_QGroupBox::sizeHint() |