Merge remote-tracking branch 'origin/5.14' into 5.15

Change-Id: I9953c1ca16862184c2373027e946c482ce8e6f0e
This commit is contained in:
Qt Forward Merge Bot 2019-10-13 01:00:43 +02:00
commit 8d8140dffa
100 changed files with 477 additions and 336 deletions

View File

@ -118,9 +118,9 @@ void ClassWizard::accept()
block += "public:\n"; block += "public:\n";
if (field("qobjectCtor").toBool()) { if (field("qobjectCtor").toBool()) {
block += " " + className + "(QObject *parent = 0);\n"; block += " " + className + "(QObject *parent = nullptr);\n";
} else if (field("qwidgetCtor").toBool()) { } else if (field("qwidgetCtor").toBool()) {
block += " " + className + "(QWidget *parent = 0);\n"; block += " " + className + "(QWidget *parent = nullptr);\n";
} else if (field("defaultCtor").toBool()) { } else if (field("defaultCtor").toBool()) {
block += " " + className + "();\n"; block += " " + className + "();\n";
if (field("copyCtor").toBool()) { if (field("copyCtor").toBool()) {

View File

@ -67,7 +67,7 @@ class ClassWizard : public QWizard
Q_OBJECT Q_OBJECT
public: public:
ClassWizard(QWidget *parent = 0); ClassWizard(QWidget *parent = nullptr);
void accept() override; void accept() override;
}; };
@ -79,7 +79,7 @@ class IntroPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
IntroPage(QWidget *parent = 0); IntroPage(QWidget *parent = nullptr);
private: private:
QLabel *label; QLabel *label;
@ -92,7 +92,7 @@ class ClassInfoPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
ClassInfoPage(QWidget *parent = 0); ClassInfoPage(QWidget *parent = nullptr);
private: private:
QLabel *classNameLabel; QLabel *classNameLabel;
@ -114,7 +114,7 @@ class CodeStylePage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
CodeStylePage(QWidget *parent = 0); CodeStylePage(QWidget *parent = nullptr);
protected: protected:
void initializePage() override; void initializePage() override;
@ -135,7 +135,7 @@ class OutputFilesPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
OutputFilesPage(QWidget *parent = 0); OutputFilesPage(QWidget *parent = nullptr);
protected: protected:
void initializePage() override; void initializePage() override;
@ -154,7 +154,7 @@ class ConclusionPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
ConclusionPage(QWidget *parent = 0); ConclusionPage(QWidget *parent = nullptr);
protected: protected:
void initializePage() override; void initializePage() override;

View File

@ -68,7 +68,7 @@ class FindDialog : public QDialog
Q_OBJECT Q_OBJECT
public: public:
FindDialog(QWidget *parent = 0); FindDialog(QWidget *parent = nullptr);
private: private:
QLabel *label; QLabel *label;

View File

@ -68,7 +68,7 @@ class Window : public QWidget
Q_OBJECT Q_OBJECT
public: public:
Window(QWidget *parent = 0); Window(QWidget *parent = nullptr);
private slots: private slots:
void browse(); void browse();

View File

@ -72,7 +72,7 @@ public:
Page_Conclusion }; Page_Conclusion };
//! [2] //! [2]
LicenseWizard(QWidget *parent = 0); LicenseWizard(QWidget *parent = nullptr);
private slots: private slots:
void showHelp(); void showHelp();
@ -86,7 +86,7 @@ class IntroPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
IntroPage(QWidget *parent = 0); IntroPage(QWidget *parent = nullptr);
int nextId() const override; int nextId() const override;
@ -103,7 +103,7 @@ class EvaluatePage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
EvaluatePage(QWidget *parent = 0); EvaluatePage(QWidget *parent = nullptr);
int nextId() const override; int nextId() const override;
@ -120,7 +120,7 @@ class RegisterPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
RegisterPage(QWidget *parent = 0); RegisterPage(QWidget *parent = nullptr);
int nextId() const override; int nextId() const override;
@ -136,7 +136,7 @@ class DetailsPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
DetailsPage(QWidget *parent = 0); DetailsPage(QWidget *parent = nullptr);
int nextId() const override; int nextId() const override;
@ -155,7 +155,7 @@ class ConclusionPage : public QWizardPage
Q_OBJECT Q_OBJECT
public: public:
ConclusionPage(QWidget *parent = 0); ConclusionPage(QWidget *parent = nullptr);
void initializePage() override; void initializePage() override;
int nextId() const override; int nextId() const override;

View File

@ -66,7 +66,7 @@ class Dialog : public QWidget
Q_OBJECT Q_OBJECT
public: public:
Dialog(QWidget *parent = 0); Dialog(QWidget *parent = nullptr);
private slots: private slots:
void setInteger(); void setInteger();

View File

@ -65,7 +65,7 @@ class GeneralTab : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit GeneralTab(const QFileInfo &fileInfo, QWidget *parent = 0); explicit GeneralTab(const QFileInfo &fileInfo, QWidget *parent = nullptr);
}; };
//! [0] //! [0]
@ -76,7 +76,7 @@ class PermissionsTab : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit PermissionsTab(const QFileInfo &fileInfo, QWidget *parent = 0); explicit PermissionsTab(const QFileInfo &fileInfo, QWidget *parent = nullptr);
}; };
//! [1] //! [1]
@ -87,7 +87,7 @@ class ApplicationsTab : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit ApplicationsTab(const QFileInfo &fileInfo, QWidget *parent = 0); explicit ApplicationsTab(const QFileInfo &fileInfo, QWidget *parent = nullptr);
}; };
//! [2] //! [2]
@ -98,7 +98,7 @@ class TabDialog : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit TabDialog(const QString &fileName, QWidget *parent = 0); explicit TabDialog(const QString &fileName, QWidget *parent = nullptr);
private: private:
QTabWidget *tabWidget; QTabWidget *tabWidget;

View File

@ -63,7 +63,7 @@ class BlurPicker: public QGraphicsView
Q_PROPERTY(qreal index READ index WRITE setIndex) Q_PROPERTY(qreal index READ index WRITE setIndex)
public: public:
BlurPicker(QWidget *parent = 0); BlurPicker(QWidget *parent = nullptr);
qreal index() const; qreal index() const;
void setIndex(qreal); void setIndex(qreal);

View File

@ -62,7 +62,7 @@ class FadeMessage: public QGraphicsView
Q_OBJECT Q_OBJECT
public: public:
FadeMessage(QWidget *parent = 0); FadeMessage(QWidget *parent = nullptr);
private: private:
void setupScene(); void setupScene();

View File

@ -50,26 +50,23 @@
#include "imagewidget.h" #include "imagewidget.h"
#include <QtWidgets> #include <QDir>
#include <QImageReader>
#include <QGestureEvent>
#include <QPainter>
Q_LOGGING_CATEGORY(lcExample, "qt.examples.imagegestures") Q_LOGGING_CATEGORY(lcExample, "qt.examples.imagegestures")
//! [constructor] //! [constructor]
ImageWidget::ImageWidget(QWidget *parent) ImageWidget::ImageWidget(QWidget *parent)
: QWidget(parent), : QWidget(parent), position(0), horizontalOffset(0), verticalOffset(0)
position(0), , rotationAngle(0), scaleFactor(1), currentStepScaleFactor(1)
horizontalOffset(0),
verticalOffset(0),
rotationAngle(0),
scaleFactor(1),
currentStepScaleFactor(1)
{ {
setMinimumSize(QSize(100,100)); setMinimumSize(QSize(100, 100));
} }
//! [constructor] //! [constructor]
void ImageWidget::grabGestures(const QList<Qt::GestureType> &gestures) void ImageWidget::grabGestures(const QVector<Qt::GestureType> &gestures)
{ {
//! [enable gestures] //! [enable gestures]
for (Qt::GestureType gesture : gestures) for (Qt::GestureType gesture : gestures)
@ -96,11 +93,11 @@ void ImageWidget::paintEvent(QPaintEvent*)
const qreal wh = height(); const qreal wh = height();
const qreal ww = width(); const qreal ww = width();
p.translate(ww/2, wh/2); p.translate(ww / 2, wh / 2);
p.translate(horizontalOffset, verticalOffset); p.translate(horizontalOffset, verticalOffset);
p.rotate(rotationAngle); p.rotate(rotationAngle);
p.scale(currentStepScaleFactor * scaleFactor, currentStepScaleFactor * scaleFactor); p.scale(currentStepScaleFactor * scaleFactor, currentStepScaleFactor * scaleFactor);
p.translate(-iw/2, -ih/2); p.translate(-iw / 2, -ih / 2);
p.drawImage(0, 0, currentImage); p.drawImage(0, 0, currentImage);
} }
//! [paint method] //! [paint method]
@ -198,8 +195,7 @@ void ImageWidget::openDirectory(const QString &path)
{ {
this->path = path; this->path = path;
QDir dir(path); QDir dir(path);
QStringList nameFilters; const QStringList nameFilters{"*.jpg", "*.png"};
nameFilters << "*.jpg" << "*.png";
files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name); files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);
position = 0; position = 0;
@ -207,7 +203,7 @@ void ImageWidget::openDirectory(const QString &path)
update(); update();
} }
QImage ImageWidget::loadImage(const QString &fileName) QImage ImageWidget::loadImage(const QString &fileName) const
{ {
QImageReader reader(fileName); QImageReader reader(fileName);
reader.setAutoTransform(true); reader.setAutoTransform(true);

View File

@ -51,9 +51,9 @@
#ifndef IMAGEWIDGET_H #ifndef IMAGEWIDGET_H
#define IMAGEWIDGET_H #define IMAGEWIDGET_H
#include <QWidget>
#include <QImage> #include <QImage>
#include <QtWidgets> #include <QLoggingCategory>
#include <QWidget>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QGestureEvent; class QGestureEvent;
@ -70,9 +70,9 @@ class ImageWidget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
ImageWidget(QWidget *parent = 0); ImageWidget(QWidget *parent = nullptr);
void openDirectory(const QString &path); void openDirectory(const QString &path);
void grabGestures(const QList<Qt::GestureType> &gestures); void grabGestures(const QVector<Qt::GestureType> &gestures);
protected: protected:
bool event(QEvent *event) override; bool event(QEvent *event) override;
@ -87,7 +87,7 @@ private:
void swipeTriggered(QSwipeGesture*); void swipeTriggered(QSwipeGesture*);
//! [class definition begin] //! [class definition begin]
QImage loadImage(const QString &fileName); QImage loadImage(const QString &fileName) const;
void loadImage(); void loadImage();
void goNextImage(); void goNextImage();
void goPrevImage(); void goPrevImage();

View File

@ -102,7 +102,7 @@ int main(int argc, char *argv[])
return -1; return -1;
} }
QList<Qt::GestureType> gestures; QVector<Qt::GestureType> gestures;
if (!commandLineParser.isSet(disablePanOption)) if (!commandLineParser.isSet(disablePanOption))
gestures << Qt::PanGesture; gestures << Qt::PanGesture;
if (!commandLineParser.isSet(disablePinchOption)) if (!commandLineParser.isSet(disablePinchOption))

View File

@ -72,7 +72,7 @@ void MainWidget::openDirectory(const QString &path)
imageWidget->openDirectory(path); imageWidget->openDirectory(path);
} }
void MainWidget::grabGestures(const QList<Qt::GestureType> &gestures) void MainWidget::grabGestures(const QVector<Qt::GestureType> &gestures)
{ {
imageWidget->grabGestures(gestures); imageWidget->grabGestures(gestures);
} }

View File

@ -60,8 +60,8 @@ class MainWidget : public QMainWindow
Q_OBJECT Q_OBJECT
public: public:
MainWidget(QWidget *parent = 0); MainWidget(QWidget *parent = nullptr);
void grabGestures(const QList<Qt::GestureType> &gestures); void grabGestures(const QVector<Qt::GestureType> &gestures);
public slots: public slots:
void openDirectory(const QString &path); void openDirectory(const QString &path);

View File

@ -69,8 +69,9 @@ static qreal normalizeAngle(qreal angle)
} }
//! [0] //! [0]
Mouse::Mouse() Mouse::Mouse() : color(QRandomGenerator::global()->bounded(256),
: color(QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256)) QRandomGenerator::global()->bounded(256),
QRandomGenerator::global()->bounded(256))
{ {
setRotation(QRandomGenerator::global()->bounded(360 * 16)); setRotation(QRandomGenerator::global()->bounded(360 * 16));
} }

View File

@ -71,7 +71,7 @@ int main(int argc, char* argv[])
model->setHorizontalHeaderLabels(list); model->setHorizontalHeaderLabels(list);
int row = 0; int row = 0;
QStandardItem *newItem = 0; QStandardItem *newItem = nullptr;
while (!stream.atEnd()) { while (!stream.atEnd()) {
line = stream.readLine(); line = stream.readLine();
if (!line.startsWith('#') && line.contains(',')) { if (!line.startsWith('#') && line.contains(',')) {

View File

@ -132,7 +132,7 @@ bool Model::hasChildren(const QModelIndex &parent) const
Qt::ItemFlags Model::flags(const QModelIndex &index) const Qt::ItemFlags Model::flags(const QModelIndex &index) const
{ {
if (!index.isValid()) if (!index.isValid())
return 0; return {};
return Qt::ItemIsDragEnabled|QAbstractItemModel::flags(index); 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 Model::Node *Model::parent(Node *child) const
{ {
return child ? child->parent : 0; return child ? child->parent : nullptr;
} }
int Model::row(Node *node) const int Model::row(Node *node) const

View File

@ -48,7 +48,8 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtWidgets> #include <QApplication>
#include <QTableWidget>
#include "stardelegate.h" #include "stardelegate.h"
#include "stareditor.h" #include "stareditor.h"
@ -57,7 +58,7 @@
//! [0] //! [0]
void populateTableWidget(QTableWidget *tableWidget) void populateTableWidget(QTableWidget *tableWidget)
{ {
static const struct { static constexpr struct {
const char *title; const char *title;
const char *genre; const char *genre;
const char *artist; const char *artist;
@ -70,12 +71,12 @@ void populateTableWidget(QTableWidget *tableWidget)
{ "Sex Bomb", "Pop", "Tom Jones", 3 }, { "Sex Bomb", "Pop", "Tom Jones", 3 },
{ "Barbie Girl", "Pop", "Aqua", 5 }, { "Barbie Girl", "Pop", "Aqua", 5 },
//! [2] //! [2]
{ 0, 0, 0, 0 } { nullptr, nullptr, nullptr, 0 }
//! [2] //! [3] //! [2] //! [3]
}; };
//! [3] //! [4] //! [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 *item0 = new QTableWidgetItem(staticData[row].title);
QTableWidgetItem *item1 = new QTableWidgetItem(staticData[row].genre); QTableWidgetItem *item1 = new QTableWidgetItem(staticData[row].genre);
QTableWidgetItem *item2 = new QTableWidgetItem(staticData[row].artist); QTableWidgetItem *item2 = new QTableWidgetItem(staticData[row].artist);

View File

@ -262,7 +262,7 @@ PathDeformWidget::PathDeformWidget(QWidget *parent, bool smallScreen)
QHBoxLayout *mainLayout = new QHBoxLayout(this); QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(m_renderer); 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); m_controls->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
if (!smallScreen) if (!smallScreen)

View File

@ -70,7 +70,7 @@ class MainWindow : public QMainWindow, private Ui::MainWindowBase
Q_OBJECT Q_OBJECT
public: public:
MainWindow(QWidget *parent = 0); MainWindow(QWidget *parent = nullptr);
public slots: public slots:
void on_clearAction_triggered(); void on_clearAction_triggered();

View File

@ -102,9 +102,9 @@ uint ShadeWidget::colorAt(int x)
generateShade(); generateShade();
QPolygonF pts = m_hoverPoints->points(); QPolygonF pts = m_hoverPoints->points();
for (int i=1; i < pts.size(); ++i) { for (int i = 1; i < pts.size(); ++i) {
if (pts.at(i-1).x() <= x && pts.at(i).x() >= x) { if (pts.at(i - 1).x() <= x && pts.at(i).x() >= x) {
QLineF l(pts.at(i-1), pts.at(i)); QLineF l(pts.at(i - 1), pts.at(i));
l.setLength(l.length() * ((x - l.x1()) / l.dx())); l.setLength(l.length() * ((x - l.x1()) / l.dx()));
return m_shade.pixel(qRound(qMin(l.x2(), (qreal(m_shade.width() - 1)))), return m_shade.pixel(qRound(qMin(l.x2(), (qreal(m_shade.width() - 1)))),
qRound(qMin(l.y2(), qreal(m_shade.height() - 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) { if (m_shade_type == ARGBShade) {
m_alpha_gradient = QLinearGradient(0, 0, width(), 0); m_alpha_gradient = QLinearGradient(0, 0, width(), 0);
for (int i=0; i<stops.size(); ++i) { for (const auto &stop : stops) {
QColor c = stops.at(i).second; QColor c = stop.second;
m_alpha_gradient.setColorAt(stops.at(i).first, QColor(c.red(), c.green(), c.blue())); m_alpha_gradient.setColorAt(stop.first, QColor(c.red(), c.green(), c.blue()));
} }
m_shade = QImage(); m_shade = QImage();
@ -223,13 +223,13 @@ void GradientEditor::pointsUpdated()
std::sort(points.begin(), points.end(), x_less_than); std::sort(points.begin(), points.end(), x_less_than);
for (int i = 0; i < points.size(); ++i) { for (int i = 0; i < points.size(); ++i) {
qreal x = int(points.at(i).x()); const int x = int(points.at(i).x());
if (i + 1 < points.size() && x == points.at(i + 1).x()) if (i + 1 < points.size() && x == int(points.at(i + 1).x()))
continue; continue;
QColor color((0x00ff0000 & m_red_shade->colorAt(int(x))) >> 16, QColor color((0x00ff0000 & m_red_shade->colorAt(x)) >> 16,
(0x0000ff00 & m_green_shade->colorAt(int(x))) >> 8, (0x0000ff00 & m_green_shade->colorAt(x)) >> 8,
(0x000000ff & m_blue_shade->colorAt(int(x))), (0x000000ff & m_blue_shade->colorAt(x)),
(0xff000000 & m_alpha_shade->colorAt(int(x))) >> 24); (0xff000000 & m_alpha_shade->colorAt(x)) >> 24);
if (x / w > 1) if (x / w > 1)
return; return;
@ -568,8 +568,8 @@ void GradientRenderer::paint(QPainter *p)
g = QConicalGradient(pts.at(0), angle); g = QConicalGradient(pts.at(0), angle);
} }
for (int i = 0; i < m_stops.size(); ++i) for (const auto &stop : qAsConst(m_stops))
g.setColorAt(m_stops.at(i).first, m_stops.at(i).second); g.setColorAt(stop.first, stop.second);
g.setSpread(m_spread); g.setSpread(m_spread);

View File

@ -157,7 +157,7 @@ class GradientWidget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
GradientWidget(QWidget *parent); GradientWidget(QWidget *parent = nullptr);
public slots: public slots:
void setDefault1() { setDefault(1); } void setDefault1() { setDefault(1); }

View File

@ -58,8 +58,8 @@ int main(int argc, char *argv[])
QApplication app(argc, argv); QApplication app(argc, argv);
GradientWidget gradientWidget(0); GradientWidget gradientWidget;
QStyle *arthurStyle = new ArthurStyle(); QStyle *arthurStyle = new ArthurStyle;
gradientWidget.setStyle(arthurStyle); gradientWidget.setStyle(arthurStyle);
const QList<QWidget *> widgets = gradientWidget.findChildren<QWidget *>(); const QList<QWidget *> widgets = gradientWidget.findChildren<QWidget *>();
for (QWidget *w : widgets) { for (QWidget *w : widgets) {

View File

@ -60,7 +60,7 @@ class RenderArea : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit RenderArea(const QPainterPath &path, QWidget *parent = 0); explicit RenderArea(const QPainterPath &path, QWidget *parent = nullptr);
QSize minimumSizeHint() const override; QSize minimumSizeHint() const override;
QSize sizeHint() const override; QSize sizeHint() const override;

View File

@ -48,11 +48,9 @@
** **
****************************************************************************/ ****************************************************************************/
#include "pathstroke.h"
#include "arthurstyle.h" #include "arthurstyle.h"
#include "arthurwidgets.h" #include "arthurwidgets.h"
#include "pathstroke.h"
#include <stdio.h>
extern void draw_round_rect(QPainter *p, const QRect &bounds, int radius); extern void draw_round_rect(QPainter *p, const QRect &bounds, int radius);
@ -164,24 +162,39 @@ void PathStrokeControls::createCommonControls(QWidget* parent)
// Connections // Connections
connect(flatCap, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setFlatCap); connect(flatCap, &QAbstractButton::clicked,
connect(squareCap, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setSquareCap); m_renderer, &PathStrokeRenderer::setFlatCap);
connect(roundCap, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setRoundCap); 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(bevelJoin, &QAbstractButton::clicked,
connect(miterJoin, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setMiterJoin); m_renderer, &PathStrokeRenderer::setBevelJoin);
connect(svgMiterJoin, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setSvgMiterJoin); connect(miterJoin, &QAbstractButton::clicked,
connect(roundJoin, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setRoundJoin); 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(curveMode, &QAbstractButton::clicked,
connect(lineMode, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setLineMode); m_renderer, &PathStrokeRenderer::setCurveMode);
connect(lineMode, &QAbstractButton::clicked,
m_renderer, &PathStrokeRenderer::setLineMode);
connect(solidLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setSolidLine); connect(solidLine, &QAbstractButton::clicked,
connect(dashLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDashLine); m_renderer, &PathStrokeRenderer::setSolidLine);
connect(dotLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDotLine); connect(dashLine, &QAbstractButton::clicked,
connect(dashDotLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDashDotLine); m_renderer, &PathStrokeRenderer::setDashLine);
connect(dashDotDotLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setDashDotDotLine); connect(dotLine, &QAbstractButton::clicked,
connect(customDashLine, &QAbstractButton::clicked, m_renderer, &PathStrokeRenderer::setCustomDashLine); 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: // Set the defaults:
flatCap->setChecked(true); flatCap->setChecked(true);
@ -247,15 +260,20 @@ void PathStrokeControls::layoutForDesktop()
// Set up connections // 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) #if QT_CONFIG(opengl)
connect(enableOpenGLButton, &QAbstractButton::clicked, m_renderer, &ArthurFrame::enableOpenGL); connect(enableOpenGLButton, &QAbstractButton::clicked,
m_renderer, &ArthurFrame::enableOpenGL);
#endif #endif
connect(whatsThisButton, &QAbstractButton::clicked, m_renderer, &ArthurFrame::setDescriptionEnabled); connect(whatsThisButton, &QAbstractButton::clicked,
m_renderer, &ArthurFrame::setDescriptionEnabled);
connect(m_renderer, &ArthurFrame::descriptionEnabledChanged, connect(m_renderer, &ArthurFrame::descriptionEnabledChanged,
whatsThisButton, &QAbstractButton::setChecked); whatsThisButton, &QAbstractButton::setChecked);
@ -296,11 +314,11 @@ void PathStrokeControls::layoutForSmallScreens()
#endif #endif
// Layouts: // Layouts:
QHBoxLayout *penWidthLayout = new QHBoxLayout(0); QHBoxLayout *penWidthLayout = new QHBoxLayout;
penWidthLayout->addWidget(penWidthLabel, 0, Qt::AlignRight); penWidthLayout->addWidget(penWidthLabel, 0, Qt::AlignRight);
penWidthLayout->addWidget(penWidth); penWidthLayout->addWidget(penWidth);
QVBoxLayout *leftLayout = new QVBoxLayout(0); QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addWidget(m_capGroup); leftLayout->addWidget(m_capGroup);
leftLayout->addWidget(m_joinGroup); leftLayout->addWidget(m_joinGroup);
#if QT_CONFIG(opengl) #if QT_CONFIG(opengl)
@ -308,7 +326,7 @@ void PathStrokeControls::layoutForSmallScreens()
#endif #endif
leftLayout->addLayout(penWidthLayout); leftLayout->addLayout(penWidthLayout);
QVBoxLayout *rightLayout = new QVBoxLayout(0); QVBoxLayout *rightLayout = new QVBoxLayout;
rightLayout->addWidget(m_styleGroup); rightLayout->addWidget(m_styleGroup);
rightLayout->addWidget(m_pathModeGroup); rightLayout->addWidget(m_pathModeGroup);
@ -356,7 +374,7 @@ PathStrokeWidget::PathStrokeWidget(bool smallScreen)
// Widget construction and property setting // Widget construction and property setting
m_renderer = new PathStrokeRenderer(this, smallScreen); m_renderer = new PathStrokeRenderer(this, smallScreen);
m_controls = new PathStrokeControls(0, m_renderer, smallScreen); m_controls = new PathStrokeControls(nullptr, m_renderer, smallScreen);
// Layouting // Layouting
QHBoxLayout *viewLayout = new QHBoxLayout(this); QHBoxLayout *viewLayout = new QHBoxLayout(this);
@ -383,10 +401,10 @@ void PathStrokeWidget::hideControls()
m_controls->hide(); m_controls->hide();
} }
void PathStrokeWidget::setStyle( QStyle * style ) void PathStrokeWidget::setStyle(QStyle *style)
{ {
QWidget::setStyle(style); QWidget::setStyle(style);
if (m_controls != 0) if (m_controls != nullptr)
{ {
m_controls->setStyle(style); m_controls->setStyle(style);
@ -516,7 +534,7 @@ void PathStrokeRenderer::updatePoints()
qreal bottom = height() - pad; qreal bottom = height() - pad;
Q_ASSERT(m_points.size() == m_vectors.size()); 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 pos = m_points.at(i);
QPointF vec = m_vectors.at(i); QPointF vec = m_vectors.at(i);
pos += vec; pos += vec;
@ -540,7 +558,7 @@ void PathStrokeRenderer::mousePressEvent(QMouseEvent *e)
setDescriptionEnabled(false); setDescriptionEnabled(false);
m_activePoint = -1; m_activePoint = -1;
qreal distance = -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(); qreal d = QLineF(e->pos(), m_points.at(i)).length();
if ((distance < 0 && d < 8 * m_pointSize) || d < distance) { if ((distance < 0 && d < 8 * m_pointSize) || d < distance) {
distance = d; distance = d;
@ -673,7 +691,6 @@ bool PathStrokeRenderer::event(QEvent *e)
m_fingerPointMapping.clear(); m_fingerPointMapping.clear();
setAnimation(m_wasAnimated); setAnimation(m_wasAnimated);
return true; return true;
break;
default: default:
break; break;
} }

View File

@ -169,7 +169,7 @@ class PathStrokeWidget : public QWidget
public: public:
PathStrokeWidget(bool smallScreen); PathStrokeWidget(bool smallScreen);
void setStyle ( QStyle * style ); void setStyle(QStyle *style);
private: private:
PathStrokeRenderer *m_renderer; PathStrokeRenderer *m_renderer;

View File

@ -63,7 +63,7 @@ public:
void drawHoverRect(QPainter *painter, const QRect &rect) const; void drawHoverRect(QPainter *painter, const QRect &rect) const;
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, 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, void drawControl(ControlElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget) const override; QPainter *painter, const QWidget *widget) const override;
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,

View File

@ -136,7 +136,7 @@ void ArthurFrame::createGlWindow()
void ArthurFrame::paintEvent(QPaintEvent *e) void ArthurFrame::paintEvent(QPaintEvent *e)
{ {
static QImage *static_image = 0; static QImage *static_image = nullptr;
QPainter painter; QPainter painter;
@ -376,7 +376,7 @@ void ArthurFrame::showSource()
const QString html = QStringLiteral("<html><pre>") + contents + QStringLiteral("</pre></html>"); 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->setWindowTitle(tr("Source: %1").arg(m_sourceFileName.midRef(5)));
sourceViewer->setParent(this, Qt::Dialog); sourceViewer->setParent(this, Qt::Dialog);
sourceViewer->setAttribute(Qt::WA_DeleteOnClose); sourceViewer->setAttribute(Qt::WA_DeleteOnClose);

View File

@ -53,7 +53,7 @@
#include <QOffscreenSurface> #include <QOffscreenSurface>
#include <QOpenGLFunctions> #include <QOpenGLFunctions>
QFboPaintDevice::QFboPaintDevice(const QSize& size, bool flipped, bool clearOnInit, QFboPaintDevice::QFboPaintDevice(const QSize &size, bool flipped, bool clearOnInit,
QOpenGLFramebufferObject::Attachment attachment) QOpenGLFramebufferObject::Attachment attachment)
: QOpenGLPaintDevice(size) : QOpenGLPaintDevice(size)
{ {
@ -97,8 +97,8 @@ GLuint QFboPaintDevice::takeTexture()
QImage QFboPaintDevice::toImage() const QImage QFboPaintDevice::toImage() const
{ {
QOpenGLContext* currentContext = QOpenGLContext::currentContext(); QOpenGLContext *currentContext = QOpenGLContext::currentContext();
QSurface* currentSurface = currentContext ? currentContext->surface() : 0; QSurface *currentSurface = currentContext ? currentContext->surface() : nullptr;
context()->makeCurrent(m_surface); context()->makeCurrent(m_surface);

View File

@ -60,7 +60,7 @@
class QFboPaintDevice : public QOpenGLPaintDevice { class QFboPaintDevice : public QOpenGLPaintDevice {
public: public:
QFboPaintDevice(const QSize&, bool flipped = false, bool clearOnInit = true, QFboPaintDevice(const QSize &size, bool flipped = false, bool clearOnInit = true,
QOpenGLFramebufferObject::Attachment = QOpenGLFramebufferObject::CombinedDepthStencil); QOpenGLFramebufferObject::Attachment = QOpenGLFramebufferObject::CombinedDepthStencil);
~QFboPaintDevice(); ~QFboPaintDevice();
@ -83,7 +83,7 @@ public:
private: private:
QOpenGLFramebufferObject *m_framebufferObject; QOpenGLFramebufferObject *m_framebufferObject;
QSurface* m_surface; QSurface *m_surface;
}; };
#endif // QT_NO_OPENGL #endif // QT_NO_OPENGL

View File

@ -262,8 +262,8 @@ bool HoverPoints::eventFilter(QObject *object, QEvent *event)
case QEvent::Paint: case QEvent::Paint:
{ {
QWidget *that_widget = m_widget; QWidget *that_widget = m_widget;
m_widget = 0; m_widget = nullptr;
QApplication::sendEvent(object, event); QCoreApplication::sendEvent(object, event);
m_widget = that_widget; m_widget = that_widget;
paintPoints(); paintPoints();
return true; return true;

View File

@ -70,7 +70,7 @@ class RenderArea : public QWidget
Q_OBJECT Q_OBJECT
public: public:
RenderArea(QWidget *parent = 0); RenderArea(QWidget *parent = nullptr);
void setOperations(const QList<Operation> &operations); void setOperations(const QList<Operation> &operations);
void setShape(const QPainterPath &shape); void setShape(const QPainterPath &shape);

View File

@ -640,7 +640,7 @@ void TextEdit::textStyle(int styleIndex)
{ {
QTextCursor cursor = textEdit->textCursor(); QTextCursor cursor = textEdit->textCursor();
QTextListFormat::Style style = QTextListFormat::ListStyleUndefined; QTextListFormat::Style style = QTextListFormat::ListStyleUndefined;
QTextBlockFormat::MarkerType marker = QTextBlockFormat::NoMarker; QTextBlockFormat::MarkerType marker = QTextBlockFormat::MarkerType::NoMarker;
switch (styleIndex) { switch (styleIndex) {
case 1: case 1:
@ -657,14 +657,14 @@ void TextEdit::textStyle(int styleIndex)
style = cursor.currentList()->format().style(); style = cursor.currentList()->format().style();
else else
style = QTextListFormat::ListDisc; style = QTextListFormat::ListDisc;
marker = QTextBlockFormat::Unchecked; marker = QTextBlockFormat::MarkerType::Unchecked;
break; break;
case 5: case 5:
if (cursor.currentList()) if (cursor.currentList())
style = cursor.currentList()->format().style(); style = cursor.currentList()->format().style();
else else
style = QTextListFormat::ListDisc; style = QTextListFormat::ListDisc;
marker = QTextBlockFormat::Checked; marker = QTextBlockFormat::MarkerType::Checked;
break; break;
case 6: case 6:
style = QTextListFormat::ListDecimal; style = QTextListFormat::ListDecimal;
@ -823,14 +823,14 @@ void TextEdit::cursorPositionChanged()
break; break;
} }
switch (textEdit->textCursor().block().blockFormat().marker()) { switch (textEdit->textCursor().block().blockFormat().marker()) {
case QTextBlockFormat::NoMarker: case QTextBlockFormat::MarkerType::NoMarker:
actionToggleCheckState->setChecked(false); actionToggleCheckState->setChecked(false);
break; break;
case QTextBlockFormat::Unchecked: case QTextBlockFormat::MarkerType::Unchecked:
comboStyle->setCurrentIndex(4); comboStyle->setCurrentIndex(4);
actionToggleCheckState->setChecked(false); actionToggleCheckState->setChecked(false);
break; break;
case QTextBlockFormat::Checked: case QTextBlockFormat::MarkerType::Checked:
comboStyle->setCurrentIndex(5); comboStyle->setCurrentIndex(5);
actionToggleCheckState->setChecked(true); actionToggleCheckState->setChecked(true);
break; break;

View File

@ -64,7 +64,7 @@ class RectObject : public QGraphicsObject
public: 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) : QGraphicsObject(parent)
, m_text(text) , m_text(text)
, m_rect(x, y, width, height) , m_rect(x, y, width, height)

View File

@ -48,13 +48,18 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtWidgets> #include <QApplication>
#include <QEventTransition>
#include <QPushButton>
#include <QStateMachine>
#include <QVBoxLayout>
#include <QWidget>
//! [0] //! [0]
class Window : public QWidget class Window : public QWidget
{ {
public: public:
Window(QWidget *parent = 0) Window(QWidget *parent = nullptr)
: QWidget(parent) : QWidget(parent)
{ {
QPushButton *button = new QPushButton(this); QPushButton *button = new QPushButton(this);

View File

@ -57,10 +57,7 @@ class Factorial : public QObject
Q_PROPERTY(int x READ x WRITE setX) Q_PROPERTY(int x READ x WRITE setX)
Q_PROPERTY(int fac READ fac WRITE setFac) Q_PROPERTY(int fac READ fac WRITE setFac)
public: public:
Factorial(QObject *parent = 0) using QObject::QObject;
: QObject(parent), m_x(-1), m_fac(1)
{
}
int x() const int x() const
{ {
@ -89,8 +86,8 @@ Q_SIGNALS:
void xChanged(int value); void xChanged(int value);
private: private:
int m_x; int m_x = -1;
int m_fac; int m_fac = 1;
}; };
//! [0] //! [0]

View File

@ -48,7 +48,13 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtWidgets> #include <QApplication>
#include <QFinalState>
#include <QPainter>
#include <QStateMachine>
#include <QTimer>
#include <QVBoxLayout>
#include <QWidget>
//! [0] //! [0]
class LightWidget : public QWidget class LightWidget : public QWidget
@ -56,7 +62,7 @@ class LightWidget : public QWidget
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool on READ isOn WRITE setOn) Q_PROPERTY(bool on READ isOn WRITE setOn)
public: public:
LightWidget(const QColor &color, QWidget *parent = 0) LightWidget(const QColor &color, QWidget *parent = nullptr)
: QWidget(parent), m_color(color), m_on(false) {} : QWidget(parent), m_color(color), m_on(false) {}
bool isOn() const bool isOn() const
@ -94,7 +100,7 @@ private:
class TrafficLightWidget : public QWidget class TrafficLightWidget : public QWidget
{ {
public: public:
TrafficLightWidget(QWidget *parent = 0) TrafficLightWidget(QWidget *parent = nullptr)
: QWidget(parent) : QWidget(parent)
{ {
QVBoxLayout *vbox = new QVBoxLayout(this); QVBoxLayout *vbox = new QVBoxLayout(this);
@ -125,7 +131,7 @@ private:
//! [1] //! [1]
//! [2] //! [2]
QState *createLightState(LightWidget *light, int duration, QState *parent = 0) QState *createLightState(LightWidget *light, int duration, QState *parent = nullptr)
{ {
QState *lightState = new QState(parent); QState *lightState = new QState(parent);
QTimer *timer = new QTimer(lightState); QTimer *timer = new QTimer(lightState);

View File

@ -62,7 +62,7 @@ class ScribbleArea : public QWidget
Q_OBJECT Q_OBJECT
public: public:
ScribbleArea(QWidget *parent = 0); ScribbleArea(QWidget *parent = nullptr);
bool openImage(const QString &fileName); bool openImage(const QString &fileName);
bool saveImage(const QString &fileName, const char *fileFormat); bool saveImage(const QString &fileName, const char *fileFormat);

View File

@ -54,7 +54,7 @@
#include <QTouchEvent> #include <QTouchEvent>
GraphicsView::GraphicsView(QGraphicsScene *scene, QWidget *parent) GraphicsView::GraphicsView(QGraphicsScene *scene, QWidget *parent)
: QGraphicsView(scene, parent), totalScaleFactor(1) : QGraphicsView(scene, parent)
{ {
viewport()->setAttribute(Qt::WA_AcceptTouchEvents); viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
setDragMode(ScrollHandDrag); setDragMode(ScrollHandDrag);
@ -83,7 +83,7 @@ bool GraphicsView::viewportEvent(QEvent *event)
totalScaleFactor *= currentScaleFactor; totalScaleFactor *= currentScaleFactor;
currentScaleFactor = 1; currentScaleFactor = 1;
} }
setTransform(QTransform().scale(totalScaleFactor * currentScaleFactor, setTransform(QTransform::fromScale(totalScaleFactor * currentScaleFactor,
totalScaleFactor * currentScaleFactor)); totalScaleFactor * currentScaleFactor));
} }
return true; return true;

View File

@ -56,10 +56,10 @@ class GraphicsView : public QGraphicsView
Q_OBJECT Q_OBJECT
public: public:
GraphicsView(QGraphicsScene *scene = 0, QWidget *parent = 0); GraphicsView(QGraphicsScene *scene = nullptr, QWidget *parent = nullptr);
bool viewportEvent(QEvent *event) override; bool viewportEvent(QEvent *event) override;
private: private:
qreal totalScaleFactor; qreal totalScaleFactor = 1;
}; };

View File

@ -51,11 +51,10 @@
#include "graphicsview.h" #include "graphicsview.h"
#include "mouse.h" #include "mouse.h"
#include <QtWidgets> #include <QApplication>
#include <cmath>
#include <math.h> static constexpr int MouseCount = 7;
static const int MouseCount = 7;
//! [0] //! [0]
int main(int argc, char **argv) int main(int argc, char **argv)

View File

@ -56,8 +56,8 @@
#include <QStyleOption> #include <QStyleOption>
#include <qmath.h> #include <qmath.h>
const qreal Pi = M_PI; constexpr qreal Pi = M_PI;
const qreal TwoPi = 2 * M_PI; constexpr qreal TwoPi = 2 * M_PI;
static qreal normalizeAngle(qreal angle) static qreal normalizeAngle(qreal angle)
{ {
@ -69,9 +69,9 @@ static qreal normalizeAngle(qreal angle)
} }
//! [0] //! [0]
Mouse::Mouse() Mouse::Mouse() : color(QRandomGenerator::global()->bounded(256),
: angle(0), speed(0), mouseEyeDirection(0), QRandomGenerator::global()->bounded(256),
color(QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256)) QRandomGenerator::global()->bounded(256))
{ {
setTransform(QTransform().rotate(QRandomGenerator::global()->bounded(360 * 16)), true); setTransform(QTransform().rotate(QRandomGenerator::global()->bounded(360 * 16)), true);
startTimer(1000 / 33); startTimer(1000 / 33);

View File

@ -70,9 +70,9 @@ protected:
void timerEvent(QTimerEvent *event) override; void timerEvent(QTimerEvent *event) override;
private: private:
qreal angle; qreal angle = 0;
qreal speed; qreal speed = 0;
qreal mouseEyeDirection; qreal mouseEyeDirection = 0;
QColor color; QColor color;
}; };
//! [0] //! [0]

View File

@ -65,7 +65,7 @@ class AddressBook : public QWidget
Q_OBJECT Q_OBJECT
public: public:
AddressBook(QWidget *parent = 0); AddressBook(QWidget *parent = nullptr);
private: private:
QLineEdit *nameLine; QLineEdit *nameLine;

View File

@ -66,7 +66,7 @@ class AddressBook : public QWidget
Q_OBJECT Q_OBJECT
public: public:
AddressBook(QWidget *parent = 0); AddressBook(QWidget *parent = nullptr);
//! [slots] //! [slots]
public slots: public slots:

View File

@ -66,7 +66,7 @@ class AddressBook : public QWidget
Q_OBJECT Q_OBJECT
public: public:
AddressBook(QWidget *parent = 0); AddressBook(QWidget *parent = nullptr);
public slots: public slots:
void addContact(); void addContact();

View File

@ -66,7 +66,7 @@ class AddressBook : public QWidget
Q_OBJECT Q_OBJECT
public: public:
AddressBook(QWidget *parent = 0); AddressBook(QWidget *parent = nullptr);
//! [Mode enum] //! [Mode enum]
enum Mode { NavigationMode, AddingMode, EditingMode }; enum Mode { NavigationMode, AddingMode, EditingMode };
//! [Mode enum] //! [Mode enum]

View File

@ -69,7 +69,7 @@ class AddressBook : public QWidget
Q_OBJECT Q_OBJECT
public: public:
AddressBook(QWidget *parent = 0); AddressBook(QWidget *parent = nullptr);
enum Mode { NavigationMode, AddingMode, EditingMode }; enum Mode { NavigationMode, AddingMode, EditingMode };
public slots: public slots:

View File

@ -63,7 +63,7 @@ class FindDialog : public QDialog
Q_OBJECT Q_OBJECT
public: public:
FindDialog(QWidget *parent = 0); FindDialog(QWidget *parent = nullptr);
QString getFindText(); QString getFindText();
public slots: public slots:

View File

@ -68,7 +68,7 @@ class AddressBook : public QWidget
Q_OBJECT Q_OBJECT
public: public:
AddressBook(QWidget *parent = 0); AddressBook(QWidget *parent = nullptr);
enum Mode { NavigationMode, AddingMode, EditingMode }; enum Mode { NavigationMode, AddingMode, EditingMode };
public slots: public slots:

View File

@ -63,7 +63,7 @@ class FindDialog : public QDialog
Q_OBJECT Q_OBJECT
public: public:
FindDialog(QWidget *parent = 0); FindDialog(QWidget *parent = nullptr);
QString getFindText(); QString getFindText();
public slots: public slots:

View File

@ -68,7 +68,7 @@ class AddressBook : public QWidget
Q_OBJECT Q_OBJECT
public: public:
AddressBook(QWidget *parent = 0); AddressBook(QWidget *parent = nullptr);
enum Mode { NavigationMode, AddingMode, EditingMode }; enum Mode { NavigationMode, AddingMode, EditingMode };
public slots: public slots:

View File

@ -63,7 +63,7 @@ class FindDialog : public QDialog
Q_OBJECT Q_OBJECT
public: public:
FindDialog(QWidget *parent = 0); FindDialog(QWidget *parent = nullptr);
QString getFindText(); QString getFindText();
public slots: public slots:

View File

@ -56,7 +56,7 @@ int main(int argc, char *argv[])
{ {
QApplication a(argc, argv); QApplication a(argc, argv);
QTableView tableView; QTableView tableView;
MyModel myModel(0); MyModel myModel;
tableView.setModel(&myModel); tableView.setModel(&myModel);
tableView.show(); tableView.show();
return a.exec(); return a.exec();

View File

@ -69,7 +69,7 @@ private:
private slots: private slots:
void selectionChangedSlot(const QItemSelection &newSelection, const QItemSelection &oldSelection); void selectionChangedSlot(const QItemSelection &newSelection, const QItemSelection &oldSelection);
public: public:
MainWindow(QWidget *parent = 0); MainWindow(QWidget *parent = nullptr);
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

View File

@ -72,7 +72,7 @@ class Notepad : public QMainWindow
//! [4] //! [4]
public: public:
explicit Notepad(QWidget *parent = 0); explicit Notepad(QWidget *parent = nullptr);
//! [4] //! [4]
//! [5] //! [5]
~Notepad(); ~Notepad();

View File

@ -50,16 +50,14 @@
#include "openglwindow.h" #include "openglwindow.h"
#include <QPainter>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QFocusEvent>
#include <QApplication> #include <QApplication>
#include <QWidget> #include <QFocusEvent>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QKeyEvent>
#include <QLineEdit> #include <QLineEdit>
#include <QMouseEvent>
#include <QPainter>
#include <QWidget>
// Making use of the class from the opengl example in gui. // Making use of the class from the opengl example in gui.
@ -67,13 +65,10 @@ class Window : public OpenGLWindow
{ {
Q_OBJECT Q_OBJECT
public: public:
Window() using OpenGLWindow::OpenGLWindow;
: m_mouseDown(false)
, m_focus(false)
{
}
void render(QPainter *p) override { void render(QPainter *p) override
{
QLinearGradient g(0, 0, 0, height()); QLinearGradient g(0, 0, 0, height());
g.setColorAt(0, QColor("lightsteelblue")); g.setColorAt(0, QColor("lightsteelblue"));
g.setColorAt(1, Qt::black); g.setColorAt(1, Qt::black);
@ -93,15 +88,15 @@ public:
p->restore(); p->restore();
} }
if (m_focus) { if (m_focus)
p->drawText(20, height() - 20, QLatin1String("Window has focus!")); p->drawText(20, height() - 20, QLatin1String("Window has focus!"));
}
p->setRenderHint(QPainter::Antialiasing); p->setRenderHint(QPainter::Antialiasing);
p->drawPolyline(m_polygon); p->drawPolyline(m_polygon);
} }
void mousePressEvent(QMouseEvent *e) override { void mousePressEvent(QMouseEvent *e) override
{
if (!m_mouseDown) { if (!m_mouseDown) {
m_mouseDown = true; m_mouseDown = true;
m_polygon.clear(); m_polygon.clear();
@ -110,14 +105,16 @@ public:
} }
} }
void mouseMoveEvent(QMouseEvent *e) override { void mouseMoveEvent(QMouseEvent *e) override
{
if (m_mouseDown) { if (m_mouseDown) {
m_polygon.append(e->pos()); m_polygon.append(e->pos());
renderLater(); renderLater();
} }
} }
void mouseReleaseEvent(QMouseEvent *e) override { void mouseReleaseEvent(QMouseEvent *e) override
{
if (m_mouseDown) { if (m_mouseDown) {
m_mouseDown = false; m_mouseDown = false;
m_polygon.append(e->pos()); m_polygon.append(e->pos());
@ -125,33 +122,35 @@ public:
} }
} }
void focusInEvent(QFocusEvent *) override { void focusInEvent(QFocusEvent *) override
{
m_focus = true; m_focus = true;
renderLater(); renderLater();
} }
void focusOutEvent(QFocusEvent *) override { void focusOutEvent(QFocusEvent *) override
{
m_focus = false; m_focus = false;
m_polygon.clear(); m_polygon.clear();
renderLater(); renderLater();
} }
void keyPressEvent(QKeyEvent *e) override { void keyPressEvent(QKeyEvent *e) override
{
m_key = e->text(); m_key = e->text();
renderLater(); renderLater();
} }
void keyReleaseEvent(QKeyEvent *) override { void keyReleaseEvent(QKeyEvent *) override
{
m_key = QString(); m_key = QString();
renderLater(); renderLater();
} }
private: private:
QPolygon m_polygon; QPolygon m_polygon;
bool m_mouseDown;
bool m_focus;
QString m_key; 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; QWidget *widget = new QWidget;
QHBoxLayout *layout = new QHBoxLayout(widget); QHBoxLayout *layout = new QHBoxLayout(widget);
Window *window = new Window(); Window *window = new Window;
QWidget *container = QWidget::createWindowContainer(window); QWidget *container = QWidget::createWindowContainer(window);
container->setMinimumSize(300, 300); container->setMinimumSize(300, 300);

View File

@ -758,9 +758,7 @@ defineTest(qtConfLibrary_pkgConfig) {
!qtConfResolveLibs($${1}.libs, $$libs): \ !qtConfResolveLibs($${1}.libs, $$libs): \
return(false) return(false)
contains($${1}.libs, ".*\\.$${QMAKE_EXTENSION_STATICLIB}$") { contains($${1}.libs, ".*\\.$${QMAKE_EXTENSION_STATICLIB}$") {
qtRunLoggedCommand("$$pkg_config --static --libs-only-L $$args", libpaths)|return(false) qtRunLoggedCommand("$$pkg_config --static --libs $$args", libs)|return(false)
qtRunLoggedCommand("$$pkg_config --static --libs-only-l $$args", libs)|return(false)
eval(libs = $$libpaths $$libs)
!qtConfResolveLibs($${1}.libs, $$libs): \ !qtConfResolveLibs($${1}.libs, $$libs): \
return(false) return(false)
} }

View File

@ -159,8 +159,12 @@ defineTest(qtAddToolEnv) {
!isEmpty(cmd): cmd = "$$cmd " !isEmpty(cmd): cmd = "$$cmd "
equals(ds, /) { equals(ds, /) {
batch_name = $${batch_name}.sh batch_name = $${batch_name}.sh
equals(QMAKE_HOST.os, Darwin):exists(/bin/bash): \
shell = /bin/bash
else: \
shell = /bin/sh
batch_cont = \ batch_cont = \
"$$LITERAL_HASH!/bin/sh" \ "$$LITERAL_HASH!$$shell" \
$$batch_sets \ $$batch_sets \
"exec $$cmd\"$@\"" "exec $$cmd\"$@\""
# It would be nicer to use the '.' command (without 'exec' above), # It would be nicer to use the '.' command (without 'exec' above),

View File

@ -16,7 +16,7 @@ PROVIDER_NAME = qt$$lower($$MODULE)
INCLUDEPATH += $$absolute_path($$TRACEGEN_DIR, $$OUT_PWD) INCLUDEPATH += $$absolute_path($$TRACEGEN_DIR, $$OUT_PWD)
HEADER_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints_p$${first(QMAKE_EXT_H)} 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)} SOURCE_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints$${first(QMAKE_EXT_CPP)}
isEmpty(BUILDS)|build_pass { isEmpty(BUILDS)|build_pass {

View File

@ -27,8 +27,8 @@ distclean: clean_all
$(EXPORT_SUBTARGETS): % : %-build $(EXPORT_SUBTARGETS): % : %-build
# Generic targets # Generic targets
%_first: $(firstword $(call targets, %)) ; %_first: $(EXPORT_PRE_TARGETDEPS) $(firstword $(call targets, %)) ;
%_all: $(call targets, %) ; %_all: $(EXPORT_PRE_TARGETDEPS) $(call targets, %) ;
# Actions # Actions
%-build: ACTION = build %-build: ACTION = build

View File

@ -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'") debug(1, "Generating Xcode project in $$OUT_PWD using '$$cmd'")
system("$$QMAKE_CD $$system_quote($$OUT_PWD) && $$cmd") system("$$QMAKE_CD $$system_quote($$OUT_PWD) && $$cmd")
QMAKE_EXTRA_VARIABLES += PRE_TARGETDEPS
# Subtargets # Subtargets
for(build, BUILDS): \ for(build, BUILDS): \

View File

@ -569,6 +569,23 @@ static QString getRelocatablePrefix()
#error "The chosen platform / config does not support querying for a dynamic prefix." #error "The chosen platform / config does not support querying for a dynamic prefix."
#endif #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", Q_ASSERT_X(!prefixPath.isEmpty(), "getRelocatablePrefix",
"Failed to find the Qt prefix path."); "Failed to find the Qt prefix path.");
return prefixPath; return prefixPath;

View File

@ -232,7 +232,7 @@ QT_BEGIN_NAMESPACE
\row \li DocumentsLocation \row \li DocumentsLocation
\li "~/Documents" \li "~/Documents"
\row \li FontsLocation \row \li FontsLocation
\li "~/.fonts" \li "~/.fonts", "~/.local/share/fonts", "/usr/local/share/fonts", "/usr/share/fonts"
\row \li ApplicationsLocation \row \li ApplicationsLocation
\li "~/.local/share/applications", "/usr/local/share/applications", "/usr/share/applications" \li "~/.local/share/applications", "/usr/local/share/applications", "/usr/share/applications"
\row \li MusicLocation \row \li MusicLocation

View File

@ -339,6 +339,9 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
break; break;
case FontsLocation: case FontsLocation:
dirs += QDir::homePath() + QLatin1String("/.fonts"); dirs += QDir::homePath() + QLatin1String("/.fonts");
dirs += xdgDataDirs();
for (int i = 1; i < dirs.count(); ++i)
dirs[i].append(QLatin1String("/fonts"));
break; break;
default: default:
break; break;

View File

@ -3861,6 +3861,9 @@ int QDateTime::offsetFromUtc() const
QString QDateTime::timeZoneAbbreviation() const QString QDateTime::timeZoneAbbreviation() const
{ {
if (!isValid())
return QString();
switch (getSpec(d)) { switch (getSpec(d)) {
case Qt::UTC: case Qt::UTC:
return QLatin1String("UTC"); return QLatin1String("UTC");
@ -3895,6 +3898,9 @@ QString QDateTime::timeZoneAbbreviation() const
bool QDateTime::isDaylightTime() const bool QDateTime::isDaylightTime() const
{ {
if (!isValid())
return false;
switch (getSpec(d)) { switch (getSpec(d)) {
case Qt::UTC: case Qt::UTC:
case Qt::OffsetFromUTC: 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; Returns \c true if this datetime is equal to the \a other datetime;
otherwise returns \c false. otherwise returns \c false.
Since 5.14, all invalid datetimes are equal to one another and differ from
all other datetimes.
\sa operator!=() \sa operator!=()
*/ */
bool QDateTime::operator==(const QDateTime &other) const bool QDateTime::operator==(const QDateTime &other) const
{ {
if (getSpec(d) == Qt::LocalTime if (!isValid())
&& getStatus(d) == getStatus(other.d)) { return !other.isValid();
if (!other.isValid())
return false;
if (getSpec(d) == Qt::LocalTime && getStatus(d) == getStatus(other.d))
return getMSecs(d) == getMSecs(other.d); return getMSecs(d) == getMSecs(other.d);
}
// Convert to UTC and compare // 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 Returns \c true if this datetime is different from the \a other
datetime; otherwise returns \c false. datetime; otherwise returns \c false.
Two datetimes are different if either the date, the time, or the Two datetimes are different if either the date, the time, or the time zone
time zone components are different. components are different. Since 5.14, any invalid datetime is less than all
valid datetimes.
\sa operator==() \sa operator==()
*/ */
@ -4793,12 +4807,16 @@ bool QDateTime::operator==(const QDateTime &other) const
bool QDateTime::operator<(const QDateTime &other) const bool QDateTime::operator<(const QDateTime &other) const
{ {
if (getSpec(d) == Qt::LocalTime if (!isValid())
&& getStatus(d) == getStatus(other.d)) { return other.isValid();
if (!other.isValid())
return false;
if (getSpec(d) == Qt::LocalTime && getStatus(d) == getStatus(other.d))
return getMSecs(d) < getMSecs(other.d); return getMSecs(d) < getMSecs(other.d);
}
// Convert to UTC and compare // 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 // QDate/QTime/spec/offset because QDateTime::operator== converts both arguments
// to the same timezone. If we don't, qHash would return different hashes for // 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. // 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) /*! \fn uint qHash(const QDate &key, uint seed = 0)

View File

@ -583,6 +583,13 @@ struct BezierEase : public QEasingCurveFunction
qWarning("QEasingCurve: Invalid bezier curve"); qWarning("QEasingCurve: Invalid bezier curve");
return x; 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; SingleCubicBezier *singleCubicBezier = 0;
getBezierSegment(singleCubicBezier, x); getBezierSegment(singleCubicBezier, x);
@ -998,6 +1005,11 @@ struct BackEase : public QEasingCurveFunction
qreal value(qreal t) override 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; qreal o = (_o < 0) ? qreal(1.70158) : _o;
switch(_t) { switch(_t) {
case QEasingCurve::InBack: case QEasingCurve::InBack:

View File

@ -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 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. 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 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) 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 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. 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 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) bool QDBusConnection::registerObject(const QString &path, const QString &interface, QObject *object, RegisterOptions options)
{ {

View File

@ -414,7 +414,7 @@ QFrameInfo QMoviePrivate::infoForFrame(int frameNumber)
} else { } else {
// We've read all frames now. Return an end marker // We've read all frames now. Return an end marker
haveReadAll = true; haveReadAll = true;
return QFrameInfo::endMarker(); return frameNumber == greatestFrameNumber + 1 ? QFrameInfo::endMarker() : QFrameInfo();
} }
} }
} }

View File

@ -617,6 +617,7 @@ bool QWindowSystemInterface::isTouchDeviceRegistered(const QTouchDevice *device)
static int g_nextPointId = 1; static int g_nextPointId = 1;
// map from device-independent point id (arbitrary) to "Qt point" ids // map from device-independent point id (arbitrary) to "Qt point" ids
QMutex QWindowSystemInterfacePrivate::pointIdMapMutex;
typedef QMap<quint64, int> PointIdMap; typedef QMap<quint64, int> PointIdMap;
Q_GLOBAL_STATIC(PointIdMap, g_pointIdMap) Q_GLOBAL_STATIC(PointIdMap, g_pointIdMap)
@ -634,6 +635,8 @@ Q_GLOBAL_STATIC(PointIdMap, g_pointIdMap)
*/ */
static int acquireCombinedPointId(quint8 deviceId, int pointId) static int acquireCombinedPointId(quint8 deviceId, int pointId)
{ {
QMutexLocker locker(&QWindowSystemInterfacePrivate::pointIdMapMutex);
quint64 combinedId64 = (quint64(deviceId) << 32) + pointId; quint64 combinedId64 = (quint64(deviceId) << 32) + pointId;
auto it = g_pointIdMap->constFind(combinedId64); auto it = g_pointIdMap->constFind(combinedId64);
int uid; int uid;
@ -693,6 +696,8 @@ QList<QTouchEvent::TouchPoint>
} }
if (states == Qt::TouchPointReleased) { if (states == Qt::TouchPointReleased) {
QMutexLocker locker(&QWindowSystemInterfacePrivate::pointIdMapMutex);
// All points on deviceId have been released. // All points on deviceId have been released.
// Remove all points associated with that device from g_pointIdMap. // Remove all points associated with that device from g_pointIdMap.
// (On other devices, some touchpoints might still be pressed. // (On other devices, some touchpoints might still be pressed.
@ -712,6 +717,7 @@ QList<QTouchEvent::TouchPoint>
void QWindowSystemInterfacePrivate::clearPointIdMap() void QWindowSystemInterfacePrivate::clearPointIdMap()
{ {
QMutexLocker locker(&QWindowSystemInterfacePrivate::pointIdMapMutex);
g_pointIdMap->clear(); g_pointIdMap->clear();
g_nextPointId = 1; g_nextPointId = 1;
} }

View File

@ -528,6 +528,7 @@ public:
static QWaitCondition eventsFlushed; static QWaitCondition eventsFlushed;
static QMutex flushEventMutex; static QMutex flushEventMutex;
static QMutex pointIdMapMutex;
static QAtomicInt eventAccepted; static QAtomicInt eventAccepted;
static QList<QTouchEvent::TouchPoint> static QList<QTouchEvent::TouchPoint>

View File

@ -660,7 +660,7 @@ QTextBlock QAbstractTextDocumentLayout::blockWithMarkerAt(const QPointF &pos) co
{ {
QTextBlock block = document()->firstBlock(); QTextBlock block = document()->firstBlock();
while (block.isValid()) { while (block.isValid()) {
if (block.blockFormat().marker() != QTextBlockFormat::NoMarker) { if (block.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker) {
QRectF blockBr = blockBoundingRect(block); QRectF blockBr = blockBoundingRect(block);
QTextBlockFormat blockFmt = block.blockFormat(); QTextBlockFormat blockFmt = block.blockFormat();
QFontMetrics fm(block.charFormat().font()); QFontMetrics fm(block.charFormat().font());

View File

@ -2194,11 +2194,11 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
QBrush brush = context.palette.brush(QPalette::Text); QBrush brush = context.palette.brush(QPalette::Text);
bool marker = bl.blockFormat().marker() != QTextBlockFormat::NoMarker; bool marker = bl.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker;
if (marker) { if (marker) {
int adj = fontMetrics.lineSpacing() / 6; int adj = fontMetrics.lineSpacing() / 6;
r.adjust(-adj, 0, -adj, 0); 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 // ### Qt6: render with QStyle / PE_IndicatorCheckBox. We don't currently
// have access to that here, because it would be a widget dependency. // have access to that here, because it would be a widget dependency.
painter->setPen(QPen(painter->pen().color(), 2)); painter->setPen(QPen(painter->pen().color(), 2));

View File

@ -627,7 +627,7 @@ public:
LineDistanceHeight = 4 LineDistanceHeight = 4
}; };
enum MarkerType { enum class MarkerType {
NoMarker = 0, NoMarker = 0,
Unchecked = 1, Unchecked = 1,
Checked = 2 Checked = 2

View File

@ -190,8 +190,8 @@ int QTextMarkdownImporter::cbEnterBlock(int blockType, void *det)
m_listItem = true; m_listItem = true;
MD_BLOCK_LI_DETAIL *detail = static_cast<MD_BLOCK_LI_DETAIL *>(det); MD_BLOCK_LI_DETAIL *detail = static_cast<MD_BLOCK_LI_DETAIL *>(det);
m_markerType = detail->is_task ? m_markerType = detail->is_task ?
(detail->task_mark == ' ' ? QTextBlockFormat::Unchecked : QTextBlockFormat::Checked) : (detail->task_mark == ' ' ? QTextBlockFormat::MarkerType::Unchecked : QTextBlockFormat::MarkerType::Checked) :
QTextBlockFormat::NoMarker; QTextBlockFormat::MarkerType::NoMarker;
qCDebug(lcMD) << "LI"; qCDebug(lcMD) << "LI";
} break; } break;
case MD_BLOCK_UL: { case MD_BLOCK_UL: {
@ -549,7 +549,7 @@ void QTextMarkdownImporter::insertBlock()
blockFormat.setTopMargin(m_paragraphMargin); blockFormat.setTopMargin(m_paragraphMargin);
blockFormat.setBottomMargin(m_paragraphMargin); blockFormat.setBottomMargin(m_paragraphMargin);
} }
if (m_markerType == QTextBlockFormat::NoMarker) if (m_markerType == QTextBlockFormat::MarkerType::NoMarker)
blockFormat.clearProperty(QTextFormat::BlockMarker); blockFormat.clearProperty(QTextFormat::BlockMarker);
else else
blockFormat.setMarker(m_markerType); blockFormat.setMarker(m_markerType);

View File

@ -128,7 +128,7 @@ private:
Features m_features; Features m_features;
QTextImageFormat m_imageFormat; QTextImageFormat m_imageFormat;
QTextListFormat m_listFormat; QTextListFormat m_listFormat;
QTextBlockFormat::MarkerType m_markerType = QTextBlockFormat::NoMarker; QTextBlockFormat::MarkerType m_markerType = QTextBlockFormat::MarkerType::NoMarker;
bool m_needsInsertBlock = false; bool m_needsInsertBlock = false;
bool m_needsInsertList = false; bool m_needsInsertList = false;
bool m_listItem = false; // true from the beginning of LI to the end of the first P bool m_listItem = false; // true from the beginning of LI to the end of the first P

View File

@ -327,10 +327,10 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
break; break;
} }
switch (blockFmt.marker()) { switch (blockFmt.marker()) {
case QTextBlockFormat::Checked: case QTextBlockFormat::MarkerType::Checked:
bullet += " [x]"; bullet += " [x]";
break; break;
case QTextBlockFormat::Unchecked: case QTextBlockFormat::MarkerType::Unchecked:
bullet += " [ ]"; bullet += " [ ]";
break; break;
default: default:

View File

@ -358,7 +358,7 @@ void QTextOdfWriter::writeBlock(QXmlStreamWriter &writer, const QTextBlock &bloc
int precedingSpaces = 0; int precedingSpaces = 0;
int exportedIndex = 0; int exportedIndex = 0;
for (int i=0; i <= fragmentText.count(); ++i) { 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() == ' '; bool isSpace = character.unicode() == ' ';
// find more than one space. -> <text:s text:c="2" /> // find more than one space. -> <text:s text:c="2" />

View File

@ -98,8 +98,8 @@ void QEvdevTouchManager::addDevice(const QString &deviceNode)
qCDebug(qLcEvdevTouch, "evdevtouch: Adding device at %ls", qUtf16Printable(deviceNode)); qCDebug(qLcEvdevTouch, "evdevtouch: Adding device at %ls", qUtf16Printable(deviceNode));
auto handler = qt_make_unique<QEvdevTouchScreenHandlerThread>(deviceNode, m_spec); auto handler = qt_make_unique<QEvdevTouchScreenHandlerThread>(deviceNode, m_spec);
if (handler) { if (handler) {
m_activeDevices.add(deviceNode, std::move(handler));
connect(handler.get(), &QEvdevTouchScreenHandlerThread::touchDeviceRegistered, this, &QEvdevTouchManager::updateInputDeviceCount); connect(handler.get(), &QEvdevTouchScreenHandlerThread::touchDeviceRegistered, this, &QEvdevTouchManager::updateInputDeviceCount);
m_activeDevices.add(deviceNode, std::move(handler));
} else { } else {
qWarning("evdevtouch: Failed to open touch device %ls", qUtf16Printable(deviceNode)); qWarning("evdevtouch: Failed to open touch device %ls", qUtf16Printable(deviceNode));
} }

View File

@ -171,12 +171,8 @@ QT_USE_NAMESPACE
// This function will only be called when NSApp is actually running. // This function will only be called when NSApp is actually running.
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{ {
// The reflection delegate gets precedence if ([reflectionDelegate respondsToSelector:_cmd])
if (reflectionDelegate) {
if ([reflectionDelegate respondsToSelector:@selector(applicationShouldTerminate:)])
return [reflectionDelegate applicationShouldTerminate:sender]; return [reflectionDelegate applicationShouldTerminate:sender];
return NSTerminateNow;
}
if ([self canQuit]) { if ([self canQuit]) {
if (!startedQuit) { if (!startedQuit) {
@ -227,10 +223,6 @@ QT_USE_NAMESPACE
application depends on. application depends on.
*/ */
NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager]; NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager];
[eventManager setEventHandler:self
andSelector:@selector(appleEventQuit:withReplyEvent:)
forEventClass:kCoreEventClass
andEventID:kAEQuitApplication];
[eventManager setEventHandler:self [eventManager setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:) andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass forEventClass:kInternetEventClass
@ -241,7 +233,6 @@ QT_USE_NAMESPACE
- (void)removeAppleEventHandlers - (void)removeAppleEventHandlers
{ {
NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager]; NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager];
[eventManager removeEventHandlerForEventClass:kCoreEventClass andEventID:kAEQuitApplication];
[eventManager removeEventHandlerForEventClass:kInternetEventClass andEventID:kAEGetURL]; [eventManager removeEventHandlerForEventClass:kInternetEventClass andEventID:kAEGetURL];
} }
@ -282,26 +273,22 @@ QT_USE_NAMESPACE
QWindowSystemInterface::handleFileOpenEvent(qtFileName); QWindowSystemInterface::handleFileOpenEvent(qtFileName);
} }
if (reflectionDelegate && if ([reflectionDelegate respondsToSelector:_cmd])
[reflectionDelegate respondsToSelector:@selector(application:openFiles:)])
[reflectionDelegate application:sender openFiles:filenames]; [reflectionDelegate application:sender openFiles:filenames];
} }
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{ {
// If we have a reflection delegate, that will get to call the shots. if ([reflectionDelegate respondsToSelector:_cmd])
if (reflectionDelegate
&& [reflectionDelegate respondsToSelector:
@selector(applicationShouldTerminateAfterLastWindowClosed:)])
return [reflectionDelegate applicationShouldTerminateAfterLastWindowClosed:sender]; return [reflectionDelegate applicationShouldTerminateAfterLastWindowClosed:sender];
return NO; // Someday qApp->quitOnLastWindowClosed(); when QApp and NSApp work closer together. return NO; // Someday qApp->quitOnLastWindowClosed(); when QApp and NSApp work closer together.
} }
- (void)applicationDidBecomeActive:(NSNotification *)notification - (void)applicationDidBecomeActive:(NSNotification *)notification
{ {
if (reflectionDelegate if ([reflectionDelegate respondsToSelector:_cmd])
&& [reflectionDelegate respondsToSelector:@selector(applicationDidBecomeActive:)])
[reflectionDelegate applicationDidBecomeActive:notification]; [reflectionDelegate applicationDidBecomeActive:notification];
QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationActive); QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationActive);
@ -309,8 +296,7 @@ QT_USE_NAMESPACE
- (void)applicationDidResignActive:(NSNotification *)notification - (void)applicationDidResignActive:(NSNotification *)notification
{ {
if (reflectionDelegate if ([reflectionDelegate respondsToSelector:_cmd])
&& [reflectionDelegate respondsToSelector:@selector(applicationDidResignActive:)])
[reflectionDelegate applicationDidResignActive:notification]; [reflectionDelegate applicationDidResignActive:notification];
QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationInactive); QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationInactive);
@ -318,10 +304,7 @@ QT_USE_NAMESPACE
- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
{ {
Q_UNUSED(theApplication); if ([reflectionDelegate respondsToSelector:_cmd])
Q_UNUSED(flag);
if (reflectionDelegate
&& [reflectionDelegate respondsToSelector:@selector(applicationShouldHandleReopen:hasVisibleWindows:)])
return [reflectionDelegate applicationShouldHandleReopen:theApplication hasVisibleWindows:flag]; return [reflectionDelegate applicationShouldHandleReopen:theApplication hasVisibleWindows:flag];
/* /*
@ -354,16 +337,13 @@ QT_USE_NAMESPACE
- (BOOL)respondsToSelector:(SEL)aSelector - (BOOL)respondsToSelector:(SEL)aSelector
{ {
BOOL result = [super respondsToSelector:aSelector]; return [super respondsToSelector:aSelector] || [reflectionDelegate respondsToSelector:aSelector];
if (!result && reflectionDelegate)
result = [reflectionDelegate respondsToSelector:aSelector];
return result;
} }
- (void)forwardInvocation:(NSInvocation *)invocation - (void)forwardInvocation:(NSInvocation *)invocation
{ {
SEL invocationSelector = [invocation selector]; SEL invocationSelector = [invocation selector];
if (reflectionDelegate && [reflectionDelegate respondsToSelector:invocationSelector]) if ([reflectionDelegate respondsToSelector:invocationSelector])
[invocation invokeWithTarget:reflectionDelegate]; [invocation invokeWithTarget:reflectionDelegate];
else else
[self doesNotRecognizeSelector:invocationSelector]; [self doesNotRecognizeSelector:invocationSelector];
@ -375,14 +355,6 @@ QT_USE_NAMESPACE
NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
QWindowSystemInterface::handleFileOpenEvent(QUrl(QString::fromNSString(urlString))); QWindowSystemInterface::handleFileOpenEvent(QUrl(QString::fromNSString(urlString)));
} }
- (void)appleEventQuit:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
Q_UNUSED(event);
Q_UNUSED(replyEvent);
[NSApp terminate:self];
}
@end @end
@implementation QCocoaApplicationDelegate (Menus) @implementation QCocoaApplicationDelegate (Menus)

View File

@ -560,17 +560,26 @@ void QCALayerBackingStore::flush(QWindow *flushedWindow, const QRegion &region,
flushedView.layer.contents = nil; flushedView.layer.contents = nil;
} }
if (flushedView == backingStoreView) {
qCInfo(lcQpaBackingStore) << "Flushing" << backBufferSurface qCInfo(lcQpaBackingStore) << "Flushing" << backBufferSurface
<< "to" << flushedView.layer << "of" << flushedView; << "to" << flushedView.layer << "of" << flushedView;
flushedView.layer.contents = backBufferSurface; flushedView.layer.contents = backBufferSurface;
} else {
auto subviewRect = [flushedView convertRect:flushedView.bounds toView:backingStoreView];
auto scale = flushedView.layer.contentsScale;
subviewRect = CGRectApplyAffineTransform(subviewRect, CGAffineTransformMakeScale(scale, scale));
if (flushedView != backingStoreView) { // We make a copy of the image data up front, which means we don't
const CGSize backingStoreSize = backingStoreView.bounds.size; // need to mark the IOSurface as being in use. FIXME: Investigate
flushedView.layer.contentsRect = CGRectApplyAffineTransform( // if there's a cheaper way to get sub-image data to a layer.
[flushedView convertRect:flushedView.bounds toView:backingStoreView], m_buffers.back()->lock(QPlatformGraphicsBuffer::SWReadAccess);
// The contentsRect is in unit coordinate system QImage subImage = m_buffers.back()->asImage()->copy(QRectF::fromCGRect(subviewRect).toRect());
CGAffineTransformMakeScale(1.0 / backingStoreSize.width, 1.0 / backingStoreSize.height)); m_buffers.back()->unlock();
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 // Since we may receive multiple flushes before a new frame is started, we do not

View File

@ -152,6 +152,18 @@
"features": [ "features": [
"disable_program_cache" "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"
]
} }
] ]
} }

View File

@ -115,12 +115,21 @@ static QDebug operator<<(QDebug d, const QMimeData *mimeData)
IDataObject *QWindowsClipboardRetrievalMimeData::retrieveDataObject() const IDataObject *QWindowsClipboardRetrievalMimeData::retrieveDataObject() const
{ {
enum : int { attempts = 3 };
IDataObject * pDataObj = nullptr; IDataObject * pDataObj = nullptr;
if (OleGetClipboard(&pDataObj) == S_OK) { // 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) if (QWindowsContext::verbose > 1)
qCDebug(lcQpaMime) << __FUNCTION__ << pDataObj; qCDebug(lcQpaMime) << __FUNCTION__ << pDataObj;
return pDataObj; return pDataObj;
} }
qCWarning(lcQpaMime, i == attempts
? "Unable to obtain clipboard."
: "Retrying to obtain clipboard.");
QThread::msleep(50);
}
return nullptr; return nullptr;
} }

View File

@ -773,7 +773,7 @@ void QXcbScreen::updateRefreshRate(xcb_randr_mode_t mode)
xcb_randr_mode_info_t *modeInfo = modesIter.data; xcb_randr_mode_info_t *modeInfo = modesIter.data;
if (modeInfo->id == mode) { if (modeInfo->id == mode) {
const uint32_t dotCount = modeInfo->htotal * modeInfo->vtotal; 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; m_mode = mode;
break; break;
} }

View File

@ -226,7 +226,7 @@ private:
QRect m_availableGeometry; QRect m_availableGeometry;
Qt::ScreenOrientation m_orientation = Qt::PrimaryOrientation; Qt::ScreenOrientation m_orientation = Qt::PrimaryOrientation;
QXcbCursor *m_cursor; QXcbCursor *m_cursor;
int m_refreshRate = 60; qreal m_refreshRate = 60.0;
QEdidParser m_edid; QEdidParser m_edid;
}; };

View File

@ -328,6 +328,20 @@ static const int closeButtonSize = 14;
static const qreal closeButtonCornerRadius = 2.0; static const qreal closeButtonCornerRadius = 2.0;
#endif // QT_CONFIG(tabbar) #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 headerSectionArrowHeight = 6;
static const int headerSectionSeparatorInset = 2; static const int headerSectionSeparatorInset = 2;
@ -5603,8 +5617,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
if (view) if (view)
isKey = [view.window isKeyWindow]; isKey = [view.window isKeyWindow];
QBrush brush(isKey ? QColor(0, 0, 0, 28) QBrush brush(brushForToolButton(isKey));
: QColor(0, 0, 0, 21));
QPainterPath path; QPainterPath path;
path.addRoundedRect(QRectF(tb->rect.x(), tb->rect.y(), tb->rect.width(), tb->rect.height() + 4), 4, 4); path.addRoundedRect(QRectF(tb->rect.x(), tb->rect.y(), tb->rect.width(), tb->rect.height() + 4), 4, 4);
p->setRenderHint(QPainter::Antialiasing); p->setRenderHint(QPainter::Antialiasing);

View File

@ -70,7 +70,7 @@ src_winmain.depends = sub-corelib # just for the module .pri file
src_corelib.subdir = $$PWD/corelib src_corelib.subdir = $$PWD/corelib
src_corelib.target = sub-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.subdir = $$PWD/xml
src_xml.target = sub-xml src_xml.target = sub-xml
@ -157,17 +157,12 @@ src_android.subdir = $$PWD/android
src_3rdparty_freetype.depends += src_corelib 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 { qtConfig(regularexpression):pcre2 {
SUBDIRS += src_3rdparty_pcre2 SUBDIRS += src_3rdparty_pcre2
src_corelib.depends += src_3rdparty_pcre2 src_corelib.depends += src_3rdparty_pcre2
} }
TOOLS = src_tools_moc src_tools_rcc src_tools_qlalr TOOLS = src_tools_moc src_tools_rcc src_tools_tracegen src_tools_qlalr
!force_bootstrap:if(qtConfig(lttng)|qtConfig(etw)) {
SUBDIRS += src_tools_tracegen
src_corelib.depends += src_tools_tracegen
TOOLS += src_tools_tracegen
}
SUBDIRS += src_corelib src_tools_qlalr SUBDIRS += src_corelib src_tools_qlalr
win32:SUBDIRS += src_winmain win32:SUBDIRS += src_winmain
qtConfig(network) { qtConfig(network) {

View File

@ -42,6 +42,7 @@
#include <qvector.h> #include <qvector.h>
#include <qstring.h> #include <qstring.h>
#include <qstringlist.h>
#include <qtypeinfo.h> #include <qtypeinfo.h>
struct Tracepoint struct Tracepoint

View File

@ -788,10 +788,12 @@ void QOpenGLWidgetPrivate::initialize()
if (initialized) if (initialized)
return; return;
// Get our toplevel's context with which we will share in order to make the // If no global shared context get our toplevel's context with which we
// texture usable by the underlying window's backingstore. // will share in order to make the texture usable by the underlying window's backingstore.
QWidget *tlw = q->window(); 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. // If shareContext is null, showing content on-screen will not work.
// However, offscreen rendering and grabFramebuffer() will stay fully functional. // However, offscreen rendering and grabFramebuffer() will stay fully functional.

View File

@ -7669,7 +7669,7 @@ void QWidget::show()
else if (defaultState == Qt::WindowMaximized) else if (defaultState == Qt::WindowMaximized)
showMaximized(); showMaximized();
else 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 /*! \internal

View File

@ -88,6 +88,7 @@
#include <private/qstylehelper_p.h> #include <private/qstylehelper_p.h>
#include <private/qdrawhelper_p.h> #include <private/qdrawhelper_p.h>
#include <private/qapplication_p.h> #include <private/qapplication_p.h>
#include <private/qwidget_p.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@ -364,6 +365,11 @@ static void qt_fusion_draw_mdibutton(QPainter *painter, const QStyleOptionTitleB
painter->drawPoint(tmp.right() , tmp.bottom() - 1); 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 \internal
*/ */
@ -995,7 +1001,7 @@ void QFusionStyle::drawPrimitive(PrimitiveElement elem,
d->tabBarcloseButtonIcon = proxy()->standardIcon(SP_DialogCloseButton, option, widget); d->tabBarcloseButtonIcon = proxy()->standardIcon(SP_DialogCloseButton, option, widget);
if ((option->state & State_Enabled) && (option->state & State_MouseOver)) if ((option->state & State_Enabled) && (option->state & State_MouseOver))
proxy()->drawPrimitive(PE_PanelButtonCommand, option, painter, widget); 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); proxy()->drawItemPixmap(painter, option->rect, Qt::AlignCenter, pixmap);
} }
break; break;
@ -1035,7 +1041,7 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
if (!cb->currentIcon.isNull()) { if (!cb->currentIcon.isNull()) {
QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal
: QIcon::Disabled; : QIcon::Disabled;
QPixmap pixmap = cb->currentIcon.pixmap(cb->iconSize, mode); QPixmap pixmap = cb->currentIcon.pixmap(qt_getWindow(widget), cb->iconSize, mode);
QRect iconRect(editRect); QRect iconRect(editRect);
iconRect.setWidth(cb->iconSize.width() + 4); iconRect.setWidth(cb->iconSize.width() + 4);
iconRect = alignedRect(cb->direction, iconRect = alignedRect(cb->direction,
@ -1647,9 +1653,9 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
iconSize = combo->iconSize(); iconSize = combo->iconSize();
#endif #endif
if (checked) if (checked)
pixmap = menuItem->icon.pixmap(iconSize, mode, QIcon::On); pixmap = menuItem->icon.pixmap(qt_getWindow(widget), iconSize, mode, QIcon::On);
else 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 pixw = pixmap.width() / pixmap.devicePixelRatio();
const int pixh = pixmap.height() / 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) if (button->state & State_On)
state = QIcon::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 w = pixmap.width() / pixmap.devicePixelRatio();
int h = pixmap.height() / pixmap.devicePixelRatio(); int h = pixmap.height() / pixmap.devicePixelRatio();

View File

@ -1144,11 +1144,14 @@ void QAbstractScrollArea::paintEvent(QPaintEvent*)
mouse press events for the viewport() widget. The event is passed mouse press events for the viewport() widget. The event is passed
in \a e. in \a e.
The default implementation calls QWidget::mousePressEvent() for
default popup handling.
\sa QWidget::mousePressEvent() \sa QWidget::mousePressEvent()
*/ */
void QAbstractScrollArea::mousePressEvent(QMouseEvent *e) void QAbstractScrollArea::mousePressEvent(QMouseEvent *e)
{ {
e->ignore(); QWidget::mousePressEvent(e);
} }
/*! /*!

View File

@ -389,9 +389,13 @@ bool QGroupBox::event(QEvent *e)
void QGroupBox::childEvent(QChildEvent *c) void QGroupBox::childEvent(QChildEvent *c)
{ {
Q_D(QGroupBox); 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; return;
QWidget *w = (QWidget*)c->child(); QWidget *w = static_cast<QWidget*>(c->child());
if (w->isWindow()) if (w->isWindow())
return; return;
if (d->checkable) { if (d->checkable) {

View File

@ -237,7 +237,7 @@ void QTextEditPrivate::_q_hoveredBlockWithMarkerChanged(const QTextBlock &block)
Qt::CursorShape cursor = cursorToRestoreAfterHover; Qt::CursorShape cursor = cursorToRestoreAfterHover;
if (block.isValid() && !q->isReadOnly()) { if (block.isValid() && !q->isReadOnly()) {
QTextBlockFormat::MarkerType marker = block.blockFormat().marker(); QTextBlockFormat::MarkerType marker = block.blockFormat().marker();
if (marker != QTextBlockFormat::NoMarker) { if (marker != QTextBlockFormat::MarkerType::NoMarker) {
if (viewport->cursor().shape() != Qt::PointingHandCursor) if (viewport->cursor().shape() != Qt::PointingHandCursor)
cursorToRestoreAfterHover = viewport->cursor().shape(); cursorToRestoreAfterHover = viewport->cursor().shape();
cursor = Qt::PointingHandCursor; cursor = Qt::PointingHandCursor;
@ -772,6 +772,7 @@ void QTextEdit::setAlignment(Qt::Alignment a)
QTextCursor cursor = d->control->textCursor(); QTextCursor cursor = d->control->textCursor();
cursor.mergeBlockFormat(fmt); cursor.mergeBlockFormat(fmt);
d->control->setTextCursor(cursor); d->control->setTextCursor(cursor);
d->relayoutDocument();
} }
/*! /*!

View File

@ -1810,11 +1810,11 @@ void QWidgetTextControlPrivate::mouseReleaseEvent(QEvent *e, Qt::MouseButton but
if (markerBlock == blockWithMarkerUnderMouse) { if (markerBlock == blockWithMarkerUnderMouse) {
auto fmt = blockWithMarkerUnderMouse.blockFormat(); auto fmt = blockWithMarkerUnderMouse.blockFormat();
switch (fmt.marker()) { switch (fmt.marker()) {
case QTextBlockFormat::Unchecked : case QTextBlockFormat::MarkerType::Unchecked :
fmt.setMarker(QTextBlockFormat::Checked); fmt.setMarker(QTextBlockFormat::MarkerType::Checked);
break; break;
case QTextBlockFormat::Checked: case QTextBlockFormat::MarkerType::Checked:
fmt.setMarker(QTextBlockFormat::Unchecked); fmt.setMarker(QTextBlockFormat::MarkerType::Unchecked);
break; break;
default: default:
break; break;

View File

@ -360,6 +360,7 @@ void tst_QDateTime::ctor()
void tst_QDateTime::operator_eq() 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 dt1(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::UTC);
QDateTime dt2(QDate(2005, 3, 11), QTime(), Qt::UTC); QDateTime dt2(QDate(2005, 3, 11), QTime(), Qt::UTC);
dt2 = dt1; dt2 = dt1;
@ -1675,29 +1676,30 @@ void tst_QDateTime::currentDateTimeUtc2()
void tst_QDateTime::toSecsSinceEpoch_data() void tst_QDateTime::toSecsSinceEpoch_data()
{ {
QTest::addColumn<QString>("dateTimeStr"); 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( "data1" ) << str( 1800, 1, 1, 12, 0, 0 ) << true;
QTest::newRow( "data2" ) << str( 1969, 1, 1, 12, 0, 0 ) << false; QTest::newRow( "data2" ) << str( 1969, 1, 1, 12, 0, 0 ) << true;
QTest::newRow( "data3" ) << str( 2002, 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( "data4" ) << str( 2002, 6, 1, 12, 0, 0 ) << true;
QTest::newRow( "data5" ) << QString("INVALID") << false; QTest::newRow( "data5" ) << QString("INVALID") << false;
QTest::newRow( "data6" ) << str( 2038, 1, 1, 12, 0, 0 ) << true; 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( "data7" ) << str( 2063, 4, 5, 12, 0, 0 ) << true; // the day of First Contact
QTest::newRow( "data8" ) << str( 2107, 1, 1, 12, 0, 0 ) QTest::newRow( "data8" ) << str( 2107, 1, 1, 12, 0, 0 ) << true;
<< bool( sizeof(uint) > 32 && sizeof(time_t) > 32 );
} }
void tst_QDateTime::toSecsSinceEpoch() void tst_QDateTime::toSecsSinceEpoch()
{ {
QFETCH( QString, dateTimeStr ); QFETCH(const QString, dateTimeStr);
QDateTime datetime = dt( dateTimeStr ); const QDateTime datetime = dt(dateTimeStr);
QFETCH(const bool, valid);
QCOMPARE(datetime.isValid(), valid);
qint64 asSecsSinceEpoch = datetime.toSecsSinceEpoch(); if (valid) {
const qint64 asSecsSinceEpoch = datetime.toSecsSinceEpoch();
QCOMPARE(asSecsSinceEpoch, datetime.toMSecsSinceEpoch() / 1000); QCOMPARE(asSecsSinceEpoch, datetime.toMSecsSinceEpoch() / 1000);
QCOMPARE(QDateTime::fromSecsSinceEpoch(asSecsSinceEpoch), datetime);
QDateTime datetime2 = QDateTime::fromSecsSinceEpoch(asSecsSinceEpoch); }
QCOMPARE(datetime, datetime2);
} }
#if QT_DEPRECATED_SINCE(5, 8) #if QT_DEPRECATED_SINCE(5, 8)
@ -1725,14 +1727,10 @@ void tst_QDateTime::toTime_t()
uint asTime_t = datetime.toTime_t(); uint asTime_t = datetime.toTime_t();
QFETCH( bool, res ); QFETCH( bool, res );
if (res) { if (res) {
QVERIFY( asTime_t != (uint)-1 ); QVERIFY(asTime_t != uint(-1));
QCOMPARE(QDateTime::fromTime_t(asTime_t), datetime);
} else { } else {
QVERIFY( asTime_t == (uint)-1 ); QCOMPARE(asTime_t, uint(-1));
}
if ( asTime_t != (uint) -1 ) {
QDateTime datetime2 = QDateTime::fromTime_t( asTime_t );
QCOMPARE(datetime, datetime2);
} }
} }
#endif #endif
@ -1929,8 +1927,8 @@ void tst_QDateTime::operator_eqeq_data()
QDateTime dateTime1(QDate(2012, 6, 20), QTime(14, 33, 2, 500)); QDateTime dateTime1(QDate(2012, 6, 20), QTime(14, 33, 2, 500));
QDateTime dateTime1a = dateTime1.addMSecs(1); QDateTime dateTime1a = dateTime1.addMSecs(1);
QDateTime dateTime2(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); QDateTime dateTime2(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); // Invalid
QDateTime dateTime2a = dateTime2.addMSecs(-1); QDateTime dateTime2a = dateTime2.addMSecs(-1); // Still invalid
QDateTime dateTime3(QDate(1970, 1, 1), QTime(0, 0, 0, 0), Qt::UTC); // UTC epoch QDateTime dateTime3(QDate(1970, 1, 1), QTime(0, 0, 0, 0), Qt::UTC); // UTC epoch
QDateTime dateTime3a = dateTime3.addDays(1); QDateTime dateTime3a = dateTime3.addDays(1);
QDateTime dateTime3b = 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("data2") << dateTime1a << dateTime1a << true << false;
QTest::newRow("data3") << dateTime1 << dateTime2 << false << false; QTest::newRow("data3") << dateTime1 << dateTime2 << false << false;
QTest::newRow("data4") << dateTime1 << dateTime1a << 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("data6") << dateTime2 << dateTime3 << false << false;
QTest::newRow("data7") << dateTime3 << dateTime3a << false << false; QTest::newRow("data7") << dateTime3 << dateTime3a << false << false;
QTest::newRow("data8") << dateTime3 << dateTime3b << false << false; QTest::newRow("data8") << dateTime3 << dateTime3b << false << false;

View File

@ -404,6 +404,11 @@ void tst_QEasingCurve::valueForProgress()
const qreal error = qAbs(ex - curve.valueForProgress(at.at(i)/qreal(100))); const qreal error = qAbs(ex - curve.valueForProgress(at.at(i)/qreal(100)));
QVERIFY(error <= errorBound); QVERIFY(error <= errorBound);
} }
if (type != QEasingCurve::SineCurve && type != QEasingCurve::CosineCurve) {
QVERIFY( !(curve.valueForProgress(0) > 0) );
QVERIFY( !(curve.valueForProgress(1) < 1) );
}
#endif #endif
} }
@ -632,6 +637,9 @@ void tst_QEasingCurve::bezierSpline()
QCOMPARE(value, ex); QCOMPARE(value, ex);
QVERIFY(error <= errorBound); QVERIFY(error <= errorBound);
} }
QVERIFY( !(bezierEasingCurve.valueForProgress(0) > 0) );
QVERIFY( !(bezierEasingCurve.valueForProgress(1) < 1) );
} }
void tst_QEasingCurve::tcbSpline_data() void tst_QEasingCurve::tcbSpline_data()
@ -691,6 +699,9 @@ void tst_QEasingCurve::tcbSpline()
QCOMPARE(value, ex); QCOMPARE(value, ex);
QVERIFY(error <= errorBound); 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. /*This is single precision code for a cubic root used inside the spline easing curve.

View File

@ -62,6 +62,7 @@ private slots:
#ifndef QT_NO_WIDGETS #ifndef QT_NO_WIDGETS
void infiniteLoop(); void infiniteLoop();
#endif #endif
void emptyMovie();
}; };
// Testing get/set functions // Testing get/set functions
@ -220,5 +221,13 @@ void tst_QMovie::infiniteLoop()
} }
#endif #endif
void tst_QMovie::emptyMovie()
{
QMovie movie;
movie.setCacheMode(QMovie::CacheAll);
movie.jumpToFrame(100);
QCOMPARE(movie.currentFrameNumber(), -1);
}
QTEST_MAIN(tst_QMovie) QTEST_MAIN(tst_QMovie)
#include "tst_qmovie.moc" #include "tst_qmovie.moc"

View File

@ -159,7 +159,7 @@ void tst_QTextMarkdownWriter::testWriteNestedBulletLists()
QTextCursor cursor(document); QTextCursor cursor(document);
QTextBlockFormat blockFmt = cursor.blockFormat(); QTextBlockFormat blockFmt = cursor.blockFormat();
if (checkbox) { if (checkbox) {
blockFmt.setMarker(checked ? QTextBlockFormat::Checked : QTextBlockFormat::Unchecked); blockFmt.setMarker(checked ? QTextBlockFormat::MarkerType::Checked : QTextBlockFormat::MarkerType::Unchecked);
cursor.setBlockFormat(blockFmt); cursor.setBlockFormat(blockFmt);
} }

View File

@ -295,6 +295,12 @@ void tst_QGroupBox::enabledChildPropagation()
QVERIFY(!childWidget->isEnabled()); QVERIFY(!childWidget->isEnabled());
dialog = new QDialog(&testWidget); dialog = new QDialog(&testWidget);
QVERIFY(dialog->isEnabled()); 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() void tst_QGroupBox::sizeHint()