diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-09-19 21:54:52 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-09-19 21:54:53 +0200 |
commit | 15dc8b1d8e2db00dfcbe8d7f21150658f5de45b6 (patch) | |
tree | 6b9c908ca1cf0b1395fa91415f19b5adf8642ca7 | |
parent | ecc83677006dc7dffcd2417b1e3cff88b0615756 (diff) | |
parent | 6234286925153279ca259cec04429fa584187b16 (diff) |
Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: I46ec05ade1c84e61f7f45562a218aa9ff55e2975
80 files changed, 1456 insertions, 1344 deletions
diff --git a/configure.json b/configure.json index 13cca852f6..5ee27fec62 100644 --- a/configure.json +++ b/configure.json @@ -766,7 +766,7 @@ "debug_and_release": { "label": "Compile libs in debug and release mode", "autoDetect": "input.debug == ''", - "condition": "config.darwin || config.win32", + "condition": "config.darwin || (config.win32 && !config.gcc)", "output": [ "publicFeature", "publicQtConfig", "debugAndRelease" ] }, "force_debug_info": { diff --git a/examples/widgets/doc/src/calculator.qdoc b/examples/widgets/doc/src/calculator.qdoc index e8f8030207..7d34a86c19 100644 --- a/examples/widgets/doc/src/calculator.qdoc +++ b/examples/widgets/doc/src/calculator.qdoc @@ -142,6 +142,9 @@ pendingAdditiveOperator and \c pendingMultiplicativeOperator variables don't need to be initialized explicitly, because the QString constructor initializes them to empty strings. + It is also possible to initialize those variable directly in the + header. This is called \c member-initializaton and avoids a long + initialization list. \snippet widgets/calculator/calculator.cpp 1 \snippet widgets/calculator/calculator.cpp 2 diff --git a/examples/widgets/doc/src/tooltips.qdoc b/examples/widgets/doc/src/tooltips.qdoc index a278215503..35e3b1e29f 100644 --- a/examples/widgets/doc/src/tooltips.qdoc +++ b/examples/widgets/doc/src/tooltips.qdoc @@ -95,7 +95,7 @@ \snippet widgets/tooltips/sortingbox.h 2 - We keep all the shape items in a QList, and we keep three + We keep all the shape items in a QVector, and we keep three QPainterPath objects holding the shapes of a circle, a square and a triangle. We also need to have a pointer to an item when it is moving, and we need to know its previous position. diff --git a/examples/widgets/widgets/analogclock/analogclock.cpp b/examples/widgets/widgets/analogclock/analogclock.cpp index c7b3f66cca..06e298659d 100644 --- a/examples/widgets/widgets/analogclock/analogclock.cpp +++ b/examples/widgets/widgets/analogclock/analogclock.cpp @@ -50,7 +50,9 @@ #include "analogclock.h" -#include <QtWidgets> +#include <QPainter> +#include <QTime> +#include <QTimer> //! [0] //! [1] AnalogClock::AnalogClock(QWidget *parent) diff --git a/examples/widgets/widgets/calculator/button.cpp b/examples/widgets/widgets/calculator/button.cpp index a1ce0bf428..cc370a563c 100644 --- a/examples/widgets/widgets/calculator/button.cpp +++ b/examples/widgets/widgets/calculator/button.cpp @@ -50,8 +50,6 @@ #include "button.h" -#include <QtWidgets> - //! [0] Button::Button(const QString &text, QWidget *parent) : QToolButton(parent) diff --git a/examples/widgets/widgets/calculator/calculator.cpp b/examples/widgets/widgets/calculator/calculator.cpp index dd908cf40a..2c3669b7a8 100644 --- a/examples/widgets/widgets/calculator/calculator.cpp +++ b/examples/widgets/widgets/calculator/calculator.cpp @@ -48,21 +48,18 @@ ** ****************************************************************************/ -#include "button.h" #include "calculator.h" +#include "button.h" -#include <QtWidgets> - -#include <cmath> +#include <QGridLayout> +#include <QLineEdit> +#include <QtMath> //! [0] Calculator::Calculator(QWidget *parent) - : QWidget(parent) + : QWidget(parent), sumInMemory(0.0), sumSoFar(0.0) + , factorSoFar(0.0), waitingForOperand(true) { - sumInMemory = 0.0; - sumSoFar = 0.0; - factorSoFar = 0.0; - waitingForOperand = true; //! [0] //! [1] @@ -78,9 +75,8 @@ Calculator::Calculator(QWidget *parent) //! [2] //! [4] - for (int i = 0; i < NumDigitButtons; ++i) { + for (int i = 0; i < NumDigitButtons; ++i) digitButtons[i] = createButton(QString::number(i), SLOT(digitClicked())); - } Button *pointButton = createButton(tr("."), SLOT(pointClicked())); Button *changeSignButton = createButton(tr("\302\261"), SLOT(changeSignClicked())); @@ -194,6 +190,8 @@ void Calculator::additiveOperatorClicked() //! [10] //! [11] { Button *clickedButton = qobject_cast<Button *>(sender()); + if (!clickedButton) + return; QString clickedOperator = clickedButton->text(); double operand = display->text().toDouble(); @@ -233,6 +231,8 @@ void Calculator::additiveOperatorClicked() void Calculator::multiplicativeOperatorClicked() { Button *clickedButton = qobject_cast<Button *>(sender()); + if (!clickedButton) + return; QString clickedOperator = clickedButton->text(); double operand = display->text().toDouble(); diff --git a/examples/widgets/widgets/calendarwidget/main.cpp b/examples/widgets/widgets/calendarwidget/main.cpp index 2622669f32..2582e83841 100644 --- a/examples/widgets/widgets/calendarwidget/main.cpp +++ b/examples/widgets/widgets/calendarwidget/main.cpp @@ -48,7 +48,7 @@ ** ****************************************************************************/ -#include <QtWidgets> +#include <QApplication> #include "window.h" diff --git a/examples/widgets/widgets/calendarwidget/window.cpp b/examples/widgets/widgets/calendarwidget/window.cpp index 64047aaac9..b8a3d03552 100644 --- a/examples/widgets/widgets/calendarwidget/window.cpp +++ b/examples/widgets/widgets/calendarwidget/window.cpp @@ -48,10 +48,18 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "window.h" +#include <QCalendarWidget> +#include <QCheckBox> +#include <QComboBox> +#include <QDateEdit> +#include <QGridLayout> +#include <QGroupBox> +#include <QLabel> +#include <QLocale> +#include <QTextCharFormat> + //! [0] Window::Window(QWidget *parent) : QWidget(parent) @@ -166,13 +174,12 @@ void Window::reformatHeaders() QString text = headerTextFormatCombo->currentText(); QTextCharFormat format; - if (text == tr("Bold")) { + if (text == tr("Bold")) format.setFontWeight(QFont::Bold); - } else if (text == tr("Italic")) { + else if (text == tr("Italic")) format.setFontItalic(true); - } else if (text == tr("Green")) { + else if (text == tr("Green")) format.setForeground(Qt::green); - } calendar->setHeaderTextFormat(format); } //! [7] diff --git a/examples/widgets/widgets/charactermap/characterwidget.cpp b/examples/widgets/widgets/charactermap/characterwidget.cpp index 061c0164b0..41406b7fb4 100644 --- a/examples/widgets/widgets/charactermap/characterwidget.cpp +++ b/examples/widgets/widgets/charactermap/characterwidget.cpp @@ -50,11 +50,14 @@ #include "characterwidget.h" -#include <QtWidgets> +#include <QFontDatabase> +#include <QMouseEvent> +#include <QPainter> +#include <QToolTip> //! [0] CharacterWidget::CharacterWidget(QWidget *parent) - : QWidget(parent), columns(16), lastKey(-1) + : QWidget(parent) { calculateSquareSize(); setMouseTracking(true); @@ -110,7 +113,7 @@ void CharacterWidget::calculateSquareSize() //! [3] QSize CharacterWidget::sizeHint() const { - return QSize(columns*squareSize, (65536/columns)*squareSize); + return QSize(columns*squareSize, (65536 / columns) * squareSize); } //! [3] @@ -118,7 +121,7 @@ QSize CharacterWidget::sizeHint() const void CharacterWidget::mouseMoveEvent(QMouseEvent *event) { QPoint widgetPosition = mapFromGlobal(event->globalPos()); - uint key = (widgetPosition.y()/squareSize)*columns + widgetPosition.x()/squareSize; + uint key = (widgetPosition.y() / squareSize) * columns + widgetPosition.x() / squareSize; QString text = QString::fromLatin1("<p>Character: <span style=\"font-size: 24pt; font-family: %1\">").arg(displayFont.family()) + QChar(key) @@ -132,7 +135,7 @@ void CharacterWidget::mouseMoveEvent(QMouseEvent *event) void CharacterWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { - lastKey = (event->y()/squareSize)*columns + event->x()/squareSize; + lastKey = (event->y() / squareSize) * columns + event->x() / squareSize; if (QChar(lastKey).category() != QChar::Other_NotAssigned) emit characterSelected(QString(QChar(lastKey))); update(); @@ -152,17 +155,17 @@ void CharacterWidget::paintEvent(QPaintEvent *event) //! [7] QRect redrawRect = event->rect(); - int beginRow = redrawRect.top()/squareSize; - int endRow = redrawRect.bottom()/squareSize; - int beginColumn = redrawRect.left()/squareSize; - int endColumn = redrawRect.right()/squareSize; + int beginRow = redrawRect.top() / squareSize; + int endRow = redrawRect.bottom() / squareSize; + int beginColumn = redrawRect.left() / squareSize; + int endColumn = redrawRect.right() / squareSize; //! [7] //! [8] painter.setPen(QPen(Qt::gray)); for (int row = beginRow; row <= endRow; ++row) { for (int column = beginColumn; column <= endColumn; ++column) { - painter.drawRect(column*squareSize, row*squareSize, squareSize, squareSize); + painter.drawRect(column * squareSize, row * squareSize, squareSize, squareSize); } //! [8] //! [9] } @@ -172,17 +175,17 @@ void CharacterWidget::paintEvent(QPaintEvent *event) QFontMetrics fontMetrics(displayFont); painter.setPen(QPen(Qt::black)); for (int row = beginRow; row <= endRow; ++row) { - for (int column = beginColumn; column <= endColumn; ++column) { - - int key = row*columns + column; - painter.setClipRect(column*squareSize, row*squareSize, squareSize, squareSize); + int key = row * columns + column; + painter.setClipRect(column * squareSize, row * squareSize, squareSize, squareSize); if (key == lastKey) - painter.fillRect(column*squareSize + 1, row*squareSize + 1, squareSize, squareSize, QBrush(Qt::red)); + painter.fillRect(column * squareSize + 1, row * squareSize + 1, + squareSize, squareSize, QBrush(Qt::red)); - painter.drawText(column*squareSize + (squareSize / 2) - fontMetrics.horizontalAdvance(QChar(key))/2, - row*squareSize + 4 + fontMetrics.ascent(), + painter.drawText(column * squareSize + (squareSize / 2) - + fontMetrics.horizontalAdvance(QChar(key)) / 2, + row * squareSize + 4 + fontMetrics.ascent(), QString(QChar(key))); } } diff --git a/examples/widgets/widgets/charactermap/characterwidget.h b/examples/widgets/widgets/charactermap/characterwidget.h index d12a46aa15..67ac8a30bf 100644 --- a/examples/widgets/widgets/charactermap/characterwidget.h +++ b/examples/widgets/widgets/charactermap/characterwidget.h @@ -88,9 +88,9 @@ private: void calculateSquareSize(); QFont displayFont; - int columns; - int lastKey; - int squareSize; + int columns = 16; + int lastKey = -1; + int squareSize = 0; }; //! [0] diff --git a/examples/widgets/widgets/charactermap/mainwindow.cpp b/examples/widgets/widgets/charactermap/mainwindow.cpp index 77aad145e7..25c4503ddb 100644 --- a/examples/widgets/widgets/charactermap/mainwindow.cpp +++ b/examples/widgets/widgets/charactermap/mainwindow.cpp @@ -48,13 +48,27 @@ ** ****************************************************************************/ -#include <QtWidgets> - -#include "characterwidget.h" #include "mainwindow.h" +#include "characterwidget.h" -//! [0] +#include <QApplication> +#include <QBoxLayout> +#include <QCheckBox> +#include <QClipboard> +#include <QDesktopWidget> +#include <QDialog> +#include <QDialogButtonBox> +#include <QFontComboBox> +#include <QLabel> +#include <QLineEdit> +#include <QMenuBar> +#include <QPlainTextEdit> +#include <QPushButton> +#include <QScrollArea> +#include <QStatusBar> +#include <QTextStream> +//! [0] Q_DECLARE_METATYPE(QFontComboBox::FontFilter) MainWindow::MainWindow(QWidget *parent) diff --git a/examples/widgets/widgets/codeeditor/codeeditor.cpp b/examples/widgets/widgets/codeeditor/codeeditor.cpp index 8e29860669..e93a0251e5 100644 --- a/examples/widgets/widgets/codeeditor/codeeditor.cpp +++ b/examples/widgets/widgets/codeeditor/codeeditor.cpp @@ -48,10 +48,11 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "codeeditor.h" +#include <QPainter> +#include <QTextBlock> + //![constructor] CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent) @@ -157,8 +158,8 @@ void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) //![extraAreaPaintEvent_1] QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); - int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); - int bottom = top + (int) blockBoundingRect(block).height(); + int top = qRound(blockBoundingGeometry(block).translated(contentOffset()).top()); + int bottom = top + qRound(blockBoundingRect(block).height()); //![extraAreaPaintEvent_1] //![extraAreaPaintEvent_2] @@ -172,7 +173,7 @@ void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) block = block.next(); top = bottom; - bottom = top + (int) blockBoundingRect(block).height(); + bottom = top + qRound(blockBoundingRect(block).height()); ++blockNumber; } } diff --git a/examples/widgets/widgets/codeeditor/codeeditor.h b/examples/widgets/widgets/codeeditor/codeeditor.h index 5a48abafc4..283a4e0bdf 100644 --- a/examples/widgets/widgets/codeeditor/codeeditor.h +++ b/examples/widgets/widgets/codeeditor/codeeditor.h @@ -80,7 +80,7 @@ protected: private slots: void updateLineNumberAreaWidth(int newBlockCount); void highlightCurrentLine(); - void updateLineNumberArea(const QRect &, int); + void updateLineNumberArea(const QRect &rect, int dy); private: QWidget *lineNumberArea; @@ -92,16 +92,17 @@ private: class LineNumberArea : public QWidget { public: - LineNumberArea(CodeEditor *editor) : QWidget(editor) { - codeEditor = editor; - } + LineNumberArea(CodeEditor *editor) : QWidget(editor), codeEditor(editor) + {} - QSize sizeHint() const override { + QSize sizeHint() const override + { return QSize(codeEditor->lineNumberAreaWidth(), 0); } protected: - void paintEvent(QPaintEvent *event) override { + void paintEvent(QPaintEvent *event) override + { codeEditor->lineNumberAreaPaintEvent(event); } diff --git a/examples/widgets/widgets/codeeditor/main.cpp b/examples/widgets/widgets/codeeditor/main.cpp index e17acb87cd..72d186553a 100644 --- a/examples/widgets/widgets/codeeditor/main.cpp +++ b/examples/widgets/widgets/codeeditor/main.cpp @@ -48,7 +48,7 @@ ** ****************************************************************************/ -#include <QtWidgets> +#include <QApplication> #include "codeeditor.h" diff --git a/examples/widgets/widgets/digitalclock/digitalclock.cpp b/examples/widgets/widgets/digitalclock/digitalclock.cpp index 000334f33b..2b130ecda6 100644 --- a/examples/widgets/widgets/digitalclock/digitalclock.cpp +++ b/examples/widgets/widgets/digitalclock/digitalclock.cpp @@ -50,7 +50,8 @@ #include "digitalclock.h" -#include <QtWidgets> +#include <QTime> +#include <QTimer> //! [0] DigitalClock::DigitalClock(QWidget *parent) diff --git a/examples/widgets/widgets/groupbox/window.cpp b/examples/widgets/widgets/groupbox/window.cpp index 230d360372..95c4f216fe 100644 --- a/examples/widgets/widgets/groupbox/window.cpp +++ b/examples/widgets/widgets/groupbox/window.cpp @@ -48,10 +48,15 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "window.h" +#include <QCheckBox> +#include <QGridLayout> +#include <QGroupBox> +#include <QMenu> +#include <QPushButton> +#include <QRadioButton> + //! [0] Window::Window(QWidget *parent) : QWidget(parent) diff --git a/examples/widgets/widgets/icons/iconpreviewarea.cpp b/examples/widgets/widgets/icons/iconpreviewarea.cpp index 7a73a137cd..96cb6f008e 100644 --- a/examples/widgets/widgets/icons/iconpreviewarea.cpp +++ b/examples/widgets/widgets/icons/iconpreviewarea.cpp @@ -50,7 +50,8 @@ #include "iconpreviewarea.h" -#include <QtWidgets> +#include <QGridLayout> +#include <QLabel> //! [0] IconPreviewArea::IconPreviewArea(QWidget *parent) diff --git a/examples/widgets/widgets/icons/iconsizespinbox.cpp b/examples/widgets/widgets/icons/iconsizespinbox.cpp index e94d943993..8e6c654686 100644 --- a/examples/widgets/widgets/icons/iconsizespinbox.cpp +++ b/examples/widgets/widgets/icons/iconsizespinbox.cpp @@ -50,7 +50,7 @@ #include "iconsizespinbox.h" -#include <QtWidgets> +#include <QRegularExpression> //! [0] IconSizeSpinBox::IconSizeSpinBox(QWidget *parent) diff --git a/examples/widgets/widgets/icons/imagedelegate.cpp b/examples/widgets/widgets/icons/imagedelegate.cpp index 786194bae7..39c2e43134 100644 --- a/examples/widgets/widgets/icons/imagedelegate.cpp +++ b/examples/widgets/widgets/icons/imagedelegate.cpp @@ -51,7 +51,7 @@ #include "imagedelegate.h" #include "iconpreviewarea.h" -#include <QtWidgets> +#include <QComboBox> //! [0] ImageDelegate::ImageDelegate(QObject *parent) diff --git a/examples/widgets/widgets/icons/mainwindow.cpp b/examples/widgets/widgets/icons/mainwindow.cpp index 91e98ff896..f342c18c4c 100644 --- a/examples/widgets/widgets/icons/mainwindow.cpp +++ b/examples/widgets/widgets/icons/mainwindow.cpp @@ -48,14 +48,29 @@ ** ****************************************************************************/ -#include <QtWidgets> - +#include "mainwindow.h" #include "iconpreviewarea.h" #include "iconsizespinbox.h" #include "imagedelegate.h" -#include "mainwindow.h" -#include <memory> +#include <QApplication> +#include <QButtonGroup> +#include <QCheckBox> +#include <QFileDialog> +#include <QHeaderView> +#include <QFormLayout> +#include <QGridLayout> +#include <QGroupBox> +#include <QImageReader> +#include <QLabel> +#include <QMenuBar> +#include <QMessageBox> +#include <QRadioButton> +#include <QScreen> +#include <QStandardPaths> +#include <QStyleFactory> +#include <QTableWidget> +#include <QWindow> //! [40] enum { OtherSize = QStyle::PM_CustomBase }; diff --git a/examples/widgets/widgets/imageviewer/imageviewer.cpp b/examples/widgets/widgets/imageviewer/imageviewer.cpp index 2fc8ff63de..83cf8bb7bc 100644 --- a/examples/widgets/widgets/imageviewer/imageviewer.cpp +++ b/examples/widgets/widgets/imageviewer/imageviewer.cpp @@ -50,7 +50,24 @@ #include "imageviewer.h" -#include <QtWidgets> +#include <QApplication> +#include <QClipboard> +#include <QColorSpace> +#include <QDir> +#include <QFileDialog> +#include <QImageReader> +#include <QImageWriter> +#include <QLabel> +#include <QMenuBar> +#include <QMessageBox> +#include <QMimeData> +#include <QPainter> +#include <QScreen> +#include <QScrollArea> +#include <QScrollBar> +#include <QStandardPaths> +#include <QStatusBar> + #if defined(QT_PRINTSUPPORT_LIB) #include <QtPrintSupport/qtprintsupportglobal.h> #if QT_CONFIG(printdialog) @@ -60,8 +77,8 @@ //! [0] ImageViewer::ImageViewer(QWidget *parent) - : QMainWindow(parent), imageLabel(new QLabel), - scrollArea(new QScrollArea), scaleFactor(1) + : QMainWindow(parent), imageLabel(new QLabel) + , scrollArea(new QScrollArea) { imageLabel->setBackgroundRole(QPalette::Base); imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); diff --git a/examples/widgets/widgets/imageviewer/imageviewer.h b/examples/widgets/widgets/imageviewer/imageviewer.h index 7e53105b33..49c7ac205b 100644 --- a/examples/widgets/widgets/imageviewer/imageviewer.h +++ b/examples/widgets/widgets/imageviewer/imageviewer.h @@ -98,7 +98,7 @@ private: QImage image; QLabel *imageLabel; QScrollArea *scrollArea; - double scaleFactor; + double scaleFactor = 1; #ifndef QT_NO_PRINTER QPrinter printer; diff --git a/examples/widgets/widgets/lineedits/window.cpp b/examples/widgets/widgets/lineedits/window.cpp index 33f09d544d..bb9396411a 100644 --- a/examples/widgets/widgets/lineedits/window.cpp +++ b/examples/widgets/widgets/lineedits/window.cpp @@ -48,10 +48,14 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "window.h" +#include <QComboBox> +#include <QGridLayout> +#include <QGroupBox> +#include <QLabel> +#include <QLineEdit> + //! [0] Window::Window(QWidget *parent) : QWidget(parent) @@ -197,6 +201,7 @@ void Window::echoChanged(int index) break; case 3: echoLineEdit->setEchoMode(QLineEdit::NoEcho); + break; } } //! [9] @@ -215,6 +220,7 @@ void Window::validatorChanged(int index) case 2: validatorLineEdit->setValidator(new QDoubleValidator(-999.0, 999.0, 2, validatorLineEdit)); + break; } validatorLineEdit->clear(); @@ -233,6 +239,7 @@ void Window::alignmentChanged(int index) break; case 2: alignmentLineEdit->setAlignment(Qt::AlignRight); + break; } } //! [11] @@ -254,6 +261,7 @@ void Window::inputMaskChanged(int index) break; case 3: inputMaskLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#"); + break; } } //! [12] @@ -267,6 +275,7 @@ void Window::accessChanged(int index) break; case 1: accessLineEdit->setReadOnly(true); + break; } } //! [13] diff --git a/examples/widgets/widgets/movie/movieplayer.cpp b/examples/widgets/widgets/movie/movieplayer.cpp index 182b258a82..41cd7923ee 100644 --- a/examples/widgets/widgets/movie/movieplayer.cpp +++ b/examples/widgets/widgets/movie/movieplayer.cpp @@ -50,7 +50,15 @@ #include "movieplayer.h" -#include <QtWidgets> +#include <QCheckBox> +#include <QFileDialog> +#include <QLabel> +#include <QMovie> +#include <QSlider> +#include <QSpinBox> +#include <QStyle> +#include <QToolButton> +#include <QVBoxLayout> MoviePlayer::MoviePlayer(QWidget *parent) : QWidget(parent) diff --git a/examples/widgets/widgets/scribble/mainwindow.cpp b/examples/widgets/widgets/scribble/mainwindow.cpp index 44afa64b94..db4f8d3637 100644 --- a/examples/widgets/widgets/scribble/mainwindow.cpp +++ b/examples/widgets/widgets/scribble/mainwindow.cpp @@ -48,11 +48,17 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "mainwindow.h" #include "scribblearea.h" +#include <QApplication> +#include <QColorDialog> +#include <QFileDialog> +#include <QImageWriter> +#include <QInputDialog> +#include <QMenuBar> +#include <QMessageBox> + //! [0] MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), scribbleArea(new ScribbleArea(this)) @@ -71,11 +77,10 @@ MainWindow::MainWindow(QWidget *parent) void MainWindow::closeEvent(QCloseEvent *event) //! [1] //! [2] { - if (maybeSave()) { + if (maybeSave()) event->accept(); - } else { + else event->ignore(); - } } //! [2] @@ -231,11 +236,10 @@ bool MainWindow::maybeSave() "Do you want to save your changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); - if (ret == QMessageBox::Save) { + if (ret == QMessageBox::Save) return saveFile("png"); - } else if (ret == QMessageBox::Cancel) { + else if (ret == QMessageBox::Cancel) return false; - } } return true; } @@ -252,10 +256,8 @@ bool MainWindow::saveFile(const QByteArray &fileFormat) tr("%1 Files (*.%2);;All Files (*)") .arg(QString::fromLatin1(fileFormat.toUpper())) .arg(QString::fromLatin1(fileFormat))); - if (fileName.isEmpty()) { + if (fileName.isEmpty()) return false; - } else { - return scribbleArea->saveImage(fileName, fileFormat.constData()); - } + return scribbleArea->saveImage(fileName, fileFormat.constData()); } //! [20] diff --git a/examples/widgets/widgets/scribble/scribblearea.cpp b/examples/widgets/widgets/scribble/scribblearea.cpp index 13e46f6e1d..75371b523f 100644 --- a/examples/widgets/widgets/scribble/scribblearea.cpp +++ b/examples/widgets/widgets/scribble/scribblearea.cpp @@ -50,7 +50,9 @@ #include "scribblearea.h" -#include <QtWidgets> +#include <QMouseEvent> +#include <QPainter> + #if defined(QT_PRINTSUPPORT_LIB) #include <QtPrintSupport/qtprintsupportglobal.h> #if QT_CONFIG(printdialog) @@ -64,10 +66,6 @@ ScribbleArea::ScribbleArea(QWidget *parent) : QWidget(parent) { setAttribute(Qt::WA_StaticContents); - modified = false; - scribbling = false; - myPenWidth = 1; - myPenColor = Qt::blue; } //! [0] @@ -98,9 +96,8 @@ bool ScribbleArea::saveImage(const QString &fileName, const char *fileFormat) if (visibleImage.save(fileName, fileFormat)) { modified = false; return true; - } else { - return false; } + return false; } //! [4] diff --git a/examples/widgets/widgets/scribble/scribblearea.h b/examples/widgets/widgets/scribble/scribblearea.h index 100c45e133..ed3c8a2a15 100644 --- a/examples/widgets/widgets/scribble/scribblearea.h +++ b/examples/widgets/widgets/scribble/scribblearea.h @@ -88,10 +88,10 @@ private: void drawLineTo(const QPoint &endPoint); void resizeImage(QImage *image, const QSize &newSize); - bool modified; - bool scribbling; - int myPenWidth; - QColor myPenColor; + bool modified = false; + bool scribbling = false; + int myPenWidth = 1; + QColor myPenColor = Qt::blue; QImage image; QPoint lastPoint; }; diff --git a/examples/widgets/widgets/shapedclock/shapedclock.cpp b/examples/widgets/widgets/shapedclock/shapedclock.cpp index 8e7d831938..3c78f4da89 100644 --- a/examples/widgets/widgets/shapedclock/shapedclock.cpp +++ b/examples/widgets/widgets/shapedclock/shapedclock.cpp @@ -48,10 +48,15 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "shapedclock.h" +#include <QAction> +#include <QCoreApplication> +#include <QMouseEvent> +#include <QPainter> +#include <QTime> +#include <QTimer> + //! [0] ShapedClock::ShapedClock(QWidget *parent) : QWidget(parent, Qt::FramelessWindowHint | Qt::WindowSystemMenuHint) diff --git a/examples/widgets/widgets/sliders/slidersgroup.cpp b/examples/widgets/widgets/sliders/slidersgroup.cpp index b4eaf9bb3d..912c9798ce 100644 --- a/examples/widgets/widgets/sliders/slidersgroup.cpp +++ b/examples/widgets/widgets/sliders/slidersgroup.cpp @@ -50,7 +50,10 @@ #include "slidersgroup.h" -#include <QtWidgets> +#include <QBoxLayout> +#include <QDial> +#include <QScrollBar> +#include <QSlider> //! [0] SlidersGroup::SlidersGroup(Qt::Orientation orientation, const QString &title, diff --git a/examples/widgets/widgets/sliders/window.cpp b/examples/widgets/widgets/sliders/window.cpp index d73fafec10..4a28a61f3d 100644 --- a/examples/widgets/widgets/sliders/window.cpp +++ b/examples/widgets/widgets/sliders/window.cpp @@ -48,11 +48,16 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "slidersgroup.h" #include "window.h" +#include <QCheckBox> +#include <QComboBox> +#include <QHBoxLayout> +#include <QLabel> +#include <QSpinBox> +#include <QStackedWidget> + //! [0] Window::Window(QWidget *parent) : QWidget(parent) diff --git a/examples/widgets/widgets/spinboxes/window.cpp b/examples/widgets/widgets/spinboxes/window.cpp index 82e19527a7..40c02aba70 100644 --- a/examples/widgets/widgets/spinboxes/window.cpp +++ b/examples/widgets/widgets/spinboxes/window.cpp @@ -48,10 +48,16 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "window.h" +#include <QCheckBox> +#include <QComboBox> +#include <QDateTimeEdit> +#include <QGroupBox> +#include <QHBoxLayout> +#include <QLabel> +#include <QSpinBox> + //! [0] Window::Window(QWidget *parent) : QWidget(parent) diff --git a/examples/widgets/widgets/styles/norwegianwoodstyle.cpp b/examples/widgets/widgets/styles/norwegianwoodstyle.cpp index a178769bd8..0f614a2e9a 100644 --- a/examples/widgets/widgets/styles/norwegianwoodstyle.cpp +++ b/examples/widgets/widgets/styles/norwegianwoodstyle.cpp @@ -50,7 +50,10 @@ #include "norwegianwoodstyle.h" -#include <QtWidgets> +#include <QComboBox> +#include <QPainter> +#include <QPushButton> +#include <QStyleFactory> NorwegianWoodStyle::NorwegianWoodStyle() : QProxyStyle(QStyleFactory::create("windows")) diff --git a/examples/widgets/widgets/styles/widgetgallery.cpp b/examples/widgets/widgets/styles/widgetgallery.cpp index 34c010df74..fd8f0ec2d1 100644 --- a/examples/widgets/widgets/styles/widgetgallery.cpp +++ b/examples/widgets/widgets/styles/widgetgallery.cpp @@ -51,7 +51,24 @@ #include "widgetgallery.h" #include "norwegianwoodstyle.h" -#include <QtWidgets> +#include <QApplication> +#include <QCheckBox> +#include <QComboBox> +#include <QDateTimeEdit> +#include <QDial> +#include <QGridLayout> +#include <QGroupBox> +#include <QLabel> +#include <QLineEdit> +#include <QProgressBar> +#include <QPushButton> +#include <QRadioButton> +#include <QScrollBar> +#include <QSpinBox> +#include <QStyleFactory> +#include <QTableWidget> +#include <QTextEdit> +#include <QTimer> //! [0] WidgetGallery::WidgetGallery(QWidget *parent) diff --git a/examples/widgets/widgets/stylesheet/main.cpp b/examples/widgets/widgets/stylesheet/main.cpp index 1874bceb8c..3b1168398a 100644 --- a/examples/widgets/widgets/stylesheet/main.cpp +++ b/examples/widgets/widgets/stylesheet/main.cpp @@ -48,7 +48,7 @@ ** ****************************************************************************/ -#include <QtWidgets> +#include <QApplication> #include "mainwindow.h" diff --git a/examples/widgets/widgets/stylesheet/mainwindow.cpp b/examples/widgets/widgets/stylesheet/mainwindow.cpp index f187c007dd..a8bd20e964 100644 --- a/examples/widgets/widgets/stylesheet/mainwindow.cpp +++ b/examples/widgets/widgets/stylesheet/mainwindow.cpp @@ -48,11 +48,11 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "mainwindow.h" #include "stylesheeteditor.h" +#include <QMessageBox> + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { diff --git a/examples/widgets/widgets/stylesheet/mainwindow.h b/examples/widgets/widgets/stylesheet/mainwindow.h index 8af4c01da0..ba979a3881 100644 --- a/examples/widgets/widgets/stylesheet/mainwindow.h +++ b/examples/widgets/widgets/stylesheet/mainwindow.h @@ -51,7 +51,7 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include <QtWidgets> +#include <QMainWindow> #include "ui_mainwindow.h" diff --git a/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp b/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp index 0874cc3554..2cc0e969e2 100644 --- a/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp +++ b/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp @@ -50,7 +50,9 @@ #include "stylesheeteditor.h" -#include <QtWidgets> +#include <QFile> +#include <QRegularExpression> +#include <QStyleFactory> StyleSheetEditor::StyleSheetEditor(QWidget *parent) : QDialog(parent) diff --git a/examples/widgets/widgets/tablet/main.cpp b/examples/widgets/widgets/tablet/main.cpp index 5726e79166..0fec526de0 100644 --- a/examples/widgets/widgets/tablet/main.cpp +++ b/examples/widgets/widgets/tablet/main.cpp @@ -48,8 +48,6 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "mainwindow.h" #include "tabletapplication.h" #include "tabletcanvas.h" diff --git a/examples/widgets/widgets/tablet/mainwindow.cpp b/examples/widgets/widgets/tablet/mainwindow.cpp index a048119533..8bcb9ada63 100644 --- a/examples/widgets/widgets/tablet/mainwindow.cpp +++ b/examples/widgets/widgets/tablet/mainwindow.cpp @@ -48,14 +48,19 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "mainwindow.h" #include "tabletcanvas.h" +#include <QApplication> +#include <QColorDialog> +#include <QDir> +#include <QFileDialog> +#include <QMenuBar> +#include <QMessageBox> + //! [0] MainWindow::MainWindow(TabletCanvas *canvas) - : m_canvas(canvas), m_colorDialog(nullptr) + : m_canvas(canvas) { createMenus(); setWindowTitle(tr("Tablet Example")); diff --git a/examples/widgets/widgets/tablet/mainwindow.h b/examples/widgets/widgets/tablet/mainwindow.h index 4be28784b5..3ea9af7ccf 100644 --- a/examples/widgets/widgets/tablet/mainwindow.h +++ b/examples/widgets/widgets/tablet/mainwindow.h @@ -81,7 +81,7 @@ private: void createMenus(); TabletCanvas *m_canvas; - QColorDialog *m_colorDialog; + QColorDialog *m_colorDialog = nullptr; }; //! [0] diff --git a/examples/widgets/widgets/tablet/tabletapplication.cpp b/examples/widgets/widgets/tablet/tabletapplication.cpp index 37be018276..a27491a86c 100644 --- a/examples/widgets/widgets/tablet/tabletapplication.cpp +++ b/examples/widgets/widgets/tablet/tabletapplication.cpp @@ -50,8 +50,6 @@ #include "tabletapplication.h" -#include <QtWidgets> - //! [0] bool TabletApplication::event(QEvent *event) { diff --git a/examples/widgets/widgets/tablet/tabletcanvas.cpp b/examples/widgets/widgets/tablet/tabletcanvas.cpp index dc56702142..9a8029486d 100644 --- a/examples/widgets/widgets/tablet/tabletcanvas.cpp +++ b/examples/widgets/widgets/tablet/tabletcanvas.cpp @@ -48,21 +48,16 @@ ** ****************************************************************************/ -#include <QtWidgets> -#include <math.h> - #include "tabletcanvas.h" +#include <QCoreApplication> +#include <QPainter> +#include <QtMath> + //! [0] TabletCanvas::TabletCanvas() - : QWidget(nullptr) - , m_alphaChannelValuator(TangentialPressureValuator) - , m_colorSaturationValuator(NoValuator) - , m_lineWidthValuator(PressureValuator) - , m_color(Qt::red) - , m_brush(m_color) - , m_pen(m_brush, 1.0, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin) - , m_deviceDown(false) + : QWidget(nullptr), m_brush(m_color) + , m_pen(m_brush, 1.0, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin) { resize(500, 500); setAutoFillBackground(true); @@ -138,7 +133,7 @@ void TabletCanvas::tabletEvent(QTabletEvent *event) void TabletCanvas::initPixmap() { qreal dpr = devicePixelRatioF(); - QPixmap newPixmap = QPixmap(width() * dpr, height() * dpr); + QPixmap newPixmap = QPixmap(qRound(width() * dpr), qRound(height() * dpr)); newPixmap.setDevicePixelRatio(dpr); newPixmap.fill(Qt::white); QPainter painter(&newPixmap); @@ -208,7 +203,7 @@ void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event) const QString error(tr("This input device is not supported by the example.")); #if QT_CONFIG(statustip) QStatusTipEvent status(error); - QApplication::sendEvent(this, &status); + QCoreApplication::sendEvent(this, &status); #else qWarning() << error; #endif @@ -219,7 +214,7 @@ void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event) const QString error(tr("Unknown tablet device - treating as stylus")); #if QT_CONFIG(statustip) QStatusTipEvent status(error); - QApplication::sendEvent(this, &status); + QCoreApplication::sendEvent(this, &status); #else qWarning() << error; #endif @@ -261,7 +256,8 @@ void TabletCanvas::updateBrush(const QTabletEvent *event) m_color.setAlpha(255); break; case TiltValuator: - m_color.setAlpha(maximum(abs(vValue - 127), abs(hValue - 127))); + m_color.setAlpha(std::max(std::abs(vValue - 127), + std::abs(hValue - 127))); break; default: m_color.setAlpha(255); @@ -288,7 +284,8 @@ void TabletCanvas::updateBrush(const QTabletEvent *event) m_pen.setWidthF(pressureToWidth(event->pressure())); break; case TiltValuator: - m_pen.setWidthF(maximum(abs(vValue - 127), abs(hValue - 127)) / 12); + m_pen.setWidthF(std::max(std::abs(vValue - 127), + std::abs(hValue - 127)) / 12); break; default: m_pen.setWidthF(1); diff --git a/examples/widgets/widgets/tablet/tabletcanvas.h b/examples/widgets/widgets/tablet/tabletcanvas.h index c63ef76893..4c10731b0f 100644 --- a/examples/widgets/widgets/tablet/tabletcanvas.h +++ b/examples/widgets/widgets/tablet/tabletcanvas.h @@ -51,14 +51,13 @@ #ifndef TABLETCANVAS_H #define TABLETCANVAS_H -#include <QWidget> -#include <QPixmap> -#include <QPoint> -#include <QTabletEvent> -#include <QColor> #include <QBrush> +#include <QColor> #include <QPen> +#include <QPixmap> #include <QPoint> +#include <QTabletEvent> +#include <QWidget> QT_BEGIN_NAMESPACE class QPaintEvent; @@ -92,8 +91,6 @@ public: { return m_color; } void setTabletDevice(QTabletEvent *event) { updateCursor(event); } - int maximum(int a, int b) - { return a > b ? a : b; } protected: void tabletEvent(QTabletEvent *event) override; @@ -108,19 +105,19 @@ private: void updateBrush(const QTabletEvent *event); void updateCursor(const QTabletEvent *event); - Valuator m_alphaChannelValuator; - Valuator m_colorSaturationValuator; - Valuator m_lineWidthValuator; - QColor m_color; + Valuator m_alphaChannelValuator = TangentialPressureValuator; + Valuator m_colorSaturationValuator = NoValuator; + Valuator m_lineWidthValuator = PressureValuator; + QColor m_color = Qt::red; QPixmap m_pixmap; QBrush m_brush; QPen m_pen; - bool m_deviceDown; + bool m_deviceDown = false; struct Point { QPointF pos; - qreal pressure; - qreal rotation; + qreal pressure = 0; + qreal rotation = 0; } lastPoint; }; //! [0] diff --git a/examples/widgets/widgets/tetrix/tetrixboard.cpp b/examples/widgets/widgets/tetrix/tetrixboard.cpp index ef3ac4fc38..c1192f264d 100644 --- a/examples/widgets/widgets/tetrix/tetrixboard.cpp +++ b/examples/widgets/widgets/tetrix/tetrixboard.cpp @@ -50,16 +50,16 @@ #include "tetrixboard.h" -#include <QtWidgets> +#include <QKeyEvent> +#include <QLabel> +#include <QPainter> //! [0] TetrixBoard::TetrixBoard(QWidget *parent) - : QFrame(parent) + : QFrame(parent), isStarted(false), isPaused(false) { setFrameStyle(QFrame::Panel | QFrame::Sunken); setFocusPolicy(Qt::StrongFocus); - isStarted = false; - isPaused = false; clearBoard(); nextPiece.setRandomShape(); @@ -396,7 +396,7 @@ bool TetrixBoard::tryMove(const TetrixPiece &newPiece, int newX, int newY) //! [36] void TetrixBoard::drawSquare(QPainter &painter, int x, int y, TetrixShape shape) { - static const QRgb colorTable[8] = { + static constexpr QRgb colorTable[8] = { 0x000000, 0xCC6666, 0x66CC66, 0x6666CC, 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00 }; diff --git a/examples/widgets/widgets/tetrix/tetrixpiece.cpp b/examples/widgets/widgets/tetrix/tetrixpiece.cpp index b1b3ca9a99..9f6f6e863a 100644 --- a/examples/widgets/widgets/tetrix/tetrixpiece.cpp +++ b/examples/widgets/widgets/tetrix/tetrixpiece.cpp @@ -62,7 +62,7 @@ void TetrixPiece::setRandomShape() //! [1] void TetrixPiece::setShape(TetrixShape shape) { - static const int coordsTable[8][4][2] = { + static constexpr int coordsTable[8][4][2] = { { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, { { 0, -1 }, { 0, 0 }, { -1, 0 }, { -1, 1 } }, { { 0, -1 }, { 0, 0 }, { 1, 0 }, { 1, 1 } }, diff --git a/examples/widgets/widgets/tetrix/tetrixwindow.cpp b/examples/widgets/widgets/tetrix/tetrixwindow.cpp index 970a38c1dc..5aa5c3f615 100644 --- a/examples/widgets/widgets/tetrix/tetrixwindow.cpp +++ b/examples/widgets/widgets/tetrix/tetrixwindow.cpp @@ -48,23 +48,24 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "tetrixboard.h" #include "tetrixwindow.h" +#include <QCoreApplication> +#include <QGridLayout> +#include <QLabel> +#include <QLCDNumber> +#include <QPushButton> + //! [0] TetrixWindow::TetrixWindow(QWidget *parent) - : QWidget(parent) + : QWidget(parent), board(new TetrixBoard) { - board = new TetrixBoard; //! [0] - nextPieceLabel = new QLabel; nextPieceLabel->setFrameStyle(QFrame::Box | QFrame::Raised); nextPieceLabel->setAlignment(Qt::AlignCenter); board->setNextPieceLabel(nextPieceLabel); - //! [1] scoreLcd = new QLCDNumber(5); scoreLcd->setSegmentStyle(QLCDNumber::Filled); @@ -86,7 +87,7 @@ TetrixWindow::TetrixWindow(QWidget *parent) connect(startButton, &QPushButton::clicked, board, &TetrixBoard::start); //! [4] //! [5] - connect(quitButton , &QPushButton::clicked, qApp, &QApplication::quit); + connect(quitButton , &QPushButton::clicked, qApp, &QCoreApplication::quit); connect(pauseButton, &QPushButton::clicked, board, &TetrixBoard::pause); #if __cplusplus >= 201402L connect(board, &TetrixBoard::scoreChanged, diff --git a/examples/widgets/widgets/tooltips/main.cpp b/examples/widgets/widgets/tooltips/main.cpp index 8276b3dc8d..0890020f77 100644 --- a/examples/widgets/widgets/tooltips/main.cpp +++ b/examples/widgets/widgets/tooltips/main.cpp @@ -48,7 +48,7 @@ ** ****************************************************************************/ -#include <QtWidgets> +#include <QApplication> #include "sortingbox.h" diff --git a/examples/widgets/widgets/tooltips/sortingbox.cpp b/examples/widgets/widgets/tooltips/sortingbox.cpp index 685eaa7d1d..f99c38b233 100644 --- a/examples/widgets/widgets/tooltips/sortingbox.cpp +++ b/examples/widgets/widgets/tooltips/sortingbox.cpp @@ -50,7 +50,13 @@ #include "sortingbox.h" -#include <QtWidgets> +#include <QMouseEvent> +#include <QIcon> +#include <QPainter> +#include <QRandomGenerator> +#include <QStyle> +#include <QToolButton> +#include <QToolTip> //! [0] SortingBox::SortingBox(QWidget *parent) @@ -277,12 +283,12 @@ QToolButton *SortingBox::createToolButton(const QString &toolTip, QPoint SortingBox::initialItemPosition(const QPainterPath &path) { int x; - int y = (height() - (int)path.controlPointRect().height()) / 2; + int y = (height() - qRound(path.controlPointRect().height()) / 2); if (shapeItems.size() == 0) - x = ((3 * width()) / 2 - (int)path.controlPointRect().width()) / 2; + x = ((3 * width()) / 2 - qRound(path.controlPointRect().width())) / 2; else x = (width() / shapeItems.size() - - (int)path.controlPointRect().width()) / 2; + - qRound(path.controlPointRect().width())) / 2; return QPoint(x, y); } diff --git a/examples/widgets/widgets/tooltips/sortingbox.h b/examples/widgets/widgets/tooltips/sortingbox.h index 3d0cecea2b..785154746e 100644 --- a/examples/widgets/widgets/tooltips/sortingbox.h +++ b/examples/widgets/widgets/tooltips/sortingbox.h @@ -99,7 +99,7 @@ private: const char *member); //! [2] - QList<ShapeItem> shapeItems; + QVector<ShapeItem> shapeItems; QPainterPath circlePath; QPainterPath squarePath; QPainterPath trianglePath; diff --git a/examples/widgets/widgets/validators/validatorwidget.cpp b/examples/widgets/widgets/validators/validatorwidget.cpp index fa0a55aa52..9ddd640924 100644 --- a/examples/widgets/widgets/validators/validatorwidget.cpp +++ b/examples/widgets/widgets/validators/validatorwidget.cpp @@ -50,7 +50,7 @@ #include "validatorwidget.h" -#include <QtWidgets> +#include <QIntValidator> ValidatorWidget::ValidatorWidget(QWidget *parent) : QWidget(parent) diff --git a/examples/widgets/widgets/wiggly/wigglywidget.cpp b/examples/widgets/widgets/wiggly/wigglywidget.cpp index 0399fe9056..ab549ef07c 100644 --- a/examples/widgets/widgets/wiggly/wigglywidget.cpp +++ b/examples/widgets/widgets/wiggly/wigglywidget.cpp @@ -50,11 +50,13 @@ #include "wigglywidget.h" -#include <QtWidgets> +#include <QFontMetrics> +#include <QPainter> +#include <QTimerEvent> //! [0] WigglyWidget::WigglyWidget(QWidget *parent) - : QWidget(parent) + : QWidget(parent), step(0) { setBackgroundRole(QPalette::Midlight); setAutoFillBackground(true); @@ -63,7 +65,6 @@ WigglyWidget::WigglyWidget(QWidget *parent) newFont.setPointSize(newFont.pointSize() + 20); setFont(newFont); - step = 0; timer.start(60, this); } //! [0] @@ -72,7 +73,7 @@ WigglyWidget::WigglyWidget(QWidget *parent) void WigglyWidget::paintEvent(QPaintEvent * /* event */) //! [1] //! [2] { - static const int sineTable[16] = { + static constexpr int sineTable[16] = { 0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38 }; diff --git a/examples/widgets/widgets/windowflags/controllerwindow.cpp b/examples/widgets/widgets/windowflags/controllerwindow.cpp index e2abad89f4..0e9a916988 100644 --- a/examples/widgets/widgets/windowflags/controllerwindow.cpp +++ b/examples/widgets/widgets/windowflags/controllerwindow.cpp @@ -48,10 +48,15 @@ ** ****************************************************************************/ -#include <QtWidgets> - #include "controllerwindow.h" +#include <QCheckBox> +#include <QCoreApplication> +#include <QGroupBox> +#include <QHBoxLayout> +#include <QPushButton> +#include <QRadioButton> + //! [0] ControllerWindow::ControllerWindow(QWidget *parent) : QWidget(parent) @@ -63,7 +68,7 @@ ControllerWindow::ControllerWindow(QWidget *parent) quitButton = new QPushButton(tr("&Quit")); connect(quitButton, &QPushButton::clicked, - qApp, &QApplication::quit); + qApp, &QCoreApplication::quit); QHBoxLayout *bottomLayout = new QHBoxLayout; bottomLayout->addStretch(); @@ -83,26 +88,25 @@ ControllerWindow::ControllerWindow(QWidget *parent) //! [1] void ControllerWindow::updatePreview() { - Qt::WindowFlags flags = 0; + Qt::WindowFlags flags; - if (windowRadioButton->isChecked()) { + if (windowRadioButton->isChecked()) flags = Qt::Window; - } else if (dialogRadioButton->isChecked()) { + else if (dialogRadioButton->isChecked()) flags = Qt::Dialog; - } else if (sheetRadioButton->isChecked()) { + else if (sheetRadioButton->isChecked()) flags = Qt::Sheet; - } else if (drawerRadioButton->isChecked()) { + else if (drawerRadioButton->isChecked()) flags = Qt::Drawer; - } else if (popupRadioButton->isChecked()) { + else if (popupRadioButton->isChecked()) flags = Qt::Popup; - } else if (toolRadioButton->isChecked()) { + else if (toolRadioButton->isChecked()) flags = Qt::Tool; - } else if (toolTipRadioButton->isChecked()) { + else if (toolTipRadioButton->isChecked()) flags = Qt::ToolTip; - } else if (splashScreenRadioButton->isChecked()) { + else if (splashScreenRadioButton->isChecked()) flags = Qt::SplashScreen; //! [1] //! [2] - } //! [2] //! [3] if (msWindowsFixedSizeDialogCheckBox->isChecked()) diff --git a/examples/widgets/widgets/windowflags/previewwindow.cpp b/examples/widgets/widgets/windowflags/previewwindow.cpp index 8773dccb05..d7ebed7b3c 100644 --- a/examples/widgets/widgets/windowflags/previewwindow.cpp +++ b/examples/widgets/widgets/windowflags/previewwindow.cpp @@ -50,7 +50,9 @@ #include "previewwindow.h" -#include <QtWidgets> +#include <QPushButton> +#include <QTextEdit> +#include <QVBoxLayout> //! [0] PreviewWindow::PreviewWindow(QWidget *parent) @@ -81,23 +83,22 @@ void PreviewWindow::setWindowFlags(Qt::WindowFlags flags) QString text; Qt::WindowFlags type = (flags & Qt::WindowType_Mask); - if (type == Qt::Window) { + if (type == Qt::Window) text = "Qt::Window"; - } else if (type == Qt::Dialog) { + else if (type == Qt::Dialog) text = "Qt::Dialog"; - } else if (type == Qt::Sheet) { + else if (type == Qt::Sheet) text = "Qt::Sheet"; - } else if (type == Qt::Drawer) { + else if (type == Qt::Drawer) text = "Qt::Drawer"; - } else if (type == Qt::Popup) { + else if (type == Qt::Popup) text = "Qt::Popup"; - } else if (type == Qt::Tool) { + else if (type == Qt::Tool) text = "Qt::Tool"; - } else if (type == Qt::ToolTip) { + else if (type == Qt::ToolTip) text = "Qt::ToolTip"; - } else if (type == Qt::SplashScreen) { + else if (type == Qt::SplashScreen) text = "Qt::SplashScreen"; - } if (flags & Qt::MSWindowsFixedSizeDialogHint) text += "\n| Qt::MSWindowsFixedSizeDialogHint"; diff --git a/mkspecs/common/g++-win32.conf b/mkspecs/common/g++-win32.conf index c3a1f3a373..6369436863 100644 --- a/mkspecs/common/g++-win32.conf +++ b/mkspecs/common/g++-win32.conf @@ -17,7 +17,7 @@ include(g++-base.conf) MAKEFILE_GENERATOR = MINGW QMAKE_PLATFORM = win32 mingw -CONFIG += debug_and_release debug_and_release_target precompile_header +CONFIG += precompile_header DEFINES += UNICODE _UNICODE WIN32 MINGW_HAS_SECURE_API=1 QMAKE_COMPILER_DEFINES += __GNUC__ _WIN32 # can't add 'DEFINES += WIN64' and 'QMAKE_COMPILER_DEFINES += _WIN64' defines for diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index ede494eec1..2c68e91cd7 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -5,7 +5,7 @@ defineReplace(qtPlatformTargetSuffix) { else: CONFIG(debug, debug|release) { !debug_and_release|build_pass { mac: return($${suffix}_debug) - win32: return($${suffix}d) + win32:!gcc: return($${suffix}d) } } return($$suffix) diff --git a/src/angle/src/config.pri b/src/angle/src/config.pri index cafae0e742..af53d4c621 100644 --- a/src/angle/src/config.pri +++ b/src/angle/src/config.pri @@ -53,6 +53,7 @@ CONFIG(debug, debug|release) { } !isEmpty(BUILD_PASS): BUILDSUBDIR = $$lower($$BUILD_PASS)/ +else: BUILDSUBDIR = $$PWD/ # c++11 is needed by MinGW to get support for unordered_map. CONFIG += stl exceptions c++11 c++14 diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 98a198df43..eeaa3c18ec 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -74,7 +74,7 @@ QT_BEGIN_NAMESPACE # define QLIBRARY_AS_DEBUG true #endif -#if defined(Q_OS_UNIX) +#if defined(Q_OS_UNIX) || (defined(Q_CC_MINGW) && !QT_CONFIG(debug_and_release)) // We don't use separate debug and release libs on UNIX, so we want // to allow loading plugins, regardless of how they were built. # define QT_NO_DEBUG_PLUGIN_CHECK diff --git a/src/corelib/thread/qreadwritelock.cpp b/src/corelib/thread/qreadwritelock.cpp index 5aba05c1b9..14654986a0 100644 --- a/src/corelib/thread/qreadwritelock.cpp +++ b/src/corelib/thread/qreadwritelock.cpp @@ -50,8 +50,6 @@ #include "private/qfreelist_p.h" #include "private/qlocking_p.h" -#include <chrono> - QT_BEGIN_NAMESPACE /* @@ -67,9 +65,6 @@ QT_BEGIN_NAMESPACE */ namespace { - -using ms = std::chrono::milliseconds; - enum { StateMask = 0x3, StateLockedForRead = 0x1, @@ -279,7 +274,7 @@ bool QReadWriteLock::tryLockForRead(int timeout) d = d_ptr.loadAcquire(); continue; } - return d->lockForRead(lock, timeout); + return d->lockForRead(timeout); } } @@ -383,7 +378,7 @@ bool QReadWriteLock::tryLockForWrite(int timeout) d = d_ptr.loadAcquire(); continue; } - return d->lockForWrite(lock, timeout); + return d->lockForWrite(timeout); } } @@ -466,9 +461,9 @@ QReadWriteLock::StateForWaitCondition QReadWriteLock::stateForWaitCondition() co } -bool QReadWriteLockPrivate::lockForRead(std::unique_lock<std::mutex> &lock, int timeout) +bool QReadWriteLockPrivate::lockForRead(int timeout) { - Q_ASSERT(!mutex.try_lock()); // mutex must be locked when entering this function + Q_ASSERT(!mutex.tryLock()); // mutex must be locked when entering this function QElapsedTimer t; if (timeout > 0) @@ -482,10 +477,10 @@ bool QReadWriteLockPrivate::lockForRead(std::unique_lock<std::mutex> &lock, int if (elapsed > timeout) return false; waitingReaders++; - readerCond.wait_for(lock, ms{timeout - elapsed}); + readerCond.wait(&mutex, timeout - elapsed); } else { waitingReaders++; - readerCond.wait(lock); + readerCond.wait(&mutex); } waitingReaders--; } @@ -494,9 +489,9 @@ bool QReadWriteLockPrivate::lockForRead(std::unique_lock<std::mutex> &lock, int return true; } -bool QReadWriteLockPrivate::lockForWrite(std::unique_lock<std::mutex> &lock, int timeout) +bool QReadWriteLockPrivate::lockForWrite(int timeout) { - Q_ASSERT(!mutex.try_lock()); // mutex must be locked when entering this function + Q_ASSERT(!mutex.tryLock()); // mutex must be locked when entering this function QElapsedTimer t; if (timeout > 0) @@ -511,15 +506,15 @@ bool QReadWriteLockPrivate::lockForWrite(std::unique_lock<std::mutex> &lock, int if (waitingReaders && !waitingWriters && !writerCount) { // We timed out and now there is no more writers or waiting writers, but some // readers were queueud (probably because of us). Wake the waiting readers. - readerCond.notify_all(); + readerCond.wakeAll(); } return false; } waitingWriters++; - writerCond.wait_for(lock, ms{timeout - elapsed}); + writerCond.wait(&mutex, timeout - elapsed); } else { waitingWriters++; - writerCond.wait(lock); + writerCond.wait(&mutex); } waitingWriters--; } @@ -532,11 +527,11 @@ bool QReadWriteLockPrivate::lockForWrite(std::unique_lock<std::mutex> &lock, int void QReadWriteLockPrivate::unlock() { - Q_ASSERT(!mutex.try_lock()); // mutex must be locked when entering this function + Q_ASSERT(!mutex.tryLock()); // mutex must be locked when entering this function if (waitingWriters) - writerCond.notify_one(); + writerCond.wakeOne(); else if (waitingReaders) - readerCond.notify_all(); + readerCond.wakeAll(); } bool QReadWriteLockPrivate::recursiveLockForRead(int timeout) @@ -552,7 +547,7 @@ bool QReadWriteLockPrivate::recursiveLockForRead(int timeout) return true; } - if (!lockForRead(lock, timeout)) + if (!lockForRead(timeout)) return false; currentReaders.insert(self, 1); @@ -570,7 +565,7 @@ bool QReadWriteLockPrivate::recursiveLockForWrite(int timeout) return true; } - if (!lockForWrite(lock, timeout)) + if (!lockForWrite(timeout)) return false; currentWriter = self; diff --git a/src/corelib/thread/qreadwritelock_p.h b/src/corelib/thread/qreadwritelock_p.h index b2e782f9ee..a4d002b7f2 100644 --- a/src/corelib/thread/qreadwritelock_p.h +++ b/src/corelib/thread/qreadwritelock_p.h @@ -54,9 +54,7 @@ #include <QtCore/private/qglobal_p.h> #include <QtCore/qhash.h> - -#include <mutex> -#include <condition_variable> +#include <QtCore/qwaitcondition.h> QT_REQUIRE_CONFIG(thread); @@ -68,9 +66,9 @@ public: explicit QReadWriteLockPrivate(bool isRecursive = false) : recursive(isRecursive) {} - std::mutex mutex; - std::condition_variable writerCond; - std::condition_variable readerCond; + QMutex mutex; + QWaitCondition writerCond; + QWaitCondition readerCond; int readerCount = 0; int writerCount = 0; int waitingReaders = 0; @@ -78,8 +76,8 @@ public: const bool recursive; //Called with the mutex locked - bool lockForWrite(std::unique_lock<std::mutex> &lock, int timeout); - bool lockForRead(std::unique_lock<std::mutex> &lock, int timeout); + bool lockForWrite(int timeout); + bool lockForRead(int timeout); void unlock(); //memory management diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 616cca1422..d41e3e5e3c 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -931,6 +931,30 @@ QWheelEvent::~QWheelEvent() \endlist */ +/*! + \fn QPoint QWheelEvent::position() const + + Returns the position of the mouse cursor relative to the widget + that received the event. + + If you move your widgets around in response to mouse events, + use globalPosition() instead of this function. + + \sa globalPosition() +*/ + +/*! + \fn QPoint QWheelEvent::globalPosition() const + + Returns the global position of the mouse pointer \e{at the time + of the event}. This is important on asynchronous window systems + such as X11; whenever you move your widgets around in response to + mouse events, globalPosition() can differ a lot from the current + cursor position returned by QCursor::pos(). + + \sa position() +*/ + #if QT_DEPRECATED_SINCE(5, 15) /*! \fn int QWheelEvent::delta() const diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index b73d90529a..bf00d4a9a3 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -959,6 +959,7 @@ public: friend class QGuiApplicationPrivate; friend class QApplication; friend class QApplicationPrivate; + friend class QQuickPointerTouchEvent; }; #if QT_DEPRECATED_SINCE(5, 0) diff --git a/src/gui/kernel/qevent_p.h b/src/gui/kernel/qevent_p.h index c2d8bd72b9..b7645496f8 100644 --- a/src/gui/kernel/qevent_p.h +++ b/src/gui/kernel/qevent_p.h @@ -67,7 +67,8 @@ public: state(Qt::TouchPointReleased), pressure(-1), rotation(0), - ellipseDiameters(0, 0) + ellipseDiameters(0, 0), + stationaryWithModifiedProperty(false) { } inline QTouchEventTouchPointPrivate *detach() @@ -91,6 +92,7 @@ public: QSizeF ellipseDiameters; QVector2D velocity; QTouchEvent::TouchPoint::InfoFlags flags; + bool stationaryWithModifiedProperty : 1; QVector<QPointF> rawScreenPositions; }; diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index c21bc90d39..c5d8cf9bf9 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -2845,10 +2845,12 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To if (touchPoint.state() == Qt::TouchPointStationary) { if (touchInfo.touchPoint.velocity() != touchPoint.velocity()) { touchInfo.touchPoint.setVelocity(touchPoint.velocity()); + touchPoint.d->stationaryWithModifiedProperty = true; stationaryTouchPointChangedProperty = true; } if (!qFuzzyCompare(touchInfo.touchPoint.pressure(), touchPoint.pressure())) { touchInfo.touchPoint.setPressure(touchPoint.pressure()); + touchPoint.d->stationaryWithModifiedProperty = true; stationaryTouchPointChangedProperty = true; } } else { diff --git a/src/gui/rhi/qshaderdescription.cpp b/src/gui/rhi/qshaderdescription.cpp index c38a83c497..179d5f3a07 100644 --- a/src/gui/rhi/qshaderdescription.cpp +++ b/src/gui/rhi/qshaderdescription.cpp @@ -1022,7 +1022,7 @@ void QShaderDescriptionPrivate::loadDoc(const QJsonDocument &doc) return; } - Q_ASSERT(ref.load() == 1); // must be detached + Q_ASSERT(ref.loadRelaxed() == 1); // must be detached inVars.clear(); outVars.clear(); diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 3652a180a8..22c249d604 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -1970,9 +1970,12 @@ void QTextDocument::print(QPagedPaintDevice *printer) const QRectF body = QRectF(QPointF(0, 0), d->pageSize); QPointF pageNumberPos; + qreal sourceDpiX = qt_defaultDpiX(); + qreal sourceDpiY = qt_defaultDpiY(); + const qreal dpiScaleX = qreal(printer->logicalDpiX()) / sourceDpiX; + const qreal dpiScaleY = qreal(printer->logicalDpiY()) / sourceDpiY; + if (documentPaginated) { - qreal sourceDpiX = qt_defaultDpi(); - qreal sourceDpiY = sourceDpiX; QPaintDevice *dev = doc->documentLayout()->paintDevice(); if (dev) { @@ -1980,9 +1983,6 @@ void QTextDocument::print(QPagedPaintDevice *printer) const sourceDpiY = dev->logicalDpiY(); } - const qreal dpiScaleX = qreal(printer->logicalDpiX()) / sourceDpiX; - const qreal dpiScaleY = qreal(printer->logicalDpiY()) / sourceDpiY; - // scale to dpi p.scale(dpiScaleX, dpiScaleY); @@ -2011,15 +2011,21 @@ void QTextDocument::print(QPagedPaintDevice *printer) const // copy the custom object handlers layout->d_func()->handlers = documentLayout()->d_func()->handlers; - int dpiy = p.device()->logicalDpiY(); - int margin = (int) ((2/2.54)*dpiy); // 2 cm margins + // 2 cm margins, scaled to device in QTextDocumentLayoutPrivate::layoutFrame + const int horizontalMargin = int((2/2.54)*sourceDpiX); + const int verticalMargin = int((2/2.54)*sourceDpiY); QTextFrameFormat fmt = doc->rootFrame()->frameFormat(); - fmt.setMargin(margin); + fmt.setLeftMargin(horizontalMargin); + fmt.setRightMargin(horizontalMargin); + fmt.setTopMargin(verticalMargin); + fmt.setBottomMargin(verticalMargin); doc->rootFrame()->setFrameFormat(fmt); + // pageNumberPos must be in device coordinates, so scale to device here + const int dpiy = p.device()->logicalDpiY(); body = QRectF(0, 0, printer->width(), printer->height()); - pageNumberPos = QPointF(body.width() - margin, - body.height() - margin + pageNumberPos = QPointF(body.width() - horizontalMargin * dpiScaleX, + body.height() - verticalMargin * dpiScaleY + QFontMetrics(doc->defaultFont(), p.device()).ascent() + 5 * dpiy / 72.0); clonedDoc->setPageSize(body.size()); diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index b02723c047..a9a177da8b 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2915,24 +2915,24 @@ QRectF QTextDocumentLayoutPrivate::layoutFrame(QTextFrame *f, int layoutFrom, in { QTextFrameFormat fformat = f->frameFormat(); // set sizes of this frame from the format - QFixed tm = QFixed::fromReal(fformat.topMargin()); + QFixed tm = QFixed::fromReal(scaleToDevice(fformat.topMargin())).round(); if (tm != fd->topMargin) { fd->topMargin = tm; fullLayout = true; } - QFixed bm = QFixed::fromReal(fformat.bottomMargin()); + QFixed bm = QFixed::fromReal(scaleToDevice(fformat.bottomMargin())).round(); if (bm != fd->bottomMargin) { fd->bottomMargin = bm; fullLayout = true; } - fd->leftMargin = QFixed::fromReal(fformat.leftMargin()); - fd->rightMargin = QFixed::fromReal(fformat.rightMargin()); - QFixed b = QFixed::fromReal(fformat.border()); + fd->leftMargin = QFixed::fromReal(scaleToDevice(fformat.leftMargin())).round(); + fd->rightMargin = QFixed::fromReal(scaleToDevice(fformat.rightMargin())).round(); + QFixed b = QFixed::fromReal(scaleToDevice(fformat.border())).round(); if (b != fd->border) { fd->border = b; fullLayout = true; } - QFixed p = QFixed::fromReal(fformat.padding()); + QFixed p = QFixed::fromReal(scaleToDevice(fformat.padding())).round(); if (p != fd->padding) { fd->padding = p; fullLayout = true; diff --git a/src/plugins/platforms/wasm/qwasmbackingstore.cpp b/src/plugins/platforms/wasm/qwasmbackingstore.cpp index e8eda2605f..7e8a382512 100644 --- a/src/plugins/platforms/wasm/qwasmbackingstore.cpp +++ b/src/plugins/platforms/wasm/qwasmbackingstore.cpp @@ -81,6 +81,11 @@ void QWasmBackingStore::updateTexture() if (m_dirty.isNull()) return; + if (m_recreateTexture && m_texture->isCreated()) { + m_recreateTexture = false; + m_texture->destroy(); + } + if (!m_texture->isCreated()) { m_texture->setMinificationFilter(QOpenGLTexture::Nearest); m_texture->setMagnificationFilter(QOpenGLTexture::Nearest); @@ -146,9 +151,7 @@ void QWasmBackingStore::resize(const QSize &size, const QRegion &staticContents) m_image = QImage(size * window()->devicePixelRatio(), QImage::Format_RGB32); m_image.setDevicePixelRatio(window()->devicePixelRatio()); - - if (m_texture->isCreated()) - m_texture->destroy(); + m_recreateTexture = true; } QImage QWasmBackingStore::toImage() const diff --git a/src/plugins/platforms/wasm/qwasmbackingstore.h b/src/plugins/platforms/wasm/qwasmbackingstore.h index 4bca83c457..b93c96b483 100644 --- a/src/plugins/platforms/wasm/qwasmbackingstore.h +++ b/src/plugins/platforms/wasm/qwasmbackingstore.h @@ -64,6 +64,7 @@ private: QImage m_image; QScopedPointer<QOpenGLTexture> m_texture; QRegion m_dirty; + bool m_recreateTexture = false; }; QT_END_NAMESPACE diff --git a/src/widgets/graphicsview/qgraphicsscene.h b/src/widgets/graphicsview/qgraphicsscene.h index 3cc00ead08..d36a871533 100644 --- a/src/widgets/graphicsview/qgraphicsscene.h +++ b/src/widgets/graphicsview/qgraphicsscene.h @@ -115,7 +115,7 @@ public: BspTreeIndex, NoIndex = -1 }; - + Q_ENUM(ItemIndexMethod) enum SceneLayer { ItemLayer = 0x1, BackgroundLayer = 0x2, diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index dd225fbec3..48d2e268b8 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -615,7 +615,7 @@ public: public: int features; QBrush defaultBackground; - QFont font; + QFont font; // Be careful using this font directly. Prefer using font.resolve( ) bool hasFont; QHash<QString, QVariant> styleHints; @@ -3211,7 +3211,7 @@ void QStyleSheetStyle::drawComplexControl(ComplexControl cc, const QStyleOptionC rule.drawRule(p, opt->rect); toolOpt.rect = rule.contentsRect(opt->rect); if (rule.hasFont) - toolOpt.font = rule.font; + toolOpt.font = rule.font.resolve(toolOpt.font); drawControl(CE_ToolButtonLabel, &toolOpt, p, w); } @@ -3514,7 +3514,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q const QFont oldFont = p->font(); if (rule.hasFont) - p->setFont(rule.font); + p->setFont(rule.font.resolve(p->font())); if (rule.hasPosition() && rule.position()->textAlignment != 0) { Qt::Alignment textAlignment = rule.position()->textAlignment; @@ -3678,7 +3678,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q subRule.configurePalette(&mi.palette, QPalette::HighlightedText, QPalette::Highlight); QFont oldFont = p->font(); if (subRule.hasFont) - p->setFont(subRule.font.resolve(p->font())); + p->setFont(subRule.font.resolve(mi.font)); else p->setFont(mi.font); @@ -4084,7 +4084,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q subRule.configurePalette(&boxCopy.palette, QPalette::ButtonText, QPalette::Button); QFont oldFont = p->font(); if (subRule.hasFont) - p->setFont(subRule.font); + p->setFont(subRule.font.resolve(p->font())); boxCopy.rect = subRule.contentsRect(opt->rect); if (subRule.hasImage()) { // the image is already drawn with CE_ToolBoxTabShape, adjust rect here @@ -4171,7 +4171,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q subRule.configurePalette(&tabCopy.palette, QPalette::WindowText, QPalette::Base); QFont oldFont = p->font(); if (subRule.hasFont) - p->setFont(subRule.font); + p->setFont(subRule.font.resolve(p->font())); if (subRule.hasBox() || !subRule.hasNativeBorder()) { tabCopy.rect = ce == CE_TabBarTabShape ? subRule.borderRect(r) : subRule.contentsRect(r); @@ -5035,8 +5035,12 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op bool nullIcon = hdr->icon.isNull(); const int margin = pixelMetric(QStyle::PM_HeaderMargin, hdr, w); int iconSize = nullIcon ? 0 : pixelMetric(QStyle::PM_SmallIconSize, hdr, w); - const QSize txt = subRule.hasFont ? QFontMetrics(subRule.font).size(0, hdr->text) - : hdr->fontMetrics.size(0, hdr->text); + QFontMetrics fm = hdr->fontMetrics; + if (subRule.hasFont) { + QFont styleFont = w ? subRule.font.resolve(w->font()) : subRule.font; + fm = QFontMetrics(styleFont); + } + const QSize txt = fm.size(0, hdr->text); nativeContentsSize.setHeight(margin + qMax(iconSize, txt.height()) + margin); nativeContentsSize.setWidth((nullIcon ? 0 : margin) + iconSize + (hdr->text.isNull() ? 0 : margin) + txt.width() + margin); diff --git a/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro b/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro index 3838a72c21..f523116cc9 100644 --- a/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro +++ b/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro @@ -22,7 +22,7 @@ android:!android-embedded { RESOURCES += android_testdata.qrc } -win32 { +win32:debug_and_release { CONFIG(debug, debug|release): LIBS += -Lstaticplugin/debug else: LIBS += -Lstaticplugin/release } else { diff --git a/tests/auto/corelib/plugin/qlibrary/lib/lib.pro b/tests/auto/corelib/plugin/qlibrary/lib/lib.pro index c44cd46597..2c3305e872 100644 --- a/tests/auto/corelib/plugin/qlibrary/lib/lib.pro +++ b/tests/auto/corelib/plugin/qlibrary/lib/lib.pro @@ -12,7 +12,7 @@ msvc: DEFINES += WIN32_MSVC target.path = $$[QT_INSTALL_TESTS]/tst_qlibrary INSTALLS += target -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { DESTDIR = ../debug/ } else { diff --git a/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro b/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro index bfda0e0194..3db4bed973 100644 --- a/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro +++ b/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro @@ -13,12 +13,18 @@ msvc: DEFINES += WIN32_MSVC # We want to test if we can load a shared library with *any* filename... win32 { - CONFIG(debug, debug|release) { - BUILD_FOLDER = debug + + debug_and_release { + CONFIG(debug, debug|release)) { + BUILD_FOLDER = debug + } else { + BUILD_FOLDER = release + } + DESTDIR = ../$$BUILD_FOLDER/ } else { - BUILD_FOLDER = release + BUILD_FOLDER = + DESTDIR = ../ } - DESTDIR = ../$$BUILD_FOLDER/ # vcproj and Makefile generators refer to target differently contains(TEMPLATE,vc.*) { diff --git a/tests/auto/corelib/plugin/qlibrary/tst/tst.pro b/tests/auto/corelib/plugin/qlibrary/tst/tst.pro index 56bef14405..5894bee9d5 100644 --- a/tests/auto/corelib/plugin/qlibrary/tst/tst.pro +++ b/tests/auto/corelib/plugin/qlibrary/tst/tst.pro @@ -3,7 +3,7 @@ TARGET = ../tst_qlibrary QT = core testlib SOURCES = ../tst_qlibrary.cpp -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { TARGET = ../../debug/tst_qlibrary } else { diff --git a/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro b/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro index a3885f4134..d49bff14fd 100644 --- a/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro +++ b/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro @@ -5,7 +5,7 @@ qtConfig(private_tests): QT += core-private SOURCES = ../tst_qpluginloader.cpp ../fakeplugin.cpp HEADERS = ../theplugin/plugininterface.h -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { TARGET = ../../debug/tst_qpluginloader LIBS += -L../staticplugin/debug diff --git a/tests/auto/network/socket/qudpsocket/test/test.pro b/tests/auto/network/socket/qudpsocket/test/test.pro index 969e4d72cf..994b360370 100644 --- a/tests/auto/network/socket/qudpsocket/test/test.pro +++ b/tests/auto/network/socket/qudpsocket/test/test.pro @@ -6,7 +6,7 @@ QT = core network testlib MOC_DIR=tmp -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { DESTDIR = ../debug } else { diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 2a1163ec66..44195d3b25 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -27,13 +27,28 @@ ****************************************************************************/ #include "../../../../shared/fakedirmodel.h" -#include <qabstractitemview.h> -#include <QtTest/QtTest> -#include <QtGui/QtGui> -#include <QtWidgets/QtWidgets> -#include <private/qtreeview_p.h> -#include <QtTest/private/qtesthelpers_p.h> +#include <QDesktopWidget> +#include <QHeaderView> +#include <QLabel> +#include <QLineEdit> +#include <QMainWindow> +#include <QProxyStyle> +#include <QPushButton> +#include <QScrollBar> +#include <QSignalSpy> +#include <QSortFilterProxyModel> +#include <QStatusBar> +#include <QStringListModel> +#include <QStyledItemDelegate> +#include <QTextEdit> +#include <QTimer> +#include <QToolButton> +#include <QTreeWidget> +#include <QTest> +#include <QVBoxLayout> +#include <private/qtreeview_p.h> +#include <private/qtesthelpers_p.h> using namespace QTestPrivate; @@ -43,6 +58,7 @@ Q_DECLARE_METATYPE(QAbstractItemView::DragDropMode) Q_DECLARE_METATYPE(QAbstractItemView::EditTriggers) Q_DECLARE_METATYPE(QAbstractItemView::EditTrigger) +using IntBounds = std::numeric_limits<int>; static void initStandardTreeModel(QStandardItemModel *model) { QStandardItem *item; @@ -206,18 +222,11 @@ private slots: class QtTestModel: public QAbstractItemModel { + Q_OBJECT public: - QtTestModel(QObject *parent = 0): QAbstractItemModel(parent), - fetched(false), rows(0), cols(0), levels(INT_MAX), wrongIndex(false) { init(); } - - QtTestModel(int _rows, int _cols, QObject *parent = 0): QAbstractItemModel(parent), - fetched(false), rows(_rows), cols(_cols), levels(INT_MAX), wrongIndex(false) { init(); } - - void init() - { - decorationsEnabled = false; - statusTipsEnabled = false; - } + QtTestModel(int _rows, int _cols, QObject *parent = nullptr) + : QAbstractItemModel(parent), rows(_rows), cols(_cols) + {} inline qint32 level(const QModelIndex &index) const { @@ -264,7 +273,7 @@ public: if (row < 0 || column < 0 || (level(parent) > levels) || column >= cols || row >= rows) { return QModelIndex(); } - QModelIndex i = createIndex(row, column, level(parent) + 1); + QModelIndex i = createIndex(row, column, quintptr(level(parent) + 1)); parentHash[i] = parent; return i; } @@ -361,13 +370,14 @@ public: decorationsEnabled = enable; } - mutable bool fetched; - bool decorationsEnabled; - bool statusTipsEnabled; - int rows, cols; - int levels; - mutable bool wrongIndex; mutable QMap<QModelIndex,QModelIndex> parentHash; + int rows = 0; + int cols = 0; + int levels = IntBounds::max(); + mutable bool wrongIndex = false; + mutable bool fetched = false; + bool decorationsEnabled = false; + bool statusTipsEnabled = false; }; // Testing get/set functions @@ -377,14 +387,15 @@ void tst_QTreeView::getSetCheck() // int QTreeView::indentation() // void QTreeView::setIndentation(int) - const int styledIndentation = obj1.style()->pixelMetric(QStyle::PM_TreeViewIndentation, 0, &obj1); + const int styledIndentation = obj1.style()->pixelMetric( + QStyle::PM_TreeViewIndentation, nullptr, &obj1); QCOMPARE(obj1.indentation(), styledIndentation); obj1.setIndentation(0); QCOMPARE(obj1.indentation(), 0); - obj1.setIndentation(INT_MIN); - QCOMPARE(obj1.indentation(), INT_MIN); - obj1.setIndentation(INT_MAX); - QCOMPARE(obj1.indentation(), INT_MAX); + obj1.setIndentation(IntBounds::min()); + QCOMPARE(obj1.indentation(), IntBounds::min()); + obj1.setIndentation(IntBounds::max()); + QCOMPARE(obj1.indentation(), IntBounds::max()); // bool QTreeView::rootIsDecorated() // void QTreeView::setRootIsDecorated(bool) @@ -477,7 +488,8 @@ void tst_QTreeView::construction() QCOMPARE(view.sizeHintForRow(1), -1); QVERIFY(!view.tabKeyNavigation()); QCOMPARE(view.textElideMode(), Qt::ElideRight); - QCOMPARE(static_cast<int>(view.verticalScrollMode()), view.style()->styleHint(QStyle::SH_ItemView_ScrollMode, 0, &view)); + QCOMPARE(static_cast<int>(view.verticalScrollMode()), + view.style()->styleHint(QStyle::SH_ItemView_ScrollMode, nullptr, &view)); QCOMPARE(view.visualRect(QModelIndex()), QRect()); // QTreeView properties @@ -493,8 +505,8 @@ void tst_QTreeView::construction() QCOMPARE(view.columnWidth(0), 0); QCOMPARE(view.columnWidth(1), 0); QVERIFY(view.header()); - const int styledIndentation = view.style()->pixelMetric(QStyle::PM_TreeViewIndentation, 0, &view); - QCOMPARE(view.indentation(), styledIndentation); + QCOMPARE(view.indentation(), + view.style()->pixelMetric(QStyle::PM_TreeViewIndentation, nullptr, &view)); QCOMPARE(view.indexAbove(QModelIndex()), QModelIndex()); QCOMPARE(view.indexBelow(QModelIndex()), QModelIndex()); QVERIFY(!view.isAnimated()); @@ -781,17 +793,17 @@ void tst_QTreeView::editTriggers() break; case QAbstractItemView::DoubleClicked: // Doubleclick the center of the current cell - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, view.visualRect(view.model()->index(0, 0)).center()); - QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, + QTest::mouseDClick(view.viewport(), Qt::LeftButton, {}, view.visualRect(view.model()->index(0, 0)).center()); break; case QAbstractItemView::SelectedClicked: // Click the center of the current cell view.selectionModel()->select(view.model()->index(0, 0), QItemSelectionModel::Select); - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, view.visualRect(view.model()->index(0, 0)).center()); - QTest::qWait(int(QApplication::doubleClickInterval() * 1.5)); + QTest::qWait(qRound(QApplication::doubleClickInterval() * 1.5)); break; case QAbstractItemView::EditKeyPressed: view.setFocus(); @@ -808,7 +820,7 @@ void tst_QTreeView::editTriggers() } // Check if we got an editor - QTRY_COMPARE(view.findChild<QLineEdit *>(QString()) != 0, editorOpened); + QTRY_COMPARE(view.findChild<QLineEdit *>(QString()) != nullptr, editorOpened); } void tst_QTreeView::hasAutoScroll() @@ -860,11 +872,11 @@ void tst_QTreeView::horizontalScrollMode() class RepaintTreeView : public QTreeView { public: - RepaintTreeView() : repainted(false) { } - bool repainted; + using QTreeView::QTreeView; + bool repainted = false; protected: - void paintEvent(QPaintEvent *event) + void paintEvent(QPaintEvent *event) override { repainted = true; QTreeView::paintEvent(event); } }; @@ -902,8 +914,7 @@ void tst_QTreeView::iconSize() void tst_QTreeView::indexAt() { - QtTestModel model; - model.rows = model.cols = 5; + QtTestModel model(5, 5); QTreeView view; QCOMPARE(view.indexAt(QPoint()), QModelIndex()); @@ -985,21 +996,21 @@ void tst_QTreeView::indexWidget() void tst_QTreeView::itemDelegate() { QPointer<QAbstractItemDelegate> oldDelegate; - QPointer<QItemDelegate> otherItemDelegate; + QPointer<QStyledItemDelegate> otherItemDelegate; { QTreeView view; QVERIFY(qobject_cast<QStyledItemDelegate *>(view.itemDelegate())); QPointer<QAbstractItemDelegate> oldDelegate = view.itemDelegate(); - otherItemDelegate = new QItemDelegate; + otherItemDelegate = new QStyledItemDelegate; view.setItemDelegate(otherItemDelegate); QVERIFY(!otherItemDelegate->parent()); QVERIFY(oldDelegate); - QCOMPARE(view.itemDelegate(), (QAbstractItemDelegate *)otherItemDelegate); + QCOMPARE(view.itemDelegate(), otherItemDelegate); - view.setItemDelegate(0); + view.setItemDelegate(nullptr); QVERIFY(!view.itemDelegate()); // <- view does its own drawing? QVERIFY(otherItemDelegate); } @@ -1038,29 +1049,29 @@ void tst_QTreeView::itemDelegateForColumnOrRow() QCOMPARE(view.itemDelegate(QModelIndex()), defaultDelegate); QCOMPARE(view.itemDelegate(view.model()->index(0, 0)), defaultDelegate); - QPointer<QAbstractItemDelegate> rowDelegate = new QItemDelegate; + QPointer<QAbstractItemDelegate> rowDelegate = new QStyledItemDelegate; view.setItemDelegateForRow(0, rowDelegate); QVERIFY(!rowDelegate->parent()); - QCOMPARE(view.itemDelegateForRow(0), (QAbstractItemDelegate *)rowDelegate); - QCOMPARE(view.itemDelegate(view.model()->index(0, 0)), (QAbstractItemDelegate *)rowDelegate); - QCOMPARE(view.itemDelegate(view.model()->index(0, 1)), (QAbstractItemDelegate *)rowDelegate); + QCOMPARE(view.itemDelegateForRow(0), rowDelegate); + QCOMPARE(view.itemDelegate(view.model()->index(0, 0)), rowDelegate); + QCOMPARE(view.itemDelegate(view.model()->index(0, 1)), rowDelegate); QCOMPARE(view.itemDelegate(view.model()->index(1, 0)), defaultDelegate); QCOMPARE(view.itemDelegate(view.model()->index(1, 1)), defaultDelegate); - QPointer<QAbstractItemDelegate> columnDelegate = new QItemDelegate; + QPointer<QAbstractItemDelegate> columnDelegate = new QStyledItemDelegate; view.setItemDelegateForColumn(1, columnDelegate); QVERIFY(!columnDelegate->parent()); - QCOMPARE(view.itemDelegateForColumn(1), (QAbstractItemDelegate *)columnDelegate); - QCOMPARE(view.itemDelegate(view.model()->index(0, 0)), (QAbstractItemDelegate *)rowDelegate); - QCOMPARE(view.itemDelegate(view.model()->index(0, 1)), (QAbstractItemDelegate *)rowDelegate); // row wins + QCOMPARE(view.itemDelegateForColumn(1), columnDelegate); + QCOMPARE(view.itemDelegate(view.model()->index(0, 0)), rowDelegate); + QCOMPARE(view.itemDelegate(view.model()->index(0, 1)), rowDelegate); // row wins QCOMPARE(view.itemDelegate(view.model()->index(1, 0)), defaultDelegate); - QCOMPARE(view.itemDelegate(view.model()->index(1, 1)), (QAbstractItemDelegate *)columnDelegate); + QCOMPARE(view.itemDelegate(view.model()->index(1, 1)), columnDelegate); - view.setItemDelegateForRow(0, 0); + view.setItemDelegateForRow(0, nullptr); QVERIFY(!view.itemDelegateForRow(0)); QVERIFY(rowDelegate); // <- wasn't deleted - view.setItemDelegateForColumn(1, 0); + view.setItemDelegateForColumn(1, nullptr); QVERIFY(!view.itemDelegateForColumn(1)); QVERIFY(columnDelegate); // <- wasn't deleted @@ -1130,12 +1141,9 @@ void tst_QTreeView::keyboardSearch() QTest::qWait(QApplication::keyboardInputInterval() * 2); model.clear(); view.setCurrentIndex(QModelIndex()); - QList<QStandardItem *> items = { new QStandardItem("Andreas"), new QStandardItem("Alicia") }; - model.appendRow(items); - items = { new QStandardItem("Baldrian"), new QStandardItem("Belinda") }; - model.appendRow(items); - items = { new QStandardItem("Cecilie"), new QStandardItem("Claire") }; - model.appendRow(items); + model.appendRow({ new QStandardItem("Andreas"), new QStandardItem("Alicia") }); + model.appendRow({ new QStandardItem("Baldrian"), new QStandardItem("Belinda") }); + model.appendRow({ new QStandardItem("Cecilie"), new QStandardItem("Claire") }); QVERIFY(!view.selectionModel()->hasSelection()); QVERIFY(!view.selectionModel()->isSelected(model.index(0, 0))); @@ -1166,8 +1174,7 @@ void tst_QTreeView::keyboardSearch() QCOMPARE(view.currentIndex(), model.index(1, 1)); // Test that it wraps round - items = { new QStandardItem("Andy"), new QStandardItem("Adele") }; - model.appendRow(items); + model.appendRow({ new QStandardItem("Andy"), new QStandardItem("Adele") }); QTest::qWait(QApplication::keyboardInputInterval() * 2); view.keyboardSearch(QLatin1String("A")); QVERIFY(view.selectionModel()->isSelected(model.index(3, 1))); @@ -1202,17 +1209,16 @@ void tst_QTreeView::keyboardSearch() void tst_QTreeView::keyboardSearchMultiColumn() { QTreeView view; - QStandardItemModel model(4, 2); model.setItem(0, 0, new QStandardItem("1")); model.setItem(0, 1, new QStandardItem("green")); - model.setItem(1, 0, new QStandardItem("bad")); model.setItem(1, 1, new QStandardItem("eggs")); - model.setItem(2, 0, new QStandardItem("moof")); model.setItem(2, 1, new QStandardItem("and")); - model.setItem(3, 0, new QStandardItem("elf")); model.setItem(3, 1, new QStandardItem("ham")); + model.setItem(1, 0, new QStandardItem("bad")); model.setItem(1, 1, new QStandardItem("eggs")); + model.setItem(2, 0, new QStandardItem("moof")); model.setItem(2, 1, new QStandardItem("and")); + model.setItem(3, 0, new QStandardItem("elf")); model.setItem(3, 1, new QStandardItem("ham")); view.setModel(&model); view.show(); - qApp->setActiveWindow(&view); + QApplication::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowActive(&view)); view.setCurrentIndex(model.index(0, 1)); @@ -1240,22 +1246,22 @@ void tst_QTreeView::setModel() for (int x = 0; x < 2; ++x) { QtTestModel *model = new QtTestModel(10, 8); QAbstractItemModel *oldModel = view.model(); - QSignalSpy modelDestroyedSpy(oldModel ? oldModel : model, SIGNAL(destroyed())); + QSignalSpy modelDestroyedSpy(oldModel ? oldModel : model, &QObject::destroyed); // set the same model twice for (int i = 0; i < 2; ++i) { QItemSelectionModel *oldSelectionModel = view.selectionModel(); QItemSelectionModel *dummy = new QItemSelectionModel(model); QSignalSpy selectionModelDestroyedSpy( - oldSelectionModel ? oldSelectionModel : dummy, SIGNAL(destroyed())); + oldSelectionModel ? oldSelectionModel : dummy, &QObject::destroyed); view.setModel(model); // QCOMPARE(selectionModelDestroyedSpy.count(), (x == 0 || i == 1) ? 0 : 1); - QCOMPARE(view.model(), (QAbstractItemModel *)model); - QCOMPARE(view.header()->model(), (QAbstractItemModel *)model); + QCOMPARE(view.model(), model); + QCOMPARE(view.header()->model(), model); QCOMPARE(view.selectionModel() != oldSelectionModel, (i == 0)); } QTRY_COMPARE(modelDestroyedSpy.count(), 0); - view.setModel(0); + view.setModel(nullptr); QCOMPARE(view.model(), nullptr); // ### shouldn't selectionModel also be 0 now? // QCOMPARE(view.selectionModel(), nullptr); @@ -1278,7 +1284,7 @@ void tst_QTreeView::openPersistentEditor() view.closePersistentEditor(view.model()->index(0, 0)); QVERIFY(!view.viewport()->findChild<QLineEdit *>()->isVisible()); - qApp->sendPostedEvents(0, QEvent::DeferredDelete); + QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete); QVERIFY(!view.viewport()->findChild<QLineEdit *>()); } @@ -1300,21 +1306,20 @@ void tst_QTreeView::rootIndex() void tst_QTreeView::setHeader() { QTreeView view; - QVERIFY(view.header() != 0); + QVERIFY(view.header() != nullptr); QCOMPARE(view.header()->orientation(), Qt::Horizontal); - QCOMPARE(view.header()->parent(), (QObject *)&view); + QCOMPARE(view.header()->parent(), &view); for (int x = 0; x < 2; ++x) { - QSignalSpy destroyedSpy(view.header(), SIGNAL(destroyed())); + QSignalSpy destroyedSpy(view.header(), &QObject::destroyed); Qt::Orientation orient = x ? Qt::Vertical : Qt::Horizontal; QHeaderView *head = new QHeaderView(orient); view.setHeader(head); QCOMPARE(destroyedSpy.count(), 1); - QCOMPARE(head->parent(), (QObject *)&view); + QCOMPARE(head->parent(), &view); QCOMPARE(view.header(), head); view.setHeader(head); QCOMPARE(view.header(), head); - // Itemviews in Qt < 4.2 have asserts for this. Qt >= 4.2 should handle this gracefully - view.setHeader((QHeaderView *)0); + view.setHeader(nullptr); QCOMPARE(view.header(), head); } } @@ -1328,13 +1333,13 @@ void tst_QTreeView::columnHidden() for (int c = 0; c < model.columnCount(); ++c) QCOMPARE(view.isColumnHidden(c), false); // hide even columns - for (int c = 0; c < model.columnCount(); c+=2) + for (int c = 0; c < model.columnCount(); c += 2) view.setColumnHidden(c, true); for (int c = 0; c < model.columnCount(); ++c) QCOMPARE(view.isColumnHidden(c), (c & 1) == 0); view.update(); // hide odd columns too - for (int c = 1; c < model.columnCount(); c+=2) + for (int c = 1; c < model.columnCount(); c += 2) view.setColumnHidden(c, true); for (int c = 0; c < model.columnCount(); ++c) QCOMPARE(view.isColumnHidden(c), true); @@ -1418,7 +1423,7 @@ void tst_QTreeView::noDelegate() QtTestModel model(10, 7); QTreeView view; view.setModel(&model); - view.setItemDelegate(0); + view.setItemDelegate(nullptr); QCOMPARE(view.itemDelegate(), nullptr); } @@ -1427,11 +1432,13 @@ void tst_QTreeView::noModel() QTreeView view; view.show(); view.setRowHidden(0, QModelIndex(), true); + // no model -> not able to hide a row + QVERIFY(!view.isRowHidden(0, QModelIndex())); } void tst_QTreeView::emptyModel() { - QtTestModel model; + QtTestModel model(0, 0); QTreeView view; view.setModel(&model); view.show(); @@ -1486,7 +1493,7 @@ void tst_QTreeView::limitedExpand() QTreeView view; view.setModel(&model); - QSignalSpy spy(&view, SIGNAL(expanded(QModelIndex))); + QSignalSpy spy(&view, &QTreeView::expanded); QVERIFY(spy.isValid()); view.expand(model.index(0, 0)); @@ -1500,7 +1507,7 @@ void tst_QTreeView::limitedExpand() QTreeView view; view.setModel(&model); - QSignalSpy spy(&view, SIGNAL(expanded(QModelIndex))); + QSignalSpy spy(&view, &QTreeView::expanded); QVERIFY(spy.isValid()); view.expand(model.index(0, 0)); @@ -1515,7 +1522,6 @@ void tst_QTreeView::expandAndCollapse_data() QTest::addColumn<bool>("animationEnabled"); QTest::newRow("normal") << false; QTest::newRow("animated") << true; - } void tst_QTreeView::expandAndCollapse() @@ -1533,8 +1539,8 @@ void tst_QTreeView::expandAndCollapse() QModelIndex a = model.index(0, 0, QModelIndex()); QModelIndex b = model.index(0, 0, a); - QSignalSpy expandedSpy(&view, SIGNAL(expanded(QModelIndex))); - QSignalSpy collapsedSpy(&view, SIGNAL(collapsed(QModelIndex))); + QSignalSpy expandedSpy(&view, &QTreeView::expanded); + QSignalSpy collapsedSpy(&view, &QTreeView::collapsed); QVariantList args; for (int y = 0; y < 2; ++y) { @@ -1744,7 +1750,7 @@ void tst_QTreeView::expandAndCollapseAll() void tst_QTreeView::expandWithNoChildren() { QTreeView tree; - QStandardItemModel model(1,1); + QStandardItemModel model(1, 1); tree.setModel(&model); tree.setAnimated(true); tree.doItemsLayout(); @@ -1765,14 +1771,15 @@ void tst_QTreeView::keyboardNavigation() view.setModel(&model); view.show(); - QVector<Qt::Key> keymoves; - keymoves << Qt::Key_Down << Qt::Key_Right << Qt::Key_Right << Qt::Key_Right - << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down - << Qt::Key_Right << Qt::Key_Right << Qt::Key_Right - << Qt::Key_Left << Qt::Key_Up << Qt::Key_Left << Qt::Key_Left - << Qt::Key_Up << Qt::Key_Down << Qt::Key_Up << Qt::Key_Up - << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up - << Qt::Key_Left << Qt::Key_Left << Qt::Key_Up << Qt::Key_Down; + const auto keymoves = { + Qt::Key_Down, Qt::Key_Right, Qt::Key_Right, Qt::Key_Right, + Qt::Key_Down, Qt::Key_Down, Qt::Key_Down, Qt::Key_Down, + Qt::Key_Right, Qt::Key_Right, Qt::Key_Right, + Qt::Key_Left, Qt::Key_Up, Qt::Key_Left, Qt::Key_Left, + Qt::Key_Up, Qt::Key_Down, Qt::Key_Up, Qt::Key_Up, + Qt::Key_Up, Qt::Key_Up, Qt::Key_Up, Qt::Key_Up, + Qt::Key_Left, Qt::Key_Left, Qt::Key_Up, Qt::Key_Down + }; int row = 0; int column = 0; @@ -1780,8 +1787,7 @@ void tst_QTreeView::keyboardNavigation() view.setCurrentIndex(index); QCOMPARE(view.currentIndex(), index); - for (int i = 0; i < keymoves.size(); ++i) { - Qt::Key key = keymoves.at(i); + for (Qt::Key key : keymoves) { QTest::keyClick(&view, key); switch (key) { @@ -1838,10 +1844,10 @@ void tst_QTreeView::keyboardNavigation() class Dmodel : public QtTestModel { + Q_OBJECT public: - Dmodel() : QtTestModel(10, 10){} - - int columnCount(const QModelIndex &parent) const + using QtTestModel::QtTestModel; + int columnCount(const QModelIndex &parent) const override { if (parent.row() == 5) return 1; @@ -1851,7 +1857,7 @@ public: void tst_QTreeView::headerSections() { - Dmodel model; + Dmodel model(10, 10); QTreeView view; QHeaderView *header = view.header(); @@ -1895,7 +1901,8 @@ void tst_QTreeView::moveCursor() view.setColumnHidden(0, true); QVERIFY(view.isColumnHidden(0)); view.show(); - qApp->setActiveWindow(&view); + QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowActive(&view)); //here the first visible index should be selected //because the view got the focus @@ -1938,73 +1945,60 @@ void tst_QTreeView::moveCursor() QCOMPARE(view.currentIndex(), expected); } -class TestDelegate : public QItemDelegate +class TestDelegate : public QStyledItemDelegate { + Q_OBJECT public: - TestDelegate(QObject *parent) : QItemDelegate(parent) {} - QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const { return QSize(200, 50); } + using QStyledItemDelegate::QStyledItemDelegate; + QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const override + { return QSize(200, 50); } }; -typedef QList<QPoint> PointList; +typedef QVector<QPoint> PointList; void tst_QTreeView::setSelection_data() { QTest::addColumn<QRect>("selectionRect"); - QTest::addColumn<int>("selectionMode"); - QTest::addColumn<int>("selectionCommand"); + QTest::addColumn<QAbstractItemView::SelectionMode>("selectionMode"); + QTest::addColumn<QItemSelectionModel::SelectionFlags>("selectionCommand"); QTest::addColumn<PointList>("expectedItems"); QTest::addColumn<int>("verticalOffset"); - QTest::newRow("(0,0,50,20),rows") << QRect(0,0,50,20) - << int(QAbstractItemView::SingleSelection) - << int(QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows) - << (PointList() - << QPoint(0,0) << QPoint(1,0) << QPoint(2,0) << QPoint(3,0) << QPoint(4,0) - ) - << 0; - - QTest::newRow("(0,0,50,90),rows") << QRect(0,0,50,90) - << int(QAbstractItemView::ExtendedSelection) - << int(QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows) - << (PointList() - << QPoint(0,0) << QPoint(1,0) << QPoint(2,0) << QPoint(3,0) << QPoint(4,0) - << QPoint(0,1) << QPoint(1,1) << QPoint(2,1) << QPoint(3,1) << QPoint(4,1) - ) - << 0; - - QTest::newRow("(50,0,0,90),rows,invalid rect") << QRect(QPoint(50, 0), QPoint(0, 90)) - << int(QAbstractItemView::ExtendedSelection) - << int(QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows) - << (PointList() - << QPoint(0,0) << QPoint(1,0) << QPoint(2,0) << QPoint(3,0) << QPoint(4,0) - << QPoint(0,1) << QPoint(1,1) << QPoint(2,1) << QPoint(3,1) << QPoint(4,1) - ) - << 0; - - QTest::newRow("(0,-20,20,50),rows") << QRect(0,-20,20,50) - << int(QAbstractItemView::ExtendedSelection) - << int(QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows) - << (PointList() - << QPoint(0,0) << QPoint(1,0) << QPoint(2,0) << QPoint(3,0) << QPoint(4,0) - << QPoint(0,1) << QPoint(1,1) << QPoint(2,1) << QPoint(3,1) << QPoint(4,1) - ) - << 1; - QTest::newRow("(0,-50,20,90),rows") << QRect(0,-50,20,90) - << int(QAbstractItemView::ExtendedSelection) - << int(QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows) - << (PointList() - << QPoint(0,0) << QPoint(1,0) << QPoint(2,0) << QPoint(3,0) << QPoint(4,0) - << QPoint(0,1) << QPoint(1,1) << QPoint(2,1) << QPoint(3,1) << QPoint(4,1) - ) - << 1; - + const PointList pl1{QPoint(0, 0), QPoint(1, 0), QPoint(2, 0), QPoint(3, 0), QPoint(4, 0)}; + const PointList pl2{QPoint(0, 0), QPoint(1, 0), QPoint(2, 0), QPoint(3, 0), QPoint(4, 0), + QPoint(0, 1), QPoint(1, 1), QPoint(2, 1), QPoint(3, 1), QPoint(4, 1)}; + const QItemSelectionModel::SelectionFlags selFlags(QItemSelectionModel::ClearAndSelect | + QItemSelectionModel::Rows); + QTest::newRow("(0,0,50,20),rows") + << QRect(0, 0, 50, 20) + << QAbstractItemView::SingleSelection + << selFlags << pl1 << 0; + + QTest::newRow("(0,0,50,90),rows") + << QRect(0, 0, 50, 90) + << QAbstractItemView::ExtendedSelection + << selFlags << pl2 << 0; + + QTest::newRow("(50,0,0,90),rows,invalid rect") + << QRect(QPoint(50, 0), QPoint(0, 90)) + << QAbstractItemView::ExtendedSelection + << selFlags << pl2 << 0; + + QTest::newRow("(0,-20,20,50),rows") + << QRect(0, -20, 20, 50) + << QAbstractItemView::ExtendedSelection + << selFlags << pl2 << 1; + QTest::newRow("(0,-50,20,90),rows") + << QRect(0, -50, 20, 90) + << QAbstractItemView::ExtendedSelection + << selFlags << pl2 << 1; } void tst_QTreeView::setSelection() { QFETCH(QRect, selectionRect); - QFETCH(int, selectionMode); - QFETCH(int, selectionCommand); + QFETCH(QAbstractItemView::SelectionMode, selectionMode); + QFETCH(QItemSelectionModel::SelectionFlags, selectionCommand); QFETCH(PointList, expectedItems); QFETCH(int, verticalOffset); @@ -2016,25 +2010,23 @@ void tst_QTreeView::setSelection() view.show(); view.setRootIsDecorated(false); view.setItemDelegate(new TestDelegate(&view)); - view.setSelectionMode(QAbstractItemView::SelectionMode(selectionMode)); + view.setSelectionMode(selectionMode); view.setModel(&model); view.setUniformRowHeights(true); view.setVerticalScrollMode(QAbstractItemView::ScrollPerItem); view.scrollTo(model.index(verticalOffset, 0), QAbstractItemView::PositionAtTop); - view.setSelection(selectionRect, QItemSelectionModel::SelectionFlags(selectionCommand)); + view.setSelection(selectionRect, selectionCommand); QItemSelectionModel *selectionModel = view.selectionModel(); QVERIFY(selectionModel); - QModelIndexList selectedIndexes = selectionModel->selectedIndexes(); + const QModelIndexList selectedIndexes = selectionModel->selectedIndexes(); #ifdef Q_OS_WINRT QEXPECT_FAIL("(0,-20,20,50),rows", "Fails on WinRT - QTBUG-68297", Abort); QEXPECT_FAIL("(0,-50,20,90),rows", "Fails on WinRT - QTBUG-68297", Abort); #endif QCOMPARE(selectedIndexes.count(), expectedItems.count()); - for (int i = 0; i < selectedIndexes.count(); ++i) { - QModelIndex idx = selectedIndexes.at(i); + for (const QModelIndex &idx : selectedIndexes) QVERIFY(expectedItems.contains(QPoint(idx.column(), idx.row()))); - } } void tst_QTreeView::indexAbove() @@ -2134,7 +2126,7 @@ void tst_QTreeView::clicked() QModelIndex index = view.indexAt(p); if (!index.isValid()) continue; - QSignalSpy spy(&view, SIGNAL(clicked(QModelIndex))); + QSignalSpy spy(&view, &QTreeView::clicked); QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, p); QTRY_COMPARE(spy.count(), 1); } @@ -2149,9 +2141,9 @@ void tst_QTreeView::mouseDoubleClick() for (int i = 0; i < model.rowCount(); i++) { QModelIndex index = model.index(i, 0, QModelIndex()); model.insertRows(0, 20, index); - model.insertColumns(0,2,index); + model.insertColumns(0, 2,index); for (int i1 = 0; i1 < model.rowCount(index); i1++) { - (void)model.index(i1, 0, index); + QVERIFY(model.index(i1, 0, index).isValid()); } } @@ -2159,8 +2151,8 @@ void tst_QTreeView::mouseDoubleClick() view.setModel(&model); // make sure the viewport height is smaller than the contents height. - view.resize(200,200); - view.move(0,0); + view.resize(200, 200); + view.move(0, 0); view.show(); QModelIndex index = model.index(0, 0, QModelIndex()); view.setCurrentIndex(index); @@ -2170,9 +2162,8 @@ void tst_QTreeView::mouseDoubleClick() view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); // Make sure all items are collapsed - for (int i = 0; i < model.rowCount(QModelIndex()); i++) { - view.setExpanded(model.index(i,0, QModelIndex()), false); - } + for (int i = 0; i < model.rowCount(QModelIndex()); i++) + view.setExpanded(model.index(i, 0, QModelIndex()), false); int maximum = view.verticalScrollBar()->maximum(); @@ -2210,14 +2201,13 @@ void tst_QTreeView::rowsAboutToBeRemoved() view.setCurrentIndex(index); view.setExpanded(model.index(0,0, QModelIndex()), true); - for (int i = 0; i < model.rowCount(QModelIndex()); i++) { - view.setExpanded(model.index(i,0, QModelIndex()), true); - } + for (int i = 0; i < model.rowCount(QModelIndex()); i++) + view.setExpanded(model.index(i, 0, QModelIndex()), true); - QSignalSpy spy1(&model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); + QSignalSpy spy1(&model, &QAbstractItemModel::rowsAboutToBeRemoved); model.removeRows(1,1); - QCOMPARE(int(view.state()), 0); + QCOMPARE((view.state()), 0); // Should not be 5 (or any other number for that sake :) QCOMPARE(spy1.count(), 1); @@ -2241,8 +2231,7 @@ void tst_QTreeView::headerSections_unhideSection() void tst_QTreeView::columnAt() { - QtTestModel model; - model.rows = model.cols = 10; + QtTestModel model(10, 10); QTreeView view; view.resize(500,500); view.setModel(&model); @@ -2256,8 +2245,7 @@ void tst_QTreeView::scrollTo() #define CHECK_VISIBLE(ROW,COL) QVERIFY(QRect(QPoint(),view.viewport()->size()).contains(\ view.visualRect(model.index((ROW),(COL),QModelIndex())))) - QtTestModel model; - model.rows = model.cols = 100; + QtTestModel model(100, 100); QTreeView view; view.setUniformRowHeights(true); view.scrollTo(QModelIndex(), QTreeView::PositionAtTop); @@ -2268,19 +2256,18 @@ void tst_QTreeView::scrollTo() // ### create a data function for this test view.scrollTo(QModelIndex()); - view.scrollTo(model.index(0,0,QModelIndex())); - view.scrollTo(model.index(0,0,QModelIndex()), QTreeView::PositionAtTop); - view.scrollTo(model.index(0,0,QModelIndex()), QTreeView::PositionAtBottom); - - // + view.scrollTo(model.index(0, 0, QModelIndex())); + view.scrollTo(model.index(0, 0, QModelIndex()), QTreeView::PositionAtTop); + view.scrollTo(model.index(0, 0, QModelIndex()), QTreeView::PositionAtBottom); view.show(); view.setVerticalScrollMode(QAbstractItemView::ScrollPerItem); //some styles change that in Polish - view.resize(300, 200); + + QVERIFY(QTest::qWaitForWindowExposed(&view)); //view.verticalScrollBar()->setValue(0); - view.scrollTo(model.index(0,0,QModelIndex())); + view.scrollTo(model.index(0, 0, QModelIndex())); CHECK_VISIBLE(0,0); QCOMPARE(view.verticalScrollBar()->value(), 0); @@ -2305,22 +2292,23 @@ void tst_QTreeView::rowsAboutToBeRemoved_move() QTreeView view; view.setModel(&model); QModelIndex indexThatWantsToLiveButWillDieDieITellYou; - QModelIndex parent = model.index(2, 0 ); + QModelIndex parent = model.index(2, 0); view.expand(parent); for (int i = 0; i < 6; ++i) { model.insertRows(0, 1, parent); model.insertColumns(0, 1, parent); QModelIndex index = model.index(0, 0, parent); view.expand(index); - if ( i == 3 ) + if (i == 3) indexThatWantsToLiveButWillDieDieITellYou = index; model.setData(index, i); parent = index; } view.resize(600,800); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); view.doItemsLayout(); - static_cast<QTreeView *>(&view)->executeDelayedItemsLayout(); + view.executeDelayedItemsLayout(); parent = indexThatWantsToLiveButWillDieDieITellYou.parent(); QCOMPARE(view.isExpanded(indexThatWantsToLiveButWillDieDieITellYou), true); QCOMPARE(parent.isValid(), true); @@ -2354,7 +2342,8 @@ void tst_QTreeView::resizeColumnToContents() QTreeView view; view.setModel(&model); view.show(); - qApp->processEvents(); //must have this, or else it will not scroll + QVERIFY(QTest::qWaitForWindowExposed(&view)); + view.scrollToBottom(); view.resizeColumnToContents(0); int oldColumnSize = view.header()->sectionSize(0); @@ -2365,11 +2354,12 @@ void tst_QTreeView::resizeColumnToContents() void tst_QTreeView::insertAfterSelect() { - QtTestModel model; - model.rows = model.cols = 10; + QtTestModel model(10, 10); QTreeView view; view.setModel(&model); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QModelIndex firstIndex = model.index(0, 0, QModelIndex()); QVERIFY(firstIndex.isValid()); int itemOffset = view.visualRect(firstIndex).width() / 2; @@ -2382,11 +2372,12 @@ void tst_QTreeView::insertAfterSelect() void tst_QTreeView::removeAfterSelect() { - QtTestModel model; - model.rows = model.cols = 10; + QtTestModel model(10, 10); QTreeView view; view.setModel(&model); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QModelIndex firstIndex = model.index(0, 0, QModelIndex()); QVERIFY(firstIndex.isValid()); int itemOffset = view.visualRect(firstIndex).width() / 2; @@ -2399,17 +2390,17 @@ void tst_QTreeView::removeAfterSelect() void tst_QTreeView::hiddenItems() { - QtTestModel model; - model.rows = model.cols = 10; + QtTestModel model(10, 10); QTreeView view; view.setModel(&model); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QModelIndex firstIndex = model.index(1, 0, QModelIndex()); QVERIFY(firstIndex.isValid()); if (model.canFetchMore(firstIndex)) model.fetchMore(firstIndex); - for (int i=0; i < model.rowCount(firstIndex); i++) + for (int i = 0; i < model.rowCount(firstIndex); i++) view.setRowHidden(i , firstIndex, true ); int itemOffset = view.visualRect(firstIndex).width() / 2; @@ -2419,18 +2410,18 @@ void tst_QTreeView::hiddenItems() QTest::mouseDClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, p); QCOMPARE(view.isExpanded(firstIndex), false); - p.setX( 5 ); + p.setX(5); QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, p); QCOMPARE(view.isExpanded(firstIndex), false); } void tst_QTreeView::spanningItems() { - QtTestModel model; - model.rows = model.cols = 10; + QtTestModel model(10, 10); QTreeView view; view.setModel(&model); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); int itemWidth = view.header()->sectionSize(0); int itemHeight = view.visualRect(model.index(0, 0, QModelIndex())).height(); @@ -2470,7 +2461,7 @@ void tst_QTreeView::spanningItems() void tst_QTreeView::selectionOrderTest() { - QVERIFY(((QItemSelectionModel*)sender())->currentIndex().row() != -1); + QVERIFY(static_cast<QItemSelectionModel*>(sender())->currentIndex().row() != -1); } void tst_QTreeView::selection() @@ -2489,12 +2480,11 @@ void tst_QTreeView::selection() treeView.setSelectionBehavior(QAbstractItemView::SelectRows); treeView.setSelectionMode(QAbstractItemView::ExtendedSelection); - connect(treeView.selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - this, SLOT(selectionOrderTest())); - - treeView.show(); + connect(treeView.selectionModel(), &QItemSelectionModel::selectionChanged, + this, &tst_QTreeView::selectionOrderTest); - QTest::mousePress(treeView.viewport(), Qt::LeftButton, 0, treeView.visualRect(m.index(1, 0)).center()); + QTest::mousePress(treeView.viewport(), Qt::LeftButton, {}, + treeView.visualRect(m.index(1, 0)).center()); QTest::keyPress(treeView.viewport(), Qt::Key_Down); auto selectedRows = treeView.selectionModel()->selectedRows(); QCOMPARE(selectedRows.size(), 1); @@ -2509,23 +2499,21 @@ void tst_QTreeView::selection() void tst_QTreeView::selectionWithHiddenItems() { QStandardItemModel model; - for (int i = 0; i < model.rowCount(); ++i) - model.setData(model.index(i,0), QLatin1String("row ") + QString::number(i)); QStandardItem item0("row 0"); QStandardItem item1("row 1"); QStandardItem item2("row 2"); QStandardItem item3("row 3"); - model.appendColumn( QList<QStandardItem*>() << &item0 << &item1 << &item2 << &item3); + model.appendColumn({&item0, &item1, &item2, &item3}); QStandardItem child("child"); - item1.appendRow( &child); + item1.appendRow(&child); QTreeView view; view.setModel(&model); view.setSelectionMode(QAbstractItemView::ExtendedSelection); view.show(); - qApp->processEvents(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); //child should not be selected as it is hidden (its parent is not expanded) view.selectAll(); @@ -2548,12 +2536,11 @@ void tst_QTreeView::selectionWithHiddenItems() //we hide the node with a child (there should then be 3 items selected in 2 ranges) view.setRowHidden(1, QModelIndex(), true); QVERIFY(view.isExpanded(item1.index())); - qApp->processEvents(); view.selectAll(); QCOMPARE(view.selectionModel()->selection().count(), 2); QCOMPARE(view.selectionModel()->selectedRows().count(), 3); - QVERIFY( !view.selectionModel()->isSelected(model.indexFromItem(&item1))); - QVERIFY( !view.selectionModel()->isSelected(model.indexFromItem(&child))); + QVERIFY(!view.selectionModel()->isSelected(model.indexFromItem(&item1))); + QVERIFY(!view.selectionModel()->isSelected(model.indexFromItem(&child))); view.setRowHidden(1, QModelIndex(), false); QVERIFY(view.isExpanded(item1.index())); @@ -2561,7 +2548,6 @@ void tst_QTreeView::selectionWithHiddenItems() //we hide a node without children (there should then be 4 items selected in 3 ranges) view.setRowHidden(2, QModelIndex(), true); - qApp->processEvents(); QVERIFY(view.isExpanded(item1.index())); view.selectAll(); QVERIFY(view.isExpanded(item1.index())); @@ -2575,7 +2561,7 @@ void tst_QTreeView::selectionWithHiddenItems() void tst_QTreeView::selectAll() { - QStandardItemModel model(4,4); + QStandardItemModel model(4, 4); QTreeView view2; view2.setModel(&model); view2.setSelectionMode(QAbstractItemView::ExtendedSelection); @@ -2619,7 +2605,8 @@ void tst_QTreeView::extendedSelection() view.setModel(&model); view.setSelectionMode(QAbstractItemView::ExtendedSelection); topLevel.show(); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, mousePressPos); + QVERIFY(QTest::qWaitForWindowExposed(&topLevel)); + QTest::mousePress(view.viewport(), Qt::LeftButton, {}, mousePressPos); QCOMPARE(view.selectionModel()->selectedIndexes().count(), selectedCount); } @@ -2627,21 +2614,22 @@ void tst_QTreeView::rowSizeHint() { //tests whether the correct visible columns are taken into account when //calculating the height of a line - QStandardItemModel model(1,3); - model.setData( model.index(0,0), QSize(20,40), Qt::SizeHintRole); - model.setData( model.index(0,1), QSize(20,10), Qt::SizeHintRole); - model.setData( model.index(0,2), QSize(20,10), Qt::SizeHintRole); + QStandardItemModel model(1, 3); + model.setData(model.index(0, 0), QSize(20, 40), Qt::SizeHintRole); + model.setData(model.index(0, 1), QSize(20, 10), Qt::SizeHintRole); + model.setData(model.index(0, 2), QSize(20, 10), Qt::SizeHintRole); QTreeView view; view.setModel(&model); view.header()->moveSection(1, 0); //the 2nd column goes to the 1st place view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); //it must be 40 since the tallest item that defines the height of a line - QCOMPARE( view.visualRect(model.index(0,0)).height(), 40); - QCOMPARE( view.visualRect(model.index(0,1)).height(), 40); - QCOMPARE( view.visualRect(model.index(0,2)).height(), 40); + QCOMPARE(view.visualRect(model.index(0,0)).height(), 40); + QCOMPARE(view.visualRect(model.index(0,1)).height(), 40); + QCOMPARE(view.visualRect(model.index(0,2)).height(), 40); } @@ -2651,7 +2639,7 @@ void tst_QTreeView::rowSizeHint() void tst_QTreeView::setSortingEnabledTopLevel() { QTreeView view; - QStandardItemModel model(1,1); + QStandardItemModel model(1, 1); view.setModel(&model); const int size = view.header()->sectionSize(0); view.setSortingEnabled(true); @@ -2665,7 +2653,7 @@ void tst_QTreeView::setSortingEnabledChild() QMainWindow win; QTreeView view; // two columns to not get in trouble with stretchLastSection - QStandardItemModel model(1,2); + QStandardItemModel model(1, 2); view.setModel(&model); view.header()->setDefaultSectionSize(92); win.setCentralWidget(&view); @@ -2690,16 +2678,18 @@ void tst_QTreeView::headerHidden() class TestTreeViewStyle : public QProxyStyle { + Q_OBJECT public: - TestTreeViewStyle() : indentation(20) {} - int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const override + using QProxyStyle::QProxyStyle; + int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override { if (metric == QStyle::PM_TreeViewIndentation) return indentation; else return QProxyStyle::pixelMetric(metric, option, widget); } - int indentation; + int indentation = 20; }; void tst_QTreeView::indentation() @@ -2745,7 +2735,7 @@ void tst_QTreeView::removeAndInsertExpandedCol0() model.insertColumns(0, 1); view.show(); - qApp->processEvents(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); } void tst_QTreeView::disabledButCheckable() @@ -2782,7 +2772,7 @@ void tst_QTreeView::sortByColumn() { QFETCH(bool, sortingEnabled); QTreeView view; - QStandardItemModel model(4,2); + QStandardItemModel model(4, 2); QSortFilterProxyModel sfpm; // default QStandardItemModel does not support 'unsorted' state sfpm.setSourceModel(&model); model.setItem(0, 0, new QStandardItem("b")); @@ -2825,11 +2815,13 @@ void tst_QTreeView::sortByColumn() */ class EvilModel: public QAbstractItemModel { - + Q_OBJECT public: - class Node { + class Node + { public: - Node(Node *p = 0, int level = 0) : parent(p), isDead(false) { + Node(Node *p = nullptr, int level = 0) : parent(p) + { populate(level); } ~Node() @@ -2838,20 +2830,23 @@ public: qDeleteAll(deadChildren.begin(), deadChildren.end()); } - void populate(int level = 0) { - if (level < 4) + void populate(int level = 0) + { + if (level < 4) { for (int i = 0; i < 5; ++i) children.append(new Node(this, level + 1)); + } } - void kill() { + void kill() + { for (int i = children.count() -1; i >= 0; --i) { children.at(i)->kill(); - if (parent == 0) { + if (parent == nullptr) { deadChildren.append(children.at(i)); children.removeAt(i); } } - if (parent == 0) { + if (parent == nullptr) { if (!children.isEmpty()) qFatal("%s: children should be empty when parent is null", Q_FUNC_INFO); populate(); @@ -2860,17 +2855,16 @@ public: } } - QList<Node*> children; - QList<Node*> deadChildren; + QVector<Node *> children; + QVector<Node *> deadChildren; Node *parent; - bool isDead; + bool isDead = false; }; Node *root; - EvilModel(QObject *parent = 0): QAbstractItemModel(parent), root(new Node) - { - } + EvilModel(QObject *parent = nullptr): QAbstractItemModel(parent), root(new Node) + {} ~EvilModel() { delete root; @@ -2880,7 +2874,7 @@ public: { emit layoutAboutToBeChanged(); QModelIndexList oldList = persistentIndexList(); - QList<QStack<int> > oldListPath; + QVector<QStack<int>> oldListPath; for (int i = 0; i < oldList.count(); ++i) { QModelIndex idx = oldList.at(i); QStack<int> path; @@ -2893,12 +2887,10 @@ public: root->kill(); QModelIndexList newList; - for (int i = 0; i < oldListPath.count(); ++i) { - QStack<int> path = oldListPath[i]; + for (auto path : qAsConst(oldListPath)) { QModelIndex idx; - while(!path.isEmpty()) { + while (!path.isEmpty()) idx = index(path.pop(), 0, idx); - } newList.append(idx); } @@ -2906,7 +2898,8 @@ public: emit layoutChanged(); } - int rowCount(const QModelIndex& parent = QModelIndex()) const { + int rowCount(const QModelIndex &parent = QModelIndex()) const override + { Node *parentNode = root; if (parent.isValid()) { parentNode = static_cast<Node*>(parent.internalPointer()); @@ -2915,13 +2908,12 @@ public: } return parentNode->children.count(); } - int columnCount(const QModelIndex& parent = QModelIndex()) const { - if (parent.column() > 0) - return 0; - return 1; + int columnCount(const QModelIndex &parent = QModelIndex()) const override + { + return parent.column() > 0 ? 0 : 1; } - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override { Node *grandparentNode = static_cast<Node*>(parent.internalPointer()); Node *parentNode = root; @@ -2935,7 +2927,7 @@ public: return createIndex(row, column, parentNode); } - QModelIndex parent(const QModelIndex &index) const + QModelIndex parent(const QModelIndex &index) const override { Node *parent = static_cast<Node*>(index.internalPointer()); Node *grandparent = parent->parent; @@ -2944,7 +2936,7 @@ public: return createIndex(grandparent->children.indexOf(parent), 0, grandparent); } - QVariant data(const QModelIndex &idx, int role) const + QVariant data(const QModelIndex &idx, int role) const override { if (idx.isValid() && role == Qt::DisplayRole) { Node *parentNode = root; @@ -2987,7 +2979,6 @@ void tst_QTreeView::evilModel() view.setRowHidden(0, firstLevel, true); model.change(); - return; view.setFirstColumnSpanned(1, QModelIndex(), true); model.change(); @@ -3167,7 +3158,7 @@ void tst_QTreeView::filterProxyModelCrash() QTreeView view; view.setModel(&proxy); view.show(); - QTest::qWait(30); + QVERIFY(QTest::qWaitForWindowExposed(&view)); proxy.invalidate(); view.verticalScrollBar()->setValue(15); QTest::qWait(20); @@ -3190,7 +3181,7 @@ void tst_QTreeView::renderToPixmap() QStandardItemModel model; model.appendRow(new QStandardItem("Spanning")); - model.appendRow(QList<QStandardItem*>() << new QStandardItem("Not") << new QStandardItem("Spanning")); + model.appendRow({ new QStandardItem("Not"), new QStandardItem("Spanning") }); view.setModel(&model); view.setFirstColumnSpanned(0, QModelIndex(), true); @@ -3211,57 +3202,60 @@ void tst_QTreeView::styleOptionViewItem() { class MyDelegate : public QStyledItemDelegate { - static QString posToString(QStyleOptionViewItem::ViewItemPosition pos) { + static QString posToString(QStyleOptionViewItem::ViewItemPosition pos) + { static const char* s_pos[] = { "Invalid", "Beginning", "Middle", "End", "OnlyOne" }; return s_pos[pos]; } public: - MyDelegate() - : QStyledItemDelegate(), - count(0), - allCollapsed(false) - {} - - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const - { - QStyleOptionViewItem opt(option); - initStyleOption(&opt, index); + using QStyledItemDelegate::QStyledItemDelegate; + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const override + { + QStyleOptionViewItem opt(option); + initStyleOption(&opt, index); - QVERIFY(!opt.text.isEmpty()); - QCOMPARE(opt.index, index); - //qDebug() << index << opt.text; + QVERIFY(!opt.text.isEmpty()); + QCOMPARE(opt.index, index); + //qDebug() << index << opt.text; - if (allCollapsed) - QCOMPARE(!(opt.features & QStyleOptionViewItem::Alternate), !(index.row() % 2)); - QCOMPARE(!(opt.features & QStyleOptionViewItem::HasCheckIndicator), !opt.text.contains("Checkable")); + if (allCollapsed) { + QCOMPARE(!opt.features.testFlag(QStyleOptionViewItem::Alternate), + !(index.row() % 2)); + } + QCOMPARE(!opt.features.testFlag(QStyleOptionViewItem::HasCheckIndicator), + !opt.text.contains("Checkable")); - if (opt.text.contains("Beginning")) - QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::Beginning)); + const QString posStr(posToString(opt.viewItemPosition)); + if (opt.text.contains("Beginning")) + QCOMPARE(posStr, posToString(QStyleOptionViewItem::Beginning)); - if (opt.text.contains("Middle")) - QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::Middle)); + if (opt.text.contains("Middle")) + QCOMPARE(posStr, posToString(QStyleOptionViewItem::Middle)); - if (opt.text.contains("End")) - QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::End)); + if (opt.text.contains("End")) + QCOMPARE(posStr, posToString(QStyleOptionViewItem::End)); - if (opt.text.contains("OnlyOne")) - QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::OnlyOne)); + if (opt.text.contains("OnlyOne")) + QCOMPARE(posStr, posToString(QStyleOptionViewItem::OnlyOne)); - if (opt.text.contains("Checked")) - QCOMPARE(opt.checkState, Qt::Checked); - else - QCOMPARE(opt.checkState, Qt::Unchecked); + if (opt.text.contains("Checked")) + QCOMPARE(opt.checkState, Qt::Checked); + else + QCOMPARE(opt.checkState, Qt::Unchecked); - QCOMPARE(!(opt.state & QStyle::State_Children) , !opt.text.contains("HasChildren")); - QCOMPARE(!!(opt.state & QStyle::State_Sibling) , !opt.text.contains("Last")); + QCOMPARE(!opt.state.testFlag(QStyle::State_Children), + !opt.text.contains("HasChildren")); + QCOMPARE(opt.state.testFlag(QStyle::State_Sibling), + !opt.text.contains("Last")); - QVERIFY(!opt.text.contains("Assert")); + QVERIFY(!opt.text.contains("Assert")); - QStyledItemDelegate::paint(painter, option, index); - count++; - } - mutable int count; - bool allCollapsed; + QStyledItemDelegate::paint(painter, option, index); + count++; + } + mutable int count = 0; + bool allCollapsed = false; }; QTreeView view; @@ -3269,39 +3263,68 @@ void tst_QTreeView::styleOptionViewItem() view.setModel(&model); MyDelegate delegate; view.setItemDelegate(&delegate); - model.appendRow(QList<QStandardItem*>() - << new QStandardItem("Beginning") << new QStandardItem("Hidden") << new QStandardItem("Middle") << new QStandardItem("Middle") << new QStandardItem("End") ); + model.appendRow({ new QStandardItem("Beginning"), + new QStandardItem("Hidden"), + new QStandardItem("Middle"), + new QStandardItem("Middle"), + new QStandardItem("End") }); QStandardItem *par1 = new QStandardItem("Beginning HasChildren"); - model.appendRow(QList<QStandardItem*>() - << par1 << new QStandardItem("Hidden") << new QStandardItem("Middle HasChildren") << new QStandardItem("Middle HasChildren") << new QStandardItem("End HasChildren") ); - model.appendRow(QList<QStandardItem*>() - << new QStandardItem("OnlyOne") << new QStandardItem("Hidden") << new QStandardItem("Assert") << new QStandardItem("Assert") << new QStandardItem("Assert") ); + model.appendRow({ par1, + new QStandardItem("Hidden"), + new QStandardItem("Middle HasChildren"), + new QStandardItem("Middle HasChildren"), + new QStandardItem("End HasChildren") }); + model.appendRow({ new QStandardItem("OnlyOne"), + new QStandardItem("Hidden"), + new QStandardItem("Assert"), + new QStandardItem("Assert"), + new QStandardItem("Assert") }); QStandardItem *checkable = new QStandardItem("Checkable"); checkable->setCheckable(true); QStandardItem *checked = new QStandardItem("Checkable Checked"); checked->setCheckable(true); checked->setCheckState(Qt::Checked); - model.appendRow(QList<QStandardItem*>() - << new QStandardItem("Beginning") << new QStandardItem("Hidden") << checkable << checked << new QStandardItem("End") ); - model.appendRow(QList<QStandardItem*>() - << new QStandardItem("Beginning Last") << new QStandardItem("Hidden") << new QStandardItem("Middle Last") << new QStandardItem("Middle Last") << new QStandardItem("End Last") ); - - par1->appendRow(QList<QStandardItem*>() - << new QStandardItem("Beginning") << new QStandardItem("Hidden") << new QStandardItem("Middle") << new QStandardItem("Middle") << new QStandardItem("End") ); + model.appendRow({ new QStandardItem("Beginning"), + new QStandardItem("Hidden"), + checkable, checked, + new QStandardItem("End") }); + model.appendRow({ new QStandardItem("Beginning Last"), + new QStandardItem("Hidden"), + new QStandardItem("Middle Last"), + new QStandardItem("Middle Last"), + new QStandardItem("End Last") }); + par1->appendRow({ new QStandardItem("Beginning"), + new QStandardItem("Hidden"), + new QStandardItem("Middle"), + new QStandardItem("Middle"), + new QStandardItem("End") }); QStandardItem *par2 = new QStandardItem("Beginning HasChildren"); - par1->appendRow(QList<QStandardItem*>() - << par2 << new QStandardItem("Hidden") << new QStandardItem("Middle HasChildren") << new QStandardItem("Middle HasChildren") << new QStandardItem("End HasChildren") ); - par2->appendRow(QList<QStandardItem*>() - << new QStandardItem("Beginning Last") << new QStandardItem("Hidden") << new QStandardItem("Middle Last") << new QStandardItem("Middle Last") << new QStandardItem("End Last") ); - + par1->appendRow({ par2, + new QStandardItem("Hidden"), + new QStandardItem("Middle HasChildren"), + new QStandardItem("Middle HasChildren"), + new QStandardItem("End HasChildren") }); + par2->appendRow({ new QStandardItem("Beginning Last"), + new QStandardItem("Hidden"), + new QStandardItem("Middle Last"), + new QStandardItem("Middle Last"), + new QStandardItem("End Last") }); QStandardItem *par3 = new QStandardItem("Beginning Last"); - par1->appendRow(QList<QStandardItem*>() - << par3 << new QStandardItem("Hidden") << new QStandardItem("Middle Last") << new QStandardItem("Middle Last") << new QStandardItem("End Last") ); - par3->appendRow(QList<QStandardItem*>() - << new QStandardItem("Assert") << new QStandardItem("Hidden") << new QStandardItem("Assert") << new QStandardItem("Assert") << new QStandardItem("Asser") ); + par1->appendRow({ par3, new QStandardItem("Hidden"), + new QStandardItem("Middle Last"), + new QStandardItem("Middle Last"), + new QStandardItem("End Last") }); + par3->appendRow({ new QStandardItem("Assert"), + new QStandardItem("Hidden"), + new QStandardItem("Assert"), + new QStandardItem("Assert"), + new QStandardItem("Asser") }); view.setRowHidden(0, par3->index(), true); - par1->appendRow(QList<QStandardItem*>() - << new QStandardItem("Assert") << new QStandardItem("Hidden") << new QStandardItem("Assert") << new QStandardItem("Assert") << new QStandardItem("Asser") ); + par1->appendRow({ new QStandardItem("Assert"), + new QStandardItem("Hidden"), + new QStandardItem("Assert"), + new QStandardItem("Assert"), + new QStandardItem("Asser") }); view.setRowHidden(3, par1->index(), true); view.setColumnHidden(1, true); @@ -3331,16 +3354,14 @@ void tst_QTreeView::styleOptionViewItem() delegate.count = 0; delegate.allCollapsed = true; view.showMaximized(); - QApplication::processEvents(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QTRY_VERIFY(delegate.count >= 13); delegate.count = 0; delegate.allCollapsed = false; view.expandAll(); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 13); delegate.count = 0; view.collapse(par2->index()); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 4); // test that the rendering of drag pixmap sets the correct options too (QTBUG-15834) @@ -3360,96 +3381,73 @@ void tst_QTreeView::styleOptionViewItem() delegate.count = 0; QStandardItemModel model2; QStandardItem *item0 = new QStandardItem("OnlyOne Last"); - model2.appendRow(QList<QStandardItem*>() << item0); + model2.appendRow(item0); view.setModel(&model2); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 1); - QApplication::processEvents(); QStandardItem *item00 = new QStandardItem("OnlyOne Last"); - item0->appendRow(QList<QStandardItem*>() << item00); + item0->appendRow(item00); item0->setText("OnlyOne Last HasChildren"); - QApplication::processEvents(); delegate.count = 0; view.expandAll(); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 2); - QApplication::processEvents(); QStandardItem *item1 = new QStandardItem("OnlyOne Last"); delegate.count = 0; item0->setText("OnlyOne HasChildren"); - model2.appendRow(QList<QStandardItem*>() << item1); - QApplication::processEvents(); + model2.appendRow(item1); QTRY_VERIFY(delegate.count >= 3); - QApplication::processEvents(); QStandardItem *item01 = new QStandardItem("OnlyOne Last"); delegate.count = 0; item00->setText("OnlyOne"); - item0->appendRow(QList<QStandardItem*>() << item01); - QApplication::processEvents(); + item0->appendRow(item01); QTRY_VERIFY(delegate.count >= 4); - QApplication::processEvents(); QStandardItem *item000 = new QStandardItem("OnlyOne Last"); delegate.count = 0; item00->setText("OnlyOne HasChildren"); - item00->appendRow(QList<QStandardItem*>() << item000); - QApplication::processEvents(); + item00->appendRow(item000); QTRY_VERIFY(delegate.count >= 5); - QApplication::processEvents(); delegate.count = 0; item0->removeRow(0); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 3); - QApplication::processEvents(); item00 = new QStandardItem("OnlyOne"); - item0->insertRow(0, QList<QStandardItem*>() << item00); - QApplication::processEvents(); + item0->insertRow(0, item00); + delegate.count = 0; view.expandAll(); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 4); - QApplication::processEvents(); delegate.count = 0; item0->removeRow(1); item00->setText("OnlyOne Last"); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 3); - QApplication::processEvents(); delegate.count = 0; item0->removeRow(0); item0->setText("OnlyOne"); - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 2); - QApplication::processEvents(); //with hidden items item0->setText("OnlyOne HasChildren"); item00 = new QStandardItem("OnlyOne"); - item0->appendRow(QList<QStandardItem*>() << item00); + item0->appendRow(item00); item01 = new QStandardItem("Assert"); - item0->appendRow(QList<QStandardItem*>() << item01); + item0->appendRow(item01); view.setRowHidden(1, item0->index(), true); view.expandAll(); QStandardItem *item02 = new QStandardItem("OnlyOne Last"); - item0->appendRow(QList<QStandardItem*>() << item02); + item0->appendRow(item02); delegate.count = 0; - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 4); - QApplication::processEvents(); item0->removeRow(2); item00->setText("OnlyOne Last"); delegate.count = 0; - QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 3); - QApplication::processEvents(); item00->setText("OnlyOne"); item0->insertRow(2, new QStandardItem("OnlyOne Last")); @@ -3457,13 +3455,11 @@ void tst_QTreeView::styleOptionViewItem() item0->removeRow(0); delegate.count = 0; QTRY_VERIFY(delegate.count >= 2); - QApplication::processEvents(); item0->removeRow(1); item0->setText("OnlyOne"); delegate.count = 0; QTRY_VERIFY(delegate.count >= 2); - QApplication::processEvents(); } } @@ -3471,10 +3467,10 @@ class task174627_TreeView : public QTreeView { Q_OBJECT protected slots: - void currentChanged(const QModelIndex ¤t, const QModelIndex &) - { emit currentChanged(current); } + void currentChanged(const QModelIndex ¤t, const QModelIndex &) override + { emit signalCurrentChanged(current); } signals: - void currentChanged(const QModelIndex &); + void signalCurrentChanged(const QModelIndex &); }; void tst_QTreeView::task174627_moveLeftToRoot() @@ -3490,7 +3486,7 @@ void tst_QTreeView::task174627_moveLeftToRoot() view.setRootIndex(item1->index()); view.setCurrentIndex(item2->index()); - QSignalSpy spy(&view, SIGNAL(currentChanged(QModelIndex))); + QSignalSpy spy(&view, &task174627_TreeView::signalCurrentChanged); QTest::keyClick(&view, Qt::Key_Left); QCOMPARE(spy.count(), 0); } @@ -3503,9 +3499,9 @@ void tst_QTreeView::task171902_expandWith1stColHidden() subitem("subitem"), subitem2("subitem"), subsubitem("subsubitem"), subsubitem2("subsubitem"); - model.appendRow( QList<QStandardItem *>() << &root << &root2); - root.appendRow( QList<QStandardItem *>() << &subitem << &subitem2); - subitem.appendRow( QList<QStandardItem *>() << &subsubitem << &subsubitem2); + model.appendRow({ &root, &root2 }); + root.appendRow({ &subitem, &subitem2 }); + subitem.appendRow({ &subsubitem, &subsubitem2 }); QTreeView view; view.setModel(&model); @@ -3523,18 +3519,18 @@ void tst_QTreeView::task171902_expandWith1stColHidden() void tst_QTreeView::task203696_hidingColumnsAndRowsn() { QTreeView view; - QStandardItemModel *model = new QStandardItemModel(0, 3, &view); + QStandardItemModel model(0, 3); for (int i = 0; i < 3; ++i) { const QString prefix = QLatin1String("row ") + QString::number(i) + QLatin1String(" col "); - model->insertRow(model->rowCount()); - for (int j = 0; j < model->columnCount(); ++j) - model->setData(model->index(i, j), prefix + QString::number(j)); + model.insertRow(model.rowCount()); + for (int j = 0; j < model.columnCount(); ++j) + model.setData(model.index(i, j), prefix + QString::number(j)); } - view.setModel(model); + view.setModel(&model); view.show(); view.setColumnHidden(0, true); view.setRowHidden(0, QModelIndex(), true); - QCOMPARE(view.indexAt(QPoint(0, 0)), model->index(1, 1)); + QCOMPARE(view.indexAt(QPoint(0, 0)), model.index(1, 1)); } @@ -3547,27 +3543,23 @@ void tst_QTreeView::addRowsWhileSectionsAreHidden() view.show(); QVERIFY(QTest::qWaitForWindowActive(&view)); - int i; - for (i = 0; i < 3; ++i) + for (int i = 0; i < 3; ++i) { model->insertRow(model->rowCount()); const QString prefix = QLatin1String("row ") + QString::number(i) + QLatin1String(" col "); - for (int j = 0; j < model->columnCount(); ++j) { + for (int j = 0; j < model->columnCount(); ++j) model->setData(model->index(i, j), prefix + QString::number(j)); - } } - int col; - for (col = 0; col < pass; ++col) + for (int col = 0; col < pass; ++col) view.setColumnHidden(col, true); - for (i = 3; i < 6; ++i) + for (int i = 3; i < 6; ++i) { model->insertRow(model->rowCount()); const QString prefix = QLatin1String("row ") + QString::number(i) + QLatin1String(" col "); - for (int j = 0; j < model->columnCount(); ++j) { + for (int j = 0; j < model->columnCount(); ++j) model->setData(model->index(i, j), prefix + QString::number(j)); - } } - for (col = 0; col < pass; ++col) + for (int col = 0; col < pass; ++col) view.setColumnHidden(col, false); auto allVisualRectsValid = [](QTreeView *view, QStandardItemModel *model) { @@ -3585,24 +3577,25 @@ void tst_QTreeView::addRowsWhileSectionsAreHidden() void tst_QTreeView::task216717_updateChildren() { - class Tree : public QTreeWidget { + class Tree : public QTreeWidget + { protected: - void paintEvent(QPaintEvent *e) + void paintEvent(QPaintEvent *e) override { QTreeWidget::paintEvent(e); - refreshed=true; + refreshed = true; } public: - bool refreshed; + bool refreshed = false; } tree; tree.show(); QVERIFY(QTest::qWaitForWindowExposed(&tree)); tree.refreshed = false; - QTreeWidgetItem *parent = new QTreeWidgetItem(QStringList() << "parent"); + QTreeWidgetItem *parent = new QTreeWidgetItem({ "parent" }); tree.addTopLevelItem(parent); QTRY_VERIFY(tree.refreshed); tree.refreshed = false; - parent->addChild(new QTreeWidgetItem(QStringList() << "child")); + parent->addChild(new QTreeWidgetItem({ "child" })); QTRY_VERIFY(tree.refreshed); } @@ -3611,13 +3604,14 @@ void tst_QTreeView::task220298_selectColumns() { //this is a very simple 3x3 model where the internalId of the index are different for each cell class Model : public QAbstractTableModel - { public: - virtual int columnCount ( const QModelIndex & parent = QModelIndex() ) const + { + public: + int columnCount(const QModelIndex & parent = QModelIndex()) const override { return parent.isValid() ? 0 : 3; } - virtual int rowCount ( const QModelIndex & parent = QModelIndex() ) const + int rowCount(const QModelIndex & parent = QModelIndex()) const override { return parent.isValid() ? 0 : 3; } - virtual QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const + QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const override { if (role == Qt::DisplayRole) { return QVariant(QString::number(index.column()) + QLatin1Char('-') @@ -3626,18 +3620,21 @@ void tst_QTreeView::task220298_selectColumns() return QVariant(); } - virtual QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const + QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const override { - return hasIndex(row, column, parent) ? createIndex(row, column, column*10+row) : QModelIndex(); + return hasIndex(row, column, parent) ? createIndex(row, column, quintptr(column * 10 + row)) : QModelIndex(); } }; - class TreeView : public QTreeView { public: QModelIndexList selectedIndexes () const { return QTreeView::selectedIndexes(); } } view; + class TreeView : public QTreeView { + public: + using QTreeView::selectedIndexes; + } view; Model model; view.setModel(&model); view.show(); QVERIFY(QTest::qWaitForWindowActive(&view)); - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, view.visualRect(view.model()->index(1, 1)).center()); QTRY_VERIFY(view.selectedIndexes().contains(view.model()->index(1, 2))); QVERIFY(view.selectedIndexes().contains(view.model()->index(1, 1))); @@ -3653,8 +3650,8 @@ void tst_QTreeView::task224091_appendColumns() QTreeView *treeView = new QTreeView(topLevel); treeView->setModel(model); topLevel->show(); - treeView->resize(50,50); - qApp->setActiveWindow(topLevel); + treeView->resize(50, 50); + QApplication::setActiveWindow(topLevel); QVERIFY(QTest::qWaitForWindowActive(topLevel)); QVERIFY(!treeView->verticalScrollBar()->isVisible()); @@ -3705,9 +3702,8 @@ void tst_QTreeView::task211293_removeRootIndex() view.setCurrentIndex(model.indexFromItem(E11314)); view.setExpanded(model.indexFromItem(E11314), true); view.show(); - qApp->processEvents(); - model.removeRows(0, 1); - qApp->processEvents(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QVERIFY(model.removeRows(0, 1)); } void tst_QTreeView::task225539_deleteModel() @@ -3716,8 +3712,8 @@ void tst_QTreeView::task225539_deleteModel() treeView.show(); QStandardItemModel *model = new QStandardItemModel(&treeView); - QStandardItem* parentItem = model->invisibleRootItem(); - QStandardItem* item = new QStandardItem(QString("item")); + QStandardItem *parentItem = model->invisibleRootItem(); + QStandardItem *item = new QStandardItem(QString("item")); parentItem->appendRow(item); treeView.setModel(model); @@ -3767,7 +3763,7 @@ void tst_QTreeView::task230123_setItemsExpandable() QTest::keyClick(&tree, Qt::Key_Right); QVERIFY(root.isExpanded()); - const bool navToChild = tree.style()->styleHint(QStyle::SH_ItemView_ArrowKeysNavigateIntoChildren, 0, &tree); + const bool navToChild = tree.style()->styleHint(QStyle::SH_ItemView_ArrowKeysNavigateIntoChildren, nullptr, &tree); QTest::keyClick(&tree, Qt::Key_Right); QCOMPARE(tree.currentItem(), navToChild ? &child : &root); @@ -3784,13 +3780,13 @@ void tst_QTreeView::task230123_setItemsExpandable() void tst_QTreeView::task202039_closePersistentEditor() { - QStandardItemModel model(1,1); + QStandardItemModel model(1, 1); QTreeView view; view.setModel(&model); QModelIndex current = model.index(0,0); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.visualRect(current).center()); - QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, view.visualRect(current).center()); + QTest::mousePress(view.viewport(), Qt::LeftButton, {}, view.visualRect(current).center()); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, {}, view.visualRect(current).center()); QCOMPARE(view.currentIndex(), current); QVERIFY(view.indexWidget(current)); @@ -3799,8 +3795,8 @@ void tst_QTreeView::task202039_closePersistentEditor() //here was the bug: closing the persistent editor would not reset the state //and it was impossible to go into editinon again - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.visualRect(current).center()); - QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, view.visualRect(current).center()); + QTest::mousePress(view.viewport(), Qt::LeftButton, {}, view.visualRect(current).center()); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, {}, view.visualRect(current).center()); QCOMPARE(view.currentIndex(), current); QVERIFY(view.indexWidget(current)); } @@ -3824,13 +3820,12 @@ void tst_QTreeView::task238873_avoidAutoReopening() view.expandAll(); QVERIFY(QTest::qWaitForWindowActive(&view)); - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.visualRect(child.index()).center()); + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, view.visualRect(child.index()).center()); QTRY_COMPARE(view.currentIndex(), child.index()); view.setExpanded(item1.index(), false); - QTest::qWait(500); //enough to trigger the delayedAutoScroll timer - QVERIFY(!view.isExpanded(item1.index())); + QTRY_VERIFY(!view.isExpanded(item1.index())); } void tst_QTreeView::task244304_clickOnDecoration() @@ -3841,39 +3836,38 @@ void tst_QTreeView::task244304_clickOnDecoration() QStandardItem item00("row 0"); item0.appendRow(&item00); QStandardItem item1("row 1"); - model.appendColumn(QList<QStandardItem*>() << &item0 << &item1); + model.appendColumn({ &item0, &item1 }); view.setModel(&model); QVERIFY(!view.currentIndex().isValid()); QRect rect = view.visualRect(item0.index()); //we click on the decoration - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, rect.topLeft()+QPoint(-rect.left()/2,rect.height()/2)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, + rect.topLeft() + QPoint(-rect.left() / 2, rect.height() / 2)); QVERIFY(!view.currentIndex().isValid()); QVERIFY(view.isExpanded(item0.index())); rect = view.visualRect(item1.index()); //the item has no decoration, it should get selected - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, rect.topLeft()+QPoint(-rect.left()/2,rect.height()/2)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, + rect.topLeft() + QPoint(-rect.left() / 2, rect.height() / 2)); QCOMPARE(view.currentIndex(), item1.index()); } void tst_QTreeView::task246536_scrollbarsNotWorking() { - struct MyObject : public QObject + class MyObject : public QObject { - MyObject() : count(0) - { - } - - bool eventFilter(QObject*, QEvent *e) + public: + using QObject::QObject; + bool eventFilter(QObject*, QEvent *e) override { if (e->type() == QEvent::Paint) count++; return false; } - - int count; + int count = 0; }; QTreeView tree; MyObject o; @@ -3883,11 +3877,11 @@ void tst_QTreeView::task246536_scrollbarsNotWorking() tree.show(); QVERIFY(QTest::qWaitForWindowExposed(&tree)); QList<QStandardItem *> items; - for(int i=0; i<100; ++i){ + for (int i = 0; i < 100; ++i) items << new QStandardItem(QLatin1String("item ") + QString::number(i)); - } + o.count = 0; model.invisibleRootItem()->appendColumn(items); - QTest::qWait(100); + QTRY_VERIFY(o.count > 0); o.count = 0; tree.verticalScrollBar()->setValue(50); QTRY_VERIFY(o.count > 0); @@ -3915,12 +3909,12 @@ void tst_QTreeView::task239271_addRowsWithFirstColumnHidden() class MyDelegate : public QStyledItemDelegate { public: - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const override { paintedIndexes << index; QStyledItemDelegate::paint(painter, option, index); } - mutable QSet<QModelIndex> paintedIndexes; }; @@ -3953,15 +3947,15 @@ void tst_QTreeView::task254234_proxySort() //based on tst_QTreeView::sortByColumn // it used not to work when setting the source of a proxy after enabling sorting QTreeView view; - QStandardItemModel model(4,2); - model.setItem(0,0,new QStandardItem("b")); - model.setItem(1,0,new QStandardItem("d")); - model.setItem(2,0,new QStandardItem("c")); - model.setItem(3,0,new QStandardItem("a")); - model.setItem(0,1,new QStandardItem("e")); - model.setItem(1,1,new QStandardItem("g")); - model.setItem(2,1,new QStandardItem("h")); - model.setItem(3,1,new QStandardItem("f")); + QStandardItemModel model(4, 2); + model.setItem(0, 0, new QStandardItem("b")); + model.setItem(1, 0, new QStandardItem("d")); + model.setItem(2, 0, new QStandardItem("c")); + model.setItem(3, 0, new QStandardItem("a")); + model.setItem(0, 1, new QStandardItem("e")); + model.setItem(1, 1, new QStandardItem("g")); + model.setItem(2, 1, new QStandardItem("h")); + model.setItem(3, 1, new QStandardItem("f")); view.sortByColumn(1, Qt::DescendingOrder); view.setSortingEnabled(true); @@ -3971,8 +3965,8 @@ void tst_QTreeView::task254234_proxySort() view.setModel(&proxy); proxy.setSourceModel(&model); QCOMPARE(view.header()->sortIndicatorSection(), 1); - QCOMPARE(view.model()->data(view.model()->index(0,1)).toString(), QString::fromLatin1("h")); - QCOMPARE(view.model()->data(view.model()->index(1,1)).toString(), QString::fromLatin1("g")); + QCOMPARE(view.model()->data(view.model()->index(0, 1)).toString(), QString::fromLatin1("h")); + QCOMPARE(view.model()->data(view.model()->index(1, 1)).toString(), QString::fromLatin1("g")); } class TreeView : public QTreeView @@ -3984,7 +3978,8 @@ public slots: //let's select the last item QModelIndex idx = model()->index(0, 0); selectionModel()->select(QItemSelection(idx, idx), QItemSelectionModel::Select); - disconnect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(handleSelectionChanged())); + disconnect(selectionModel(), &QItemSelectionModel::selectionChanged, + this, &TreeView::handleSelectionChanged); } }; @@ -3993,12 +3988,14 @@ void tst_QTreeView::task248022_changeSelection() //we check that changing the selection between the mouse press and the mouse release //works correctly TreeView view; - QStringList list = QStringList() << "1" << "2"; + const QStringList list({"1", "2"}); QStringListModel model(list); view.setSelectionMode(QAbstractItemView::ExtendedSelection); view.setModel(&model); - view.connect(view.selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(handleSelectionChanged())); - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.visualRect(model.index(1)).center()); + connect(view.selectionModel(), &QItemSelectionModel::selectionChanged, + &view, &TreeView::handleSelectionChanged); + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, + view.visualRect(model.index(1)).center()); QCOMPARE(view.selectionModel()->selectedIndexes().count(), list.count()); } @@ -4012,8 +4009,9 @@ void tst_QTreeView::task245654_changeModelAndExpandAll() model->appendRow(top); view.setModel(model.data()); view.expandAll(); - QApplication::processEvents(); - QVERIFY(view.isExpanded(top->index())); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QTRY_VERIFY(view.isExpanded(top->index())); //now let's try to delete the model //then repopulate and expand again @@ -4024,9 +4022,7 @@ void tst_QTreeView::task245654_changeModelAndExpandAll() model->appendRow(top); view.setModel(model.data()); view.expandAll(); - QApplication::processEvents(); - QVERIFY(view.isExpanded(top->index())); - + QTRY_VERIFY(view.isExpanded(top->index())); } void tst_QTreeView::doubleClickedWithSpans() @@ -4042,10 +4038,10 @@ void tst_QTreeView::doubleClickedWithSpans() QPoint p(10, 10); QCOMPARE(view.indexAt(p), model.index(0, 0)); - QSignalSpy spy(&view, SIGNAL(doubleClicked(QModelIndex))); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, p); - QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, p); - QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, p); + QSignalSpy spy(&view, &QAbstractItemView::doubleClicked); + QTest::mousePress(view.viewport(), Qt::LeftButton, {}, p); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, {}, p); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, {}, p); QCOMPARE(spy.count(), 1); //let's click on the 2nd column @@ -4053,10 +4049,10 @@ void tst_QTreeView::doubleClickedWithSpans() QCOMPARE(view.indexAt(p), model.index(0, 0)); //end the previous edition - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, p); - QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, p); - QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, p); + QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, p); + QTest::mousePress(view.viewport(), Qt::LeftButton, {}, p); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, {}, p); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, {}, p); QTRY_COMPARE(spy.count(), 2); } @@ -4069,7 +4065,8 @@ void tst_QTreeView::taskQTBUG_6450_selectAllWith1stColumnHidden() const int nrRows = 10; for (int i = 0; i < nrRows; ++i) { const QString text = QLatin1String("item: ") + QString::number(i); - items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(text))); + items.append(new QTreeWidgetItem(static_cast<QTreeWidget *>(nullptr), + QStringList(text))); items.last()->setText(1, QString("is an item")); } tree.insertTopLevelItems(0, items); @@ -4086,15 +4083,15 @@ class TreeViewQTBUG_9216 : public QTreeView { Q_OBJECT public: - void paintEvent(QPaintEvent *event) + void paintEvent(QPaintEvent *event) override { if (doCompare) QCOMPARE(event->rect(), viewport()->rect()); QTreeView::paintEvent(event); painted++; } - int painted; - bool doCompare; + int painted = 0; + bool doCompare = false; }; void tst_QTreeView::taskQTBUG_9216_setSizeAndUniformRowHeightsWrongRepaint() @@ -4128,7 +4125,7 @@ void tst_QTreeView::keyboardNavigationWithDisabled() QStandardItemModel model(90, 0); for (int i = 0; i < 90; i ++) { model.setItem(i, new QStandardItem(QString::number(i))); - model.item(i)->setEnabled(i%6 == 0); + model.item(i)->setEnabled(i % 6 == 0); } view.setModel(&model); @@ -4179,6 +4176,7 @@ void tst_QTreeView::keyboardNavigationWithDisabled() class RemoveColumnOne : public QSortFilterProxyModel { + Q_OBJECT public: bool filterAcceptsColumn(int source_column, const QModelIndex &) const override { @@ -4200,9 +4198,9 @@ void tst_QTreeView::saveRestoreState() { QStandardItemModel model; for (int i = 0; i < 100; i++) { - QList<QStandardItem *> items; - items << new QStandardItem(QLatin1String("item ") + QString::number(i)) << new QStandardItem(QStringLiteral("hidden by proxy")) << new QStandardItem(QStringLiteral("hidden by user")); - model.appendRow(items); + model.appendRow({new QStandardItem(QStringLiteral("item ") + QString::number(i)), + new QStandardItem(QStringLiteral("hidden by proxy")), + new QStandardItem(QStringLiteral("hidden by user")) }); } QCOMPARE(model.columnCount(), 3); @@ -4233,32 +4231,29 @@ class Model_11466 : public QAbstractItemModel { Q_OBJECT public: - Model_11466(QObject * /* parent */) : - m_block(false) + Model_11466(QObject *parent = nullptr) : QAbstractItemModel(parent) + , m_selectionModel(new QItemSelectionModel(this, this)) { - // set up the model to have two top level items and a few others - m_selectionModel = new QItemSelectionModel(this, this); // owned by this - - connect(m_selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), - this, SLOT(slotCurrentChanged(QModelIndex,QModelIndex))); - }; + connect(m_selectionModel, &QItemSelectionModel::currentChanged, + this, &Model_11466::slotCurrentChanged); + } - int rowCount(const QModelIndex &parent) const + int rowCount(const QModelIndex &parent) const override { if (parent.isValid()) return (parent.internalId() == 0) ? 4 : 0; return 2; // two top level items } - int columnCount(const QModelIndex & /* parent */) const + int columnCount(const QModelIndex & /* parent */) const override { return 2; } - QVariant data(const QModelIndex &index, int role) const + QVariant data(const QModelIndex &index, int role) const override { if (role == Qt::DisplayRole && index.isValid()) { - qint64 parentRowPlusOne = index.internalId(); + qint64 parentRowPlusOne = qint64(index.internalId()); QString str; QTextStream stream(&str); if (parentRowPlusOne > 0) @@ -4270,10 +4265,10 @@ public: return QVariant(); } - QModelIndex parent(const QModelIndex &index) const + QModelIndex parent(const QModelIndex &index) const override { if (index.isValid()) { - qint64 parentRowPlusOne = index.internalId(); + qint64 parentRowPlusOne = qint64(index.internalId()); if (parentRowPlusOne > 0) { int row = static_cast<int>(parentRowPlusOne - 1); return createIndex(row, 0); @@ -4294,9 +4289,9 @@ public: delete oldModel; } - QModelIndex index(int row, int column, const QModelIndex &parent) const + QModelIndex index(int row, int column, const QModelIndex &parent) const override { - return createIndex(row, column, parent.isValid() ? (quintptr)(parent.row() + 1) : (quintptr)0); + return createIndex(row, column, parent.isValid() ? quintptr(parent.row() + 1) : quintptr(0)); } public slots: @@ -4333,7 +4328,7 @@ public slots: } private: - bool m_block; + bool m_block = false; QItemSelectionModel *m_selectionModel; }; @@ -4388,9 +4383,9 @@ void tst_QTreeView::taskQTBUG_25333_adjustViewOptionsForIndex() QStandardItem *data3 = new QStandardItem("Data3"); // Create a treeview - model.appendRow(QList<QStandardItem*>() << item1 << data1 ); - model.appendRow(QList<QStandardItem*>() << item2 << data2 ); - model.appendRow(QList<QStandardItem*>() << item3 << data3 ); + model.appendRow({ item1, data1 }); + model.appendRow({ item2, data2 }); + model.appendRow({ item3, data3 }); view.setModel(&model); @@ -4414,6 +4409,9 @@ void tst_QTreeView::taskQTBUG_25333_adjustViewOptionsForIndex() void tst_QTreeView::taskQTBUG_18539_emitLayoutChanged() { + qRegisterMetaType<QList<QPersistentModelIndex>>(); + qRegisterMetaType<QAbstractItemModel::LayoutChangeHint>(); + QTreeView view; QStandardItem* item = new QStandardItem("Orig"); @@ -4430,14 +4428,14 @@ void tst_QTreeView::taskQTBUG_18539_emitLayoutChanged() replacementItem->setChild(0, 0, replacementChild); - QSignalSpy beforeSpy(&model, SIGNAL(layoutAboutToBeChanged())); - QSignalSpy afterSpy(&model, SIGNAL(layoutChanged())); + QSignalSpy beforeSpy(&model, &QAbstractItemModel::layoutAboutToBeChanged); + QSignalSpy afterSpy(&model, &QAbstractItemModel::layoutChanged); - QSignalSpy beforeRISpy(&model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); - QSignalSpy afterRISpy(&model, SIGNAL(rowsInserted(QModelIndex,int,int))); + QSignalSpy beforeRISpy(&model, &QAbstractItemModel::rowsAboutToBeInserted); + QSignalSpy afterRISpy(&model, &QAbstractItemModel::rowsInserted); - QSignalSpy beforeRRSpy(&model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); - QSignalSpy afterRRSpy(&model, SIGNAL(rowsRemoved(QModelIndex,int,int))); + QSignalSpy beforeRRSpy(&model, &QAbstractItemModel::rowsAboutToBeRemoved); + QSignalSpy afterRRSpy(&model, &QAbstractItemModel::rowsRemoved); model.setItem(0, 0, replacementItem); @@ -4460,7 +4458,7 @@ void tst_QTreeView::taskQTBUG_8176_emitOnExpandAll() new QTreeWidgetItem(item2, QStringList(QString("item 4"))); QTreeWidgetItem *item5 = new QTreeWidgetItem(&tw, QStringList(QString("item 5"))); new QTreeWidgetItem(item5, QStringList(QString("item 6"))); - QSignalSpy spy(&tw, SIGNAL(expanded(const QModelIndex&))); + QSignalSpy spy(&tw, &QTreeView::expanded); // expand all tw.expandAll(); @@ -4473,7 +4471,7 @@ void tst_QTreeView::taskQTBUG_8176_emitOnExpandAll() QCOMPARE(spy.size(), 5); // collapse all - QSignalSpy spy2(&tw, SIGNAL(collapsed(const QModelIndex&))); + QSignalSpy spy2(&tw, &QTreeView::collapsed); tw.collapseAll(); QCOMPARE(spy2.size(), 6); tw.expandAll(); @@ -4496,14 +4494,13 @@ void tst_QTreeView::testInitialFocus() { QTreeWidget treeWidget; treeWidget.setColumnCount(5); - new QTreeWidgetItem(&treeWidget, QStringList(QString("1;2;3;4;5").split(QLatin1Char(';')))); + new QTreeWidgetItem(&treeWidget, QString("1;2;3;4;5").split(QLatin1Char(';'))); treeWidget.setTreePosition(2); treeWidget.header()->hideSection(0); // make sure we skip hidden section(s) treeWidget.header()->swapSections(1, 2); // make sure that we look for first visual index (and not first logical) treeWidget.show(); QVERIFY(QTest::qWaitForWindowExposed(&treeWidget)); - QApplication::processEvents(); - QCOMPARE(treeWidget.currentIndex().column(), 2); + QTRY_COMPARE(treeWidget.currentIndex().column(), 2); } #if QT_CONFIG(animation) @@ -4534,9 +4531,8 @@ void tst_QTreeView::quickExpandCollapse() tree.collapse(rootIndex); QCOMPARE(tree.state(), QTreeView::AnimatingState); - QTest::qWait(500); //the animation lasts for 250ms max so 500 should be enough - - QCOMPARE(tree.state(), initialState); + //the animation lasts for 250ms max so 5000 (default) should be enough + QTRY_COMPARE(tree.state(), initialState); } #endif // animation @@ -4576,7 +4572,7 @@ class Qtbug45697TestWidget : public QWidget public: static const int columnCount = 3; - explicit Qtbug45697TestWidget(); + explicit Qtbug45697TestWidget(QWidget *parent = nullptr); int timerTick() const { return m_timerTick; } public slots: @@ -4586,14 +4582,13 @@ private: QTreeView *m_treeView; QStandardItemModel *m_model; QSortFilterProxyModel *m_sortFilterProxyModel; - int m_timerTick; + int m_timerTick = 0; }; -Qtbug45697TestWidget::Qtbug45697TestWidget() - : m_treeView(new QTreeView(this)) +Qtbug45697TestWidget::Qtbug45697TestWidget(QWidget *parent) + : QWidget(parent), m_treeView(new QTreeView(this)) , m_model(new QStandardItemModel(0, Qtbug45697TestWidget::columnCount, this)) , m_sortFilterProxyModel(new QSortFilterProxyModel(this)) - , m_timerTick(0) { QVBoxLayout *vBoxLayout = new QVBoxLayout(this); vBoxLayout->addWidget(m_treeView); @@ -4611,7 +4606,7 @@ Qtbug45697TestWidget::Qtbug45697TestWidget() m_treeView->setModel(m_sortFilterProxyModel); QHeaderView *headerView = m_treeView->header(); - for (int s = 1, lastSection = headerView->count() - 1; s < lastSection; ++s ) + for (int s = 1, lastSection = headerView->count() - 1; s < lastSection; ++s) headerView->setSectionResizeMode(s, QHeaderView::ResizeToContents); QTimer *timer = new QTimer(this); @@ -4697,9 +4692,8 @@ void tst_QTreeView::statusTip() { QFETCH(bool, intermediateParent); QMainWindow mw; - QtTestModel model; + QtTestModel model(5, 5); model.statusTipsEnabled = true; - model.rows = model.cols = 5; QTreeView *view = new QTreeView; view->setModel(&model); view->viewport()->setMouseTracking(true); @@ -4717,7 +4711,7 @@ void tst_QTreeView::statusTip() mw.setGeometry(QRect(QPoint(QApplication::desktop()->geometry().center() - QPoint(250, 250)), QSize(500, 500))); mw.show(); - qApp->setActiveWindow(&mw); + QApplication::setActiveWindow(&mw); QVERIFY(QTest::qWaitForWindowActive(&mw)); // Ensure it is moved away first and then moved to the relevant section QTest::mouseMove(mw.windowHandle(), view->mapTo(&mw, view->rect().bottomLeft() + QPoint(20, 20))); @@ -4736,8 +4730,9 @@ void tst_QTreeView::statusTip() class FetchMoreModel : public QStandardItemModel { + Q_OBJECT public: - FetchMoreModel() : QStandardItemModel(), canFetchReady(false) + FetchMoreModel(QObject *parent = nullptr) : QStandardItemModel(parent) { for (int i = 0; i < 20; ++i) { QStandardItem *item = new QStandardItem("Row"); @@ -4757,9 +4752,9 @@ public: { QStandardItem *item = itemFromIndex(parent); for (int i = 0; i < 19; ++i) - item->appendRow(new QStandardItem(QString("New Child %1").arg(i))); + item->appendRow(new QStandardItem(QStringLiteral("New Child ") + QString::number(i))); } - bool canFetchReady; + bool canFetchReady = false; }; void tst_QTreeView::fetchMoreOnScroll() @@ -4865,12 +4860,12 @@ void tst_QTreeView::taskQTBUG_61476() const QRect rect = priv->itemDecorationRect(mi); const QPoint pos = rect.center(); - QTest::mousePress(tv.viewport(), Qt::LeftButton, 0, pos); - if (tv.style()->styleHint(QStyle::SH_ListViewExpand_SelectMouseType, 0, &tv) == + QTest::mousePress(tv.viewport(), Qt::LeftButton, {}, pos); + if (tv.style()->styleHint(QStyle::SH_ListViewExpand_SelectMouseType, nullptr, &tv) == QEvent::MouseButtonPress) QTRY_VERIFY(!tv.isExpanded(mi)); - QTest::mouseRelease(tv.viewport(), Qt::LeftButton, 0, pos); + QTest::mouseRelease(tv.viewport(), Qt::LeftButton, nullptr, pos); QTRY_VERIFY(!tv.isExpanded(mi)); QCOMPARE(lastTopLevel->checkState(), Qt::Checked); } diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 0d97974b90..6b8beccbdc 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -27,36 +27,22 @@ ****************************************************************************/ -#include <QtTest/QtTest> -#include <qtreewidget.h> -#include <qtreewidgetitemiterator.h> -#include <qapplication.h> -#include <qeventloop.h> -#include <qdebug.h> -#include <qheaderview.h> -#include <qlineedit.h> +#include <QApplication> +#include <QHeaderView> +#include <QLineEdit> #include <QScrollBar> +#include <QSignalSpy> #include <QStyledItemDelegate> - -class CustomTreeWidget : public QTreeWidget -{ - Q_OBJECT -public: - QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const - { return QTreeWidget::indexFromItem(item, column); } - - QMimeData * mimeData(const QList<QTreeWidgetItem*> items) const - { return QTreeWidget::mimeData(items); } -}; +#include <QTreeWidget> +#include <QTreeWidgetItemIterator> +#include <QTest> class tst_QTreeWidget : public QObject { Q_OBJECT public: - tst_QTreeWidget(); - ~tst_QTreeWidget(); - + tst_QTreeWidget() = default; public slots: void initTestCase(); @@ -173,8 +159,25 @@ public slots: void itemSelectionChanged(); void emitDataChanged(); +public: + class PublicTreeWidget : public QTreeWidget + { + public: + using QTreeWidget::indexFromItem; + using QTreeWidget::mimeData; + using QTreeWidget::sizeHintForColumn; + void deleteCurrent() { delete currentItem(); } + }; + + class PublicTreeItem : public QTreeWidgetItem + { + public: + using QTreeWidgetItem::QTreeWidgetItem; + using QTreeWidgetItem::emitDataChanged; + }; + private: - CustomTreeWidget *testWidget; + PublicTreeWidget *testWidget = nullptr; }; // Testing get/set functions @@ -186,7 +189,7 @@ void tst_QTreeWidget::getSetCheck() obj1.setColumnCount(0); QCOMPARE(obj1.columnCount(), 0); - obj1.setColumnCount(INT_MIN); + obj1.setColumnCount(std::numeric_limits<int>::min()); QCOMPARE(obj1.columnCount(), 0); //obj1.setColumnCount(INT_MAX); @@ -202,7 +205,7 @@ void tst_QTreeWidget::getSetCheck() obj1.setHeaderItem(var2); QCOMPARE(obj1.headerItem(), var2); - obj1.setHeaderItem((QTreeWidgetItem *)0); + obj1.setHeaderItem(nullptr); // QCOMPARE(obj1.headerItem(), nullptr); // QTreeWidgetItem * QTreeWidget::currentItem() @@ -211,36 +214,28 @@ void tst_QTreeWidget::getSetCheck() obj1.setCurrentItem(var3); QCOMPARE(obj1.currentItem(), var3); - obj1.setCurrentItem((QTreeWidgetItem *)0); + obj1.setCurrentItem(nullptr); QCOMPARE(obj1.currentItem(), nullptr); } -typedef QList<int> IntList; -typedef QList<IntList> ListIntList; +using IntList = QVector<int>; +using ListIntList = QVector<IntList>; +using PersistentModelIndexVec = QVector<QPersistentModelIndex>; +using TreeItem = QTreeWidgetItem; +using TreeItemList = QVector<TreeItem*>; Q_DECLARE_METATYPE(Qt::Orientation) - -typedef QTreeWidgetItem TreeItem; -typedef QList<TreeItem*> TreeItemList; - Q_DECLARE_METATYPE(QTreeWidgetItem*) Q_DECLARE_METATYPE(TreeItemList) -tst_QTreeWidget::tst_QTreeWidget(): testWidget(0) -{ -} - -tst_QTreeWidget::~tst_QTreeWidget() -{ -} - void tst_QTreeWidget::initTestCase() { - qMetaTypeId<QModelIndex>(); qMetaTypeId<Qt::Orientation>(); qRegisterMetaType<QTreeWidgetItem*>("QTreeWidgetItem*"); + qRegisterMetaType<QList<QPersistentModelIndex>>("QList<QPersistentModelIndex>"); + qRegisterMetaType<QAbstractItemModel::LayoutChangeHint>("QAbstractItemModel::LayoutChangeHint"); - testWidget = new CustomTreeWidget(); + testWidget = new PublicTreeWidget(); testWidget->show(); QVERIFY(QTest::qWaitForWindowExposed(testWidget)); } @@ -261,18 +256,19 @@ void tst_QTreeWidget::cleanup() { } -TreeItem *operator<<(TreeItem *parent, const TreeItemList &children) { - for (int i = 0; i < children.count(); ++i) - parent->addChild(children.at(i)); +TreeItem *operator<<(TreeItem *parent, const TreeItemList &children) +{ + for (TreeItem *child : children) + parent->addChild(child); return parent; } static void populate(QTreeWidget *widget, const TreeItemList &topLevelItems, - TreeItem *headerItem = 0) + TreeItem *headerItem = nullptr) { widget->clear(); widget->setHeaderItem(headerItem); - foreach (TreeItem *item, topLevelItems) + for (TreeItem *item : topLevelItems) widget->addTopLevelItem(item); } @@ -282,12 +278,12 @@ void tst_QTreeWidget::addTopLevelItem() QCOMPARE(tree.topLevelItemCount(), 0); // try to add 0 - tree.addTopLevelItem(0); + tree.addTopLevelItem(nullptr); QCOMPARE(tree.topLevelItemCount(), 0); - QCOMPARE(tree.indexOfTopLevelItem(0), -1); + QCOMPARE(tree.indexOfTopLevelItem(nullptr), -1); // add one at a time - QList<TreeItem*> tops; + QList<TreeItem *> tops; for (int i = 0; i < 10; ++i) { TreeItem *ti = new TreeItem(); QCOMPARE(tree.indexOfTopLevelItem(ti), -1); @@ -362,19 +358,19 @@ void tst_QTreeWidget::currentItem_data() QTest::newRow("only top-level items, 2 columns") << (TreeItemList() - << new TreeItem(QStringList() << "a" << "b") - << new TreeItem(QStringList() << "c" << "d")); + << new TreeItem({"a", "b"}) + << new TreeItem({"c", "d"})); TreeItemList lst; - lst << (new TreeItem(QStringList() << "a" << "b") + lst << (new TreeItem({"a", "b"}) << (TreeItemList() - << new TreeItem(QStringList() << "c" << "d") - << new TreeItem(QStringList() << "c" << "d") + << new TreeItem({"c", "d"}) + << new TreeItem({"c", "d"}) ) ) - << (new TreeItem(QStringList() << "e" << "f") + << (new TreeItem({"e", "f"}) << (TreeItemList() - << new TreeItem(QStringList() << "g" << "h") - << new TreeItem(QStringList() << "g" << "h") + << new TreeItem({"g", "h"}) + << new TreeItem({"g", "h"}) ) ); QTest::newRow("hierarchy, 2 columns") << lst; @@ -386,15 +382,15 @@ void tst_QTreeWidget::currentItem() QTreeWidget tree; tree.show(); - populate(&tree, topLevelItems, new TreeItem(QStringList() << "1" << "2")); - QTreeWidgetItem *previous = 0; + populate(&tree, topLevelItems, new TreeItem({"1", "2"})); + QTreeWidgetItem *previous = nullptr; for (int x = 0; x < 2; ++x) { tree.setSelectionBehavior(x ? QAbstractItemView::SelectItems : QAbstractItemView::SelectRows); QSignalSpy currentItemChangedSpy( - &tree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*))); + &tree, &QTreeWidget::currentItemChanged); QSignalSpy itemSelectionChangedSpy( - &tree, SIGNAL(itemSelectionChanged())); + &tree, &QTreeWidget::itemSelectionChanged); QTreeWidgetItemIterator it(&tree); // do all items @@ -468,8 +464,7 @@ void tst_QTreeWidget::editItem() tree.show(); QVERIFY(QTest::qWaitForWindowActive(&tree)); - QSignalSpy itemChangedSpy( - &tree, SIGNAL(itemChanged(QTreeWidgetItem*,int))); + QSignalSpy itemChangedSpy(&tree, &QTreeWidget::itemChanged); QTreeWidgetItemIterator it(&tree); while (QTreeWidgetItem *item = (*it++)) { @@ -477,18 +472,18 @@ void tst_QTreeWidget::editItem() if (!(item->flags() & Qt::ItemIsEditable)) QTest::ignoreMessage(QtWarningMsg, "edit: editing failed"); tree.editItem(item, col); - QApplication::instance()->processEvents(); - QApplication::instance()->processEvents(); + QCoreApplication::processEvents(); + QCoreApplication::processEvents(); QLineEdit *editor = tree.findChild<QLineEdit*>(); if (editor) { QVERIFY(item->flags() & Qt::ItemIsEditable); QCOMPARE(editor->selectedText(), editor->text()); QTest::keyClick(editor, Qt::Key_A); QTest::keyClick(editor, Qt::Key_Enter); - QApplication::instance()->processEvents(); + QCoreApplication::processEvents(); QCOMPARE(itemChangedSpy.count(), 1); QVariantList args = itemChangedSpy.takeFirst(); - QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item); + QCOMPARE(qvariant_cast<QTreeWidgetItem *>(args.at(0)), item); QCOMPARE(qvariant_cast<int>(args.at(1)), col); } else { QVERIFY(!(item->flags() & Qt::ItemIsEditable)); @@ -522,10 +517,10 @@ void tst_QTreeWidget::takeItem() QFETCH(bool, topLevel); QFETCH(bool, outOfBounds); - for (int i=0; i<3; ++i) { + for (int i = 0; i < 3; ++i) { QTreeWidgetItem *top = new QTreeWidgetItem(testWidget); top->setText(0, QStringLiteral("top") + QString::number(i)); - for (int j=0; j<3; ++j) { + for (int j = 0; j < 3; ++j) { QTreeWidgetItem *child = new QTreeWidgetItem(top); child->setText(0, QStringLiteral("child") + QString::number(j)); } @@ -635,27 +630,23 @@ void tst_QTreeWidget::setItemHidden() parent->setHidden(true); parent->setHidden(false); QVERIFY(!parent->isHidden()); - - } void tst_QTreeWidget::setItemHidden2() { // From Task 78587 - QStringList hl; - hl << "ID" << "Desc"; + const QStringList hl({"ID", "Desc"}); testWidget->setColumnCount(hl.count()); testWidget->setHeaderLabels(hl); testWidget->setSortingEnabled(true); QTreeWidgetItem *top = new QTreeWidgetItem(testWidget); - QTreeWidgetItem *leaf = 0; top->setText(0, "ItemList"); for (int i = 1; i <= 4; i++) { - leaf = new QTreeWidgetItem(top); - leaf->setText(0, QString::asprintf("%d", i)); - leaf->setText(1, QString::asprintf("Item %d", i)); + auto leaf = new QTreeWidgetItem(top); + leaf->setText(0, QString::number(i)); + leaf->setText(1, QStringLiteral("Item %1").arg(i)); } if (testWidget->topLevelItemCount() > 0) { @@ -666,11 +657,10 @@ void tst_QTreeWidget::setItemHidden2() if (testWidget->topLevelItemCount() > 0) { top = testWidget->topLevelItem(0); for (int i = 0; i < top->childCount(); i++) { - leaf = top->child(i); + auto leaf = top->child(i); if (leaf->text(0).toInt() % 2 == 0) { - if (!leaf->isHidden()) { + if (!leaf->isHidden()) leaf->setHidden(true); - } } } } @@ -799,25 +789,25 @@ void tst_QTreeWidget::selectedItems() QFETCH(int, topLevel); QFETCH(int, children); QFETCH(bool, closeTopLevel); - QFETCH(ListIntList, selectedItems); - QFETCH(ListIntList, hiddenItems); - QFETCH(ListIntList, expectedItems); + QFETCH(const ListIntList, selectedItems); + QFETCH(const ListIntList, hiddenItems); + QFETCH(const ListIntList, expectedItems); // create items - for (int t=0; t<topLevel; ++t) { + for (int t = 0; t < topLevel; ++t) { QTreeWidgetItem *top = new QTreeWidgetItem(testWidget); const QString topS = QLatin1String("top") + QString::number(t); top->setText(0, topS); - for (int c=0; c<children; ++c) { + for (int c = 0; c < children; ++c) { QTreeWidgetItem *child = new QTreeWidgetItem(top); child->setText(0, topS + QLatin1String("child") + QString::number(c)); } } // set selected - foreach (IntList itemPath, selectedItems) { - QTreeWidgetItem *item = 0; - foreach(int index, itemPath) { + for (const auto &itemPath : selectedItems) { + QTreeWidgetItem *item = nullptr; + for (int index : itemPath) { if (!item) item = testWidget->topLevelItem(index); else @@ -827,9 +817,9 @@ void tst_QTreeWidget::selectedItems() } // hide rows - foreach (IntList itemPath, hiddenItems) { - QTreeWidgetItem *item = 0; - foreach(int index, itemPath) { + for (const auto &itemPath : hiddenItems) { + QTreeWidgetItem *item = nullptr; + for (int index : itemPath) { if (!item) item = testWidget->topLevelItem(index); else @@ -839,7 +829,7 @@ void tst_QTreeWidget::selectedItems() } // open/close toplevel - for (int i=0; i<testWidget->topLevelItemCount(); ++i) { + for (int i = 0; i < testWidget->topLevelItemCount(); ++i) { if (closeTopLevel) testWidget->collapseItem(testWidget->topLevelItem(i)); else @@ -847,26 +837,26 @@ void tst_QTreeWidget::selectedItems() } // check selectedItems - QList<QTreeWidgetItem*> sel = testWidget->selectedItems(); + const auto sel = testWidget->selectedItems(); QCOMPARE(sel.count(), expectedItems.count()); - foreach (IntList itemPath, expectedItems) { - QTreeWidgetItem *item = 0; - foreach(int index, itemPath) { + for (const auto &itemPath : expectedItems) { + QTreeWidgetItem *item = nullptr; + for (int index : itemPath) { if (!item) item = testWidget->topLevelItem(index); else item = item->child(index); } if (item) - QVERIFY(sel.contains(item)); + QVERIFY(sel.contains(item)); } // compare isSelected - for (int t=0; t<testWidget->topLevelItemCount(); ++t) { + for (int t = 0; t < testWidget->topLevelItemCount(); ++t) { QTreeWidgetItem *top = testWidget->topLevelItem(t); if (top->isSelected() && !top->isHidden()) QVERIFY(sel.contains(top)); - for (int c=0; c<top->childCount(); ++c) { + for (int c = 0; c < top->childCount(); ++c) { QTreeWidgetItem *child = top->child(c); if (child->isSelected() && !child->isHidden()) QVERIFY(sel.contains(child)); @@ -883,9 +873,9 @@ QT_WARNING_POP #endif // unselect - foreach (IntList itemPath, selectedItems) { - QTreeWidgetItem *item = 0; - foreach(int index, itemPath) { + for (const auto &itemPath : selectedItems) { + QTreeWidgetItem *item = nullptr; + for (int index : itemPath) { if (!item) item = testWidget->topLevelItem(index); else @@ -903,7 +893,7 @@ void tst_QTreeWidget::itemAssignment() QTreeWidgetItem *parent = new QTreeWidgetItem(&grandParent); parent->setText(0, "foo"); parent->setText(1, "bar"); - for (int i=0; i<5; ++i) { + for (int i = 0; i < 5; ++i) { QTreeWidgetItem *child = new QTreeWidgetItem(parent); child->setText(0, "bingo"); child->setText(1, "bango"); @@ -919,7 +909,7 @@ void tst_QTreeWidget::itemAssignment() QTreeWidgetItem item(testWidget); item.setText(0, "baz"); QVERIFY(!item.parent()); - QCOMPARE(item.treeWidget(), static_cast<QTreeWidget *>(testWidget)); + QCOMPARE(item.treeWidget(), testWidget); QCOMPARE(item.columnCount(), 1); QCOMPARE(item.text(0), QString("baz")); QCOMPARE(item.childCount(), 0); @@ -959,16 +949,16 @@ void tst_QTreeWidget::clone() QFETCH(int, column); QFETCH(int, topLevelIndex); QFETCH(int, childIndex); - QFETCH(QStringList, topLevelText); - QFETCH(QStringList, childText); + QFETCH(const QStringList, topLevelText); + QFETCH(const QStringList, childText); QFETCH(bool, cloneChild); - for (int i = 0; i < topLevelText.count(); ++i) { + for (const QString &tl : topLevelText) { QTreeWidgetItem *item = new QTreeWidgetItem(testWidget); - item->setText(column, topLevelText.at(i)); - for (int j = 0; j < childText.count(); ++j) { + item->setText(column, tl); + for (const QString &cl : childText) { QTreeWidgetItem *child = new QTreeWidgetItem(item); - child->setText(column, childText.at(j)); + child->setText(column, cl); } } @@ -984,7 +974,7 @@ void tst_QTreeWidget::clone() QVERIFY(copiedChild != originalChild); QCOMPARE(copiedChild->text(column), originalChild->text(column)); QCOMPARE(copiedChild->childCount(), originalChild->childCount()); - QCOMPARE(copiedChild->parent(), cloneChild ? 0 : copy); + QCOMPARE(copiedChild->parent(), cloneChild ? nullptr : copy); QVERIFY(!copiedChild->treeWidget()); if (cloneChild) delete copiedChild; @@ -1109,18 +1099,18 @@ void tst_QTreeWidget::findItems_data() void tst_QTreeWidget::findItems() { QFETCH(int, column); - QFETCH(QStringList, topLevelText); - QFETCH(QStringList, childText); + QFETCH(const QStringList, topLevelText); + QFETCH(const QStringList, childText); QFETCH(QString, pattern); QFETCH(int, resultCount); - QFETCH(QStringList, resultText); + QFETCH(const QStringList, resultText); - for (int i = 0; i < topLevelText.count(); ++i) { + for (const QString &tl : topLevelText) { QTreeWidgetItem *item = new QTreeWidgetItem(testWidget); - item->setText(column, topLevelText.at(i)); - for (int j = 0; j < childText.count(); ++j) { + item->setText(column, tl); + for (const QString &cl : childText) { QTreeWidgetItem *child = new QTreeWidgetItem(item); - child->setText(column, childText.at(j)); + child->setText(column, cl); } } @@ -1152,7 +1142,7 @@ void tst_QTreeWidget::findItemsInColumn() void tst_QTreeWidget::sortItems_data() { QTest::addColumn<int>("column"); - QTest::addColumn<int>("order"); + QTest::addColumn<Qt::SortOrder>("order"); QTest::addColumn<QStringList>("topLevelText"); QTest::addColumn<QStringList>("childText"); QTest::addColumn<QStringList>("topLevelResult"); @@ -1162,7 +1152,7 @@ void tst_QTreeWidget::sortItems_data() QTest::newRow("ascending order") << 0 - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "c" << "d" << "a" << "b") << (QStringList() << "e" << "h" << "g" << "f") << (QStringList() << "a" << "b" << "c" << "d") @@ -1172,7 +1162,7 @@ void tst_QTreeWidget::sortItems_data() QTest::newRow("descending order") << 0 - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << (QStringList() << "c" << "d" << "a" << "b") << (QStringList() << "e" << "h" << "g" << "f") << (QStringList() << "d" << "c" << "b" << "a") @@ -1184,7 +1174,7 @@ void tst_QTreeWidget::sortItems_data() void tst_QTreeWidget::sortItems() { QFETCH(int, column); - QFETCH(int, order); + QFETCH(Qt::SortOrder, order); QFETCH(QStringList, topLevelText); QFETCH(QStringList, childText); QFETCH(QStringList, topLevelResult); @@ -1193,28 +1183,24 @@ void tst_QTreeWidget::sortItems() QFETCH(IntList, expectedChildRows); testWidget->setSortingEnabled(false); - for (int i = 0; i < topLevelText.count(); ++i) { + for (const QString &tl : topLevelText) { QTreeWidgetItem *item = new QTreeWidgetItem(testWidget); - item->setText(column, topLevelText.at(i)); - for (int j = 0; j < childText.count(); ++j) { + item->setText(column, tl); + for (const QString &cl : childText) { QTreeWidgetItem *child = new QTreeWidgetItem(item); - child->setText(column, childText.at(j)); + child->setText(column, cl); } } QAbstractItemModel *model = testWidget->model(); - QList<QPersistentModelIndex> tops; - for (int r = 0; r < model->rowCount(QModelIndex()); ++r) { - QPersistentModelIndex p = model->index(r, 0, QModelIndex()); - tops << p; - } - QList<QPersistentModelIndex> children; - for (int s = 0; s < model->rowCount(tops.first()); ++s) { - QPersistentModelIndex c = model->index(s, 0, tops.first()); - children << c; - } - - testWidget->sortItems(column, static_cast<Qt::SortOrder>(order)); + PersistentModelIndexVec tops; + for (int r = 0; r < model->rowCount(QModelIndex()); ++r) + tops.push_back(model->index(r, 0, QModelIndex())); + PersistentModelIndexVec children; + for (int s = 0; s < model->rowCount(tops.constFirst()); ++s) + children.push_back(model->index(s, 0, tops.constFirst())); + + testWidget->sortItems(column, order); QCOMPARE(testWidget->sortColumn(), column); for (int k = 0; k < topLevelResult.count(); ++k) { @@ -1382,8 +1368,8 @@ void tst_QTreeWidget::insertTopLevelItems_data() QTest::addColumn<int>("insertChildIndex"); QTest::addColumn<int>("expectedChildIndex"); - QStringList initial = (QStringList() << "foo" << "bar"); - QStringList insert = (QStringList() << "baz"); + const QStringList initial{ "foo", "bar" }; + const QStringList insert{ "baz" }; QTest::newRow("Insert at count") << initial << insert << initial.count() << initial.count() @@ -1434,7 +1420,7 @@ void tst_QTreeWidget::insertTopLevelItems() delete topsy; } else { QTreeWidgetItem *item = testWidget->topLevelItem(expectedTopLevelIndex); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QCOMPARE(item->text(0), insertText.at(0)); QCOMPARE(testWidget->indexOfTopLevelItem(item), expectedTopLevelIndex); } @@ -1442,7 +1428,7 @@ void tst_QTreeWidget::insertTopLevelItems() { // test adding more children QTreeWidgetItem *topLevel = testWidget->topLevelItem(0); - QVERIFY(topLevel != 0); + QVERIFY(topLevel != nullptr); QTreeWidgetItem *child = new QTreeWidgetItem(QStringList(insertText.at(0))); topLevel->insertChild(insertChildIndex, child); if (expectedChildIndex == -1) { @@ -1450,7 +1436,7 @@ void tst_QTreeWidget::insertTopLevelItems() delete child; } else { QTreeWidgetItem *item = topLevel->child(expectedChildIndex); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QCOMPARE(item->text(0), insertText.at(0)); } } @@ -1486,37 +1472,33 @@ void tst_QTreeWidget::keyboardNavigation() fillTreeWidget(testWidget, rows); - QVector<Qt::Key> keymoves; - keymoves << Qt::Key_Down << Qt::Key_Right << Qt::Key_Left - << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down - << Qt::Key_Right - << Qt::Key_Up << Qt::Key_Left << Qt::Key_Left - << Qt::Key_Up << Qt::Key_Down << Qt::Key_Up << Qt::Key_Up - << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up - << Qt::Key_Down << Qt::Key_Right << Qt::Key_Down << Qt::Key_Down - << Qt::Key_Down << Qt::Key_Right << Qt::Key_Down << Qt::Key_Down - << Qt::Key_Left << Qt::Key_Left << Qt::Key_Up << Qt::Key_Down - << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Left - << Qt::Key_Down << Qt::Key_Right << Qt::Key_Right << Qt::Key_Right - << Qt::Key_Left << Qt::Key_Left << Qt::Key_Right << Qt::Key_Left; - - int row = 0; + const QVector<Qt::Key> keymoves { + Qt::Key_Down, Qt::Key_Right, Qt::Key_Left, + Qt::Key_Down, Qt::Key_Down, Qt::Key_Down, Qt::Key_Down, + Qt::Key_Right, + Qt::Key_Up, Qt::Key_Left, Qt::Key_Left, + Qt::Key_Up, Qt::Key_Down, Qt::Key_Up, Qt::Key_Up, + Qt::Key_Up, Qt::Key_Up, Qt::Key_Up, Qt::Key_Up, + Qt::Key_Down, Qt::Key_Right, Qt::Key_Down, Qt::Key_Down, + Qt::Key_Down, Qt::Key_Right, Qt::Key_Down, Qt::Key_Down, + Qt::Key_Left, Qt::Key_Left, Qt::Key_Up, Qt::Key_Down, + Qt::Key_Up, Qt::Key_Up, Qt::Key_Up, Qt::Key_Left, + Qt::Key_Down, Qt::Key_Right, Qt::Key_Right, Qt::Key_Right, + Qt::Key_Left, Qt::Key_Left, Qt::Key_Right, Qt::Key_Left + }; + + int row = 0; QTreeWidgetItem *item = testWidget->topLevelItem(0); testWidget->setCurrentItem(item); QCOMPARE(testWidget->currentItem(), item); - QApplication::instance()->processEvents(); + QCoreApplication::processEvents(); QScrollBar *scrollBar = testWidget->horizontalScrollBar(); - bool checkScroll = false; - for (int i = 0; i < keymoves.size(); ++i) { - Qt::Key key = keymoves.at(i); + for (const Qt::Key key : keymoves) { int valueBeforeClick = scrollBar->value(); - if (valueBeforeClick >= scrollBar->singleStep()) - checkScroll = true; - else - checkScroll = false; + const bool checkScroll = (valueBeforeClick >= scrollBar->singleStep()); QTest::keyClick(testWidget, key); - QApplication::instance()->processEvents(); + QCoreApplication::processEvents(); switch (key) { case Qt::Key_Up: @@ -1611,15 +1593,15 @@ void tst_QTreeWidget::scrollToItem() // Check if all parent nodes of the item found are expanded. // Reported in task #78761 QTreeWidgetItem *search = nullptr; - for (int i=0; i<2; ++i) { + for (int i = 0; i < 2; ++i) { QTreeWidgetItem *bar = new QTreeWidgetItem(testWidget); bar->setText(0, QString::number(i)); - for (int j=0; j<2; ++j) { + for (int j = 0; j < 2; ++j) { QTreeWidgetItem *foo = new QTreeWidgetItem(bar); foo->setText(0, bar->text(0) + QString::number(j)); - for (int k=0; k<2; ++k) { + for (int k = 0; k < 2; ++k) { search = new QTreeWidgetItem(foo); search->setText(0, foo->text(0) + QString::number(k)); } @@ -1639,8 +1621,7 @@ void tst_QTreeWidget::scrollToItem() // From task #85413 void tst_QTreeWidget::setSortingEnabled() { - QStringList hl; - hl << "ID"; + const QStringList hl{ "ID" }; testWidget->setColumnCount(hl.count()); testWidget->setHeaderLabels(hl); @@ -1682,14 +1663,14 @@ void tst_QTreeWidget::addChild() { QTreeWidget tree; for (int x = 0; x < 2; ++x) { - QTreeWidget *view = x ? &tree : static_cast<QTreeWidget*>(0); - QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)view); + QTreeWidget *view = x ? &tree : static_cast<QTreeWidget*>(nullptr); + QTreeWidgetItem *item = new QTreeWidgetItem(view); QCOMPARE(item->childCount(), 0); // try to add 0 - item->addChild(0); + item->addChild(nullptr); QCOMPARE(item->childCount(), 0); - QCOMPARE(item->indexOfChild(0), -1); + QCOMPARE(item->indexOfChild(nullptr), -1); // add one at a time QList<QTreeWidgetItem*> children; @@ -1762,11 +1743,11 @@ void tst_QTreeWidget::setData() testWidget->setHeaderItem(headerItem); QSignalSpy headerDataChangedSpy( - testWidget->model(), SIGNAL(headerDataChanged(Qt::Orientation,int,int))); + testWidget->model(), &QAbstractItemModel::headerDataChanged); QSignalSpy dataChangedSpy( - testWidget->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex))); + testWidget->model(), &QAbstractItemModel::dataChanged); QSignalSpy itemChangedSpy( - testWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int))); + testWidget, &QTreeWidget::itemChanged); headerItem->setText(0, "test"); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(headerDataChangedSpy.count(), 1); @@ -1777,7 +1758,7 @@ void tst_QTreeWidget::setData() { QSignalSpy itemChangedSpy( - testWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int))); + testWidget, &QTreeWidget::itemChanged); QTreeWidgetItem *item = new QTreeWidgetItem(); testWidget->addTopLevelItem(item); for (int x = 0; x < 2; ++x) { @@ -2069,7 +2050,7 @@ void tst_QTreeWidget::setHeaderLabels() void tst_QTreeWidget::setHeaderItem() { - testWidget->setHeaderItem(0); + testWidget->setHeaderItem(nullptr); QTreeWidgetItem *headerItem = new QTreeWidgetItem(); testWidget->setColumnCount(0); @@ -2118,7 +2099,7 @@ void tst_QTreeWidget::itemWidget() QFETCH(TreeItemList, topLevelItems); QTreeWidget tree; - populate(&tree, topLevelItems, new TreeItem(QStringList() << "1" << "2")); + populate(&tree, topLevelItems, new TreeItem({"1", "2"})); tree.show(); for (int x = 0; x < 2; ++x) { @@ -2126,18 +2107,18 @@ void tst_QTreeWidget::itemWidget() while (QTreeWidgetItem *item = (*it++)) { for (int col = 0; col < item->columnCount(); ++col) { if (x == 0) { - QCOMPARE(tree.itemWidget(item, col), static_cast<QWidget*>(0)); + QCOMPARE(tree.itemWidget(item, col), nullptr); QWidget *editor = new QLineEdit(); tree.setItemWidget(item, col, editor); QCOMPARE(tree.itemWidget(item, col), editor); tree.removeItemWidget(item, col); - QCOMPARE(tree.itemWidget(item, col), static_cast<QWidget*>(0)); + QCOMPARE(tree.itemWidget(item, col), nullptr); } else { // ### should you really be able to open a persistent // editor for an item that isn't editable?? tree.openPersistentEditor(item, col); QWidget *editor = tree.findChild<QLineEdit*>(); - QVERIFY(editor != 0); + QVERIFY(editor != nullptr); tree.closePersistentEditor(item, col); } } @@ -2147,50 +2128,50 @@ void tst_QTreeWidget::itemWidget() void tst_QTreeWidget::insertItemsWithSorting_data() { - QTest::addColumn<int>("sortOrder"); + QTest::addColumn<Qt::SortOrder>("sortOrder"); QTest::addColumn<QStringList>("initialItems"); QTest::addColumn<QStringList>("insertItems"); QTest::addColumn<QStringList>("expectedItems"); QTest::addColumn<IntList>("expectedRows"); QTest::newRow("() + (a) = (a)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << QStringList() << (QStringList() << "a") << (QStringList() << "a") << IntList(); QTest::newRow("() + (c, b, a) = (a, b, c)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << QStringList() << (QStringList() << "c" << "b" << "a") << (QStringList() << "a" << "b" << "c") << IntList(); QTest::newRow("() + (a, b, c) = (c, b, a)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << QStringList() << (QStringList() << "a" << "b" << "c") << (QStringList() << "c" << "b" << "a") << IntList(); QTest::newRow("(a) + (b) = (a, b)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << QStringList("a") << (QStringList() << "b") << (QStringList() << "a" << "b") << (IntList() << 0); QTest::newRow("(a) + (b) = (b, a)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << QStringList("a") << (QStringList() << "b") << (QStringList() << "b" << "a") << (IntList() << 1); QTest::newRow("(a, c, b) + (d) = (a, b, c, d)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "b") << (QStringList() << "d") << (QStringList() << "a" << "b" << "c" << "d") << (IntList() << 0 << 1 << 2); QTest::newRow("(b, c, a) + (d) = (d, c, b, a)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << (QStringList() << "b" << "c" << "a") << (QStringList() << "d") << (QStringList() << "d" << "c" << "b" << "a") @@ -2200,38 +2181,38 @@ void tst_QTreeWidget::insertItemsWithSorting_data() IntList reverseRows; QStringList ascendingItems; QStringList reverseItems; - for (int i = 'a'; i <= 'z'; ++i) { + for (char i = 'a'; i <= 'z'; ++i) { ascendingItems << QString(1, QLatin1Char(i)); reverseItems << QString(1, QLatin1Char('z' - i + 'a')); ascendingRows << i - 'a'; reverseRows << 'z' - i + 'a'; } QTest::newRow("() + (sorted items) = (sorted items)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << QStringList() << ascendingItems << ascendingItems << IntList(); QTest::newRow("(sorted items) + () = (sorted items)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << ascendingItems << QStringList() << ascendingItems << ascendingRows; QTest::newRow("() + (ascending items) = (reverse items)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << QStringList() << ascendingItems << reverseItems << IntList(); QTest::newRow("(reverse items) + () = (ascending items)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << reverseItems << QStringList() << ascendingItems << ascendingRows; QTest::newRow("(reverse items) + () = (reverse items)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << reverseItems << QStringList() << reverseItems @@ -2241,57 +2222,57 @@ void tst_QTreeWidget::insertItemsWithSorting_data() void tst_QTreeWidget::insertItemsWithSorting() { - QFETCH(int, sortOrder); - QFETCH(QStringList, initialItems); - QFETCH(QStringList, insertItems); - QFETCH(QStringList, expectedItems); + QFETCH(Qt::SortOrder, sortOrder); + QFETCH(const QStringList, initialItems); + QFETCH(const QStringList, insertItems); + QFETCH(const QStringList, expectedItems); QFETCH(IntList, expectedRows); for (int method = 0; method < 5; ++method) { QTreeWidget w; w.setSortingEnabled(true); - w.sortItems(0, static_cast<Qt::SortOrder>(sortOrder)); - for (int i = 0; i < initialItems.count(); ++i) - w.addTopLevelItem(new QTreeWidgetItem(QStringList() << initialItems.at(i))); + w.sortItems(0, sortOrder); + for (const QString &initialItem : initialItems) + w.addTopLevelItem(new QTreeWidgetItem({initialItem})); QAbstractItemModel *model = w.model(); - QList<QPersistentModelIndex> persistent; + PersistentModelIndexVec persistent; for (int j = 0; j < model->rowCount(QModelIndex()); ++j) persistent << model->index(j, 0, QModelIndex()); switch (method) { case 0: // insert using item constructor - for (int i = 0; i < insertItems.size(); ++i) - new QTreeWidgetItem(&w, QStringList() << insertItems.at(i)); + for (const QString &txt : insertItems) + new QTreeWidgetItem(&w, { txt }); break; case 1: { // insert using insertTopLevelItems() QList<QTreeWidgetItem*> lst; - for (int i = 0; i < insertItems.size(); ++i) - lst << new QTreeWidgetItem(QStringList() << insertItems.at(i)); + for (const QString &txt : insertItems) + lst << new QTreeWidgetItem({ txt }); w.insertTopLevelItems(0, lst); break; } case 2: // insert using insertTopLevelItem() - for (int i = 0; i < insertItems.size(); ++i) - w.insertTopLevelItem(0, new QTreeWidgetItem(QStringList() << insertItems.at(i))); + for (const QString &txt : insertItems) + w.insertTopLevelItem(0, new QTreeWidgetItem({ txt })); break; case 3: { // insert using addTopLevelItems() QList<QTreeWidgetItem*> lst; - for (int i = 0; i < insertItems.size(); ++i) - lst << new QTreeWidgetItem(QStringList() << insertItems.at(i)); + for (const QString &txt : insertItems) + lst << new QTreeWidgetItem({ txt }); w.addTopLevelItems(lst); break; } case 4: // insert using addTopLevelItem() - for (int i = 0; i < insertItems.size(); ++i) - w.addTopLevelItem(new QTreeWidgetItem(QStringList() << insertItems.at(i))); + for (const QString &txt : insertItems) + w.addTopLevelItem(new QTreeWidgetItem({ txt })); break; } QCOMPARE(w.topLevelItemCount(), expectedItems.count()); @@ -2305,8 +2286,8 @@ void tst_QTreeWidget::insertItemsWithSorting() void tst_QTreeWidget::insertExpandedItemsWithSorting_data() { - QTest::addColumn<QStringList>("parentText"); - QTest::addColumn<QStringList>("childText"); + QTest::addColumn<QStringList>("parentTexts"); + QTest::addColumn<QStringList>("childTexts"); QTest::addColumn<QStringList>("parentResult"); QTest::addColumn<QStringList>("childResult"); QTest::newRow("test 1") @@ -2319,36 +2300,36 @@ void tst_QTreeWidget::insertExpandedItemsWithSorting_data() // From Task 134978 void tst_QTreeWidget::insertExpandedItemsWithSorting() { - QFETCH(QStringList, parentText); - QFETCH(QStringList, childText); - QFETCH(QStringList, parentResult); - QFETCH(QStringList, childResult); + QFETCH(const QStringList, parentTexts); + QFETCH(const QStringList, childTexts); + QFETCH(const QStringList, parentResult); + QFETCH(const QStringList, childResult); // create a tree with autosorting enabled - CustomTreeWidget tree; + PublicTreeWidget tree; tree.setSortingEnabled(true); // insert expanded items in unsorted order - QList<QTreeWidgetItem *> items; - for (int i = 0; i < parentText.count(); ++i) { - QTreeWidgetItem *parent = new QTreeWidgetItem(&tree, QStringList(parentText.at(i))); + QVector<QTreeWidgetItem *> items; + for (const QString &text : parentTexts) { + QTreeWidgetItem *parent = new QTreeWidgetItem(&tree, {text}); parent->setExpanded(true); QVERIFY(parent->isExpanded()); items << parent; - for (int j = 0; j < childText.count(); ++j) { - QTreeWidgetItem *child = new QTreeWidgetItem(parent, QStringList(childText.at(j))); + for (const QString &text : childTexts) { + QTreeWidgetItem *child = new QTreeWidgetItem(parent, {text}); items << child; } - QCOMPARE(parent->childCount(), childText.count()); + QCOMPARE(parent->childCount(), childTexts.count()); QVERIFY(parent->isExpanded()); } - QCOMPARE(tree.model()->rowCount(), parentText.count()); + QCOMPARE(tree.model()->rowCount(), parentTexts.count()); // verify that the items are still expanded - foreach (QTreeWidgetItem *item, items) { + for (const QTreeWidgetItem *item : qAsConst(items)) { if (item->childCount() > 0) QVERIFY(item->isExpanded()); - QModelIndex idx = tree.indexFromItem(const_cast<QTreeWidgetItem *>(item)); + QModelIndex idx = tree.indexFromItem(item); QVERIFY(idx.isValid()); //QRect rect = tree.visualRect(idx); //QVERIFY(rect.isValid()); @@ -2357,16 +2338,12 @@ void tst_QTreeWidget::insertExpandedItemsWithSorting() // verify that the tree is sorted QAbstractItemModel *model = tree.model(); - QList<QPersistentModelIndex> parents; - for (int i = 0; i < model->rowCount(QModelIndex()); ++i) { - QPersistentModelIndex parent = model->index(i, 0, QModelIndex()); - parents << parent; - } - QList<QPersistentModelIndex> children; - for (int i = 0; i < model->rowCount(parents.first()); ++i) { - QPersistentModelIndex child = model->index(i, 0, parents.first()); - children << child; - } + PersistentModelIndexVec parents; + for (int i = 0; i < model->rowCount(QModelIndex()); ++i) + parents.push_back(model->index(i, 0, QModelIndex())); + PersistentModelIndexVec children; + for (int i = 0; i < model->rowCount(parents.constFirst()); ++i) + children.push_back(model->index(i, 0, parents.constFirst())); for (int i = 0; i < parentResult.count(); ++i) { QTreeWidgetItem *item = tree.topLevelItem(i); QCOMPARE(item->text(0), parentResult.at(i)); @@ -2377,7 +2354,7 @@ void tst_QTreeWidget::insertExpandedItemsWithSorting() void tst_QTreeWidget::changeDataWithSorting_data() { - QTest::addColumn<int>("sortOrder"); + QTest::addColumn<Qt::SortOrder>("sortOrder"); QTest::addColumn<QStringList>("initialItems"); QTest::addColumn<int>("itemIndex"); QTest::addColumn<QString>("newValue"); @@ -2386,49 +2363,49 @@ void tst_QTreeWidget::changeDataWithSorting_data() QTest::addColumn<bool>("reorderingExpected"); QTest::newRow("change a to b in (a)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a") << 0 << "b" << (QStringList() << "b") << (IntList() << 0) << false; QTest::newRow("change a to b in (a, c)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c") << 0 << "b" << (QStringList() << "b" << "c") << (IntList() << 0 << 1) << false; QTest::newRow("change a to c in (a, b)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "b") << 0 << "c" << (QStringList() << "b" << "c") << (IntList() << 1 << 0) << true; QTest::newRow("change c to a in (c, b)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << (QStringList() << "c" << "b") << 0 << "a" << (QStringList() << "b" << "a") << (IntList() << 1 << 0) << true; QTest::newRow("change e to i in (a, c, e, g)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "e" << "g") << 2 << "i" << (QStringList() << "a" << "c" << "g" << "i") << (IntList() << 0 << 1 << 3 << 2) << true; QTest::newRow("change e to a in (c, e, g, i)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "c" << "e" << "g" << "i") << 1 << "a" << (QStringList() << "a" << "c" << "g" << "i") << (IntList() << 1 << 0 << 2 << 3) << true; QTest::newRow("change e to f in (c, e, g, i)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "c" << "e" << "g" << "i") << 1 << "f" << (QStringList() << "c" << "f" << "g" << "i") @@ -2438,35 +2415,35 @@ void tst_QTreeWidget::changeDataWithSorting_data() void tst_QTreeWidget::changeDataWithSorting() { - QFETCH(int, sortOrder); - QFETCH(QStringList, initialItems); + QFETCH(Qt::SortOrder, sortOrder); + QFETCH(const QStringList, initialItems); QFETCH(int, itemIndex); - QFETCH(QString, newValue); - QFETCH(QStringList, expectedItems); - QFETCH(IntList, expectedRows); + QFETCH(const QString, newValue); + QFETCH(const QStringList, expectedItems); + QFETCH(const IntList, expectedRows); QFETCH(bool, reorderingExpected); QTreeWidget w; w.setSortingEnabled(true); - w.sortItems(0, static_cast<Qt::SortOrder>(sortOrder)); - for (int i = 0; i < initialItems.count(); ++i) - w.addTopLevelItem(new QTreeWidgetItem(QStringList() << initialItems.at(i))); + w.sortItems(0, sortOrder); + for (const QString &str : initialItems) + w.addTopLevelItem(new QTreeWidgetItem({ str })); QAbstractItemModel *model = w.model(); - QList<QPersistentModelIndex> persistent; + PersistentModelIndexVec persistent; for (int j = 0; j < model->rowCount(QModelIndex()); ++j) persistent << model->index(j, 0, QModelIndex()); - QSignalSpy dataChangedSpy(model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); - QSignalSpy layoutChangedSpy(model, SIGNAL(layoutChanged())); + QSignalSpy dataChangedSpy(model, &QAbstractItemModel::dataChanged); + QSignalSpy layoutChangedSpy(model, &QAbstractItemModel::layoutChanged); QTreeWidgetItem *item = w.topLevelItem(itemIndex); item->setText(0, newValue); for (int i = 0; i < expectedItems.count(); ++i) { QCOMPARE(w.topLevelItem(i)->text(0), expectedItems.at(i)); - for (int j = 0; j < persistent.count(); ++j) { - if (persistent.at(j).row() == i) // the same toplevel row - QCOMPARE(persistent.at(j).internalPointer(), (void *)w.topLevelItem(i)); + for (const QPersistentModelIndex &p : qAsConst(persistent)) { + if (p.row() == i) // the same toplevel row + QCOMPARE(p.internalPointer(), static_cast<void *>(w.topLevelItem(i))); } } @@ -2479,7 +2456,7 @@ void tst_QTreeWidget::changeDataWithSorting() void tst_QTreeWidget::changeDataWithStableSorting_data() { - QTest::addColumn<int>("sortOrder"); + QTest::addColumn<Qt::SortOrder>("sortOrder"); QTest::addColumn<QStringList>("initialItems"); QTest::addColumn<int>("itemIndex"); QTest::addColumn<QString>("newValue"); @@ -2489,7 +2466,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() QTest::addColumn<bool>("forceChange"); QTest::newRow("change a to c in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 0 << "c" << (QStringList() << "c" << "c" << "c" << "c" << "e") @@ -2497,7 +2474,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << false; QTest::newRow("change e to c in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 4 << "c" << (QStringList() << "a" << "c" << "c" << "c" << "c") @@ -2505,7 +2482,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << false; QTest::newRow("change 1st c to c in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 1 << "c" << (QStringList() << "a" << "c" << "c" << "c" << "e") @@ -2513,7 +2490,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << true; QTest::newRow("change 2nd c to c in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 2 << "c" << (QStringList() << "a" << "c" << "c" << "c" << "e") @@ -2521,7 +2498,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << true; QTest::newRow("change 3rd c to c in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 3 << "c" << (QStringList() << "a" << "c" << "c" << "c" << "e") @@ -2529,7 +2506,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << true; QTest::newRow("change 1st c to c in (e, c, c, c, a)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << (QStringList() << "e" << "c" << "c" << "c" << "a") << 1 << "c" << (QStringList() << "e" << "c" << "c" << "c" << "a") @@ -2537,7 +2514,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << true; QTest::newRow("change 2nd c to c in (e, c, c, c, a)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << (QStringList() << "e" << "c" << "c" << "c" << "a") << 2 << "c" << (QStringList() << "e" << "c" << "c" << "c" << "a") @@ -2545,7 +2522,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << true; QTest::newRow("change 3rd c to c in (e, c, c, c, a)") - << static_cast<int>(Qt::DescendingOrder) + << Qt::DescendingOrder << (QStringList() << "e" << "c" << "c" << "c" << "a") << 3 << "c" << (QStringList() << "e" << "c" << "c" << "c" << "a") @@ -2553,7 +2530,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << true; QTest::newRow("change 1st c to b in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 1 << "b" << (QStringList() << "a" << "b" << "c" << "c" << "e") @@ -2561,7 +2538,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << false << false; QTest::newRow("change 2nd c to b in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 2 << "b" << (QStringList() << "a" << "b" << "c" << "c" << "e") @@ -2569,7 +2546,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << true << false; QTest::newRow("change 3rd c to b in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 3 << "b" << (QStringList() << "a" << "b" << "c" << "c" << "e") @@ -2577,7 +2554,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << true << false; QTest::newRow("change 1st c to d in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 1 << "d" << (QStringList() << "a" << "c" << "c" << "d" << "e") @@ -2585,7 +2562,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << true << false; QTest::newRow("change 2nd c to d in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 2 << "d" << (QStringList() << "a" << "c" << "c" << "d" << "e") @@ -2593,7 +2570,7 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() << true << false; QTest::newRow("change 3rd c to d in (a, c, c, c, e)") - << static_cast<int>(Qt::AscendingOrder) + << Qt::AscendingOrder << (QStringList() << "a" << "c" << "c" << "c" << "e") << 3 << "d" << (QStringList() << "a" << "c" << "c" << "d" << "e") @@ -2604,47 +2581,38 @@ void tst_QTreeWidget::changeDataWithStableSorting_data() void tst_QTreeWidget::changeDataWithStableSorting() { - QFETCH(int, sortOrder); - QFETCH(QStringList, initialItems); + QFETCH(Qt::SortOrder, sortOrder); + QFETCH(const QStringList, initialItems); QFETCH(int, itemIndex); - QFETCH(QString, newValue); - QFETCH(QStringList, expectedItems); - QFETCH(IntList, expectedRows); + QFETCH(const QString, newValue); + QFETCH(const QStringList, expectedItems); + QFETCH(const IntList, expectedRows); QFETCH(bool, reorderingExpected); QFETCH(bool, forceChange); - class StableItem : public QTreeWidgetItem - { - public: - StableItem(const QStringList &strings) : QTreeWidgetItem(strings, QTreeWidgetItem::UserType) {} - void forceChangeData() { - emitDataChanged(); - } - }; - QTreeWidget w; w.setSortingEnabled(true); - w.sortItems(0, static_cast<Qt::SortOrder>(sortOrder)); - for (int i = 0; i < initialItems.count(); ++i) - w.addTopLevelItem(new StableItem(QStringList() << initialItems.at(i))); + w.sortItems(0, sortOrder); + for (const QString &str : initialItems) + w.addTopLevelItem(new PublicTreeItem({ str })); QAbstractItemModel *model = w.model(); - QList<QPersistentModelIndex> persistent; + PersistentModelIndexVec persistent; for (int j = 0; j < model->rowCount(QModelIndex()); ++j) persistent << model->index(j, 0, QModelIndex()); - QSignalSpy dataChangedSpy(model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); - QSignalSpy layoutChangedSpy(model, SIGNAL(layoutChanged())); + QSignalSpy dataChangedSpy(model, &QAbstractItemModel::dataChanged); + QSignalSpy layoutChangedSpy(model, &QAbstractItemModel::layoutChanged); - StableItem *item = static_cast<StableItem *>(w.topLevelItem(itemIndex)); + auto *item = static_cast<PublicTreeItem *>(w.topLevelItem(itemIndex)); item->setText(0, newValue); if (forceChange) - item->forceChangeData(); + item->emitDataChanged(); for (int i = 0; i < expectedItems.count(); ++i) { QCOMPARE(w.topLevelItem(i)->text(0), expectedItems.at(i)); - for (int j = 0; j < persistent.count(); ++j) { - if (persistent.at(j).row() == i) // the same toplevel row - QCOMPARE(persistent.at(j).internalPointer(), (void *)w.topLevelItem(i)); + for (const QPersistentModelIndex &p : qAsConst(persistent)) { + if (p.row() == i) // the same toplevel row + QCOMPARE(p.internalPointer(), static_cast<void *>(w.topLevelItem(i))); } } @@ -2657,24 +2625,24 @@ void tst_QTreeWidget::changeDataWithStableSorting() void tst_QTreeWidget::sizeHint_data() { - QTest::addColumn<int>("scrollBarPolicy"); + QTest::addColumn<Qt::ScrollBarPolicy>("scrollBarPolicy"); QTest::addColumn<QSize>("viewSize"); - QTest::newRow("ScrollBarAlwaysOn") << static_cast<int>(Qt::ScrollBarAlwaysOn) << QSize(); - QTest::newRow("ScrollBarAlwaysOff") << static_cast<int>(Qt::ScrollBarAlwaysOff) << QSize(); + QTest::newRow("ScrollBarAlwaysOn") << Qt::ScrollBarAlwaysOn << QSize(); + QTest::newRow("ScrollBarAlwaysOff") << Qt::ScrollBarAlwaysOff << QSize(); // make sure the scrollbars are shown by resizing the view to 40x40 - QTest::newRow("ScrollBarAsNeeded (40x40)") << static_cast<int>(Qt::ScrollBarAsNeeded) << QSize(40, 40); - QTest::newRow("ScrollBarAsNeeded (1000x1000)") << static_cast<int>(Qt::ScrollBarAsNeeded) << QSize(1000, 1000); + QTest::newRow("ScrollBarAsNeeded (40x40)") << Qt::ScrollBarAsNeeded << QSize(40, 40); + QTest::newRow("ScrollBarAsNeeded (1000x1000)") << Qt::ScrollBarAsNeeded << QSize(1000, 1000); } void tst_QTreeWidget::sizeHint() { - QFETCH(int, scrollBarPolicy); + QFETCH(Qt::ScrollBarPolicy, scrollBarPolicy); QFETCH(QSize, viewSize); QTreeWidget view; view.setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); - view.setVerticalScrollBarPolicy(static_cast<Qt::ScrollBarPolicy>(scrollBarPolicy)); - view.setHorizontalScrollBarPolicy(static_cast<Qt::ScrollBarPolicy>(scrollBarPolicy)); + view.setVerticalScrollBarPolicy(scrollBarPolicy); + view.setHorizontalScrollBarPolicy(scrollBarPolicy); view.setColumnCount(2); for (int i = 0 ; i < view.columnCount(); ++i) view.addTopLevelItem(new QTreeWidgetItem(QStringList{"foo","bar"})); @@ -2726,36 +2694,36 @@ void tst_QTreeWidget::itemOperatorLessThan() void tst_QTreeWidget::sortedIndexOfChild_data() { - QTest::addColumn<int>("sortOrder"); + QTest::addColumn<Qt::SortOrder>("sortOrder"); QTest::addColumn<QStringList>("itemTexts"); - QTest::addColumn<QList<int> >("expectedIndexes"); + QTest::addColumn<IntList>("expectedIndexes"); QTest::newRow("three ascending") - << int(Qt::AscendingOrder) - << (QStringList() << "A" << "B" << "C") - << (QList<int>() << 0 << 1 << 2); + << Qt::AscendingOrder + << (QStringList{"A", "B", "C"}) + << (IntList{0, 1, 2}); QTest::newRow("three descending") - << int(Qt::DescendingOrder) - << (QStringList() << "A" << "B" << "C") - << (QList<int>() << 2 << 1 << 0); + << Qt::DescendingOrder + << (QStringList{"A", "B", "C"}) + << (IntList{2, 1, 0}); } void tst_QTreeWidget::sortedIndexOfChild() { - QFETCH(int, sortOrder); - QFETCH(QStringList, itemTexts); - QFETCH(QList<int>, expectedIndexes); + QFETCH(Qt::SortOrder, sortOrder); + QFETCH(const QStringList, itemTexts); + QFETCH(const IntList, expectedIndexes); QTreeWidget tw; - QList<QTreeWidgetItem*> itms; - QTreeWidgetItem *top = new QTreeWidgetItem(&tw, QStringList() << "top"); + QVector<QTreeWidgetItem *> itms; + auto *top = new QTreeWidgetItem(&tw, {"top"}); - for (int i = 0; i < itemTexts.count(); ++i) - itms << new QTreeWidgetItem(top, QStringList() << itemTexts.at(i)); + for (const QString &str : itemTexts) + itms << new QTreeWidgetItem(top, {str}); - tw.sortItems(0, (Qt::SortOrder)sortOrder); + tw.sortItems(0, sortOrder); tw.expandAll(); QCOMPARE(itms.count(), expectedIndexes.count()); @@ -2773,8 +2741,8 @@ void tst_QTreeWidget::expandAndCallapse() for (int j = 0; j < 10; ++j) new QTreeWidgetItem(p, QStringList(QString::number(j))); } - QSignalSpy spy0(&tw, SIGNAL(itemExpanded(QTreeWidgetItem*))); - QSignalSpy spy1(&tw, SIGNAL(itemCollapsed(QTreeWidgetItem*))); + QSignalSpy spy0(&tw, &QTreeWidget::itemExpanded); + QSignalSpy spy1(&tw, &QTreeWidget::itemCollapsed); tw.expandItem(p); @@ -2909,20 +2877,12 @@ void tst_QTreeWidget::removeSelectedItem() QCOMPARE(selModel->isSelected(w->model()->index(0,0)), false); } -class AnotherTreeWidget : public QTreeWidget -{ - Q_OBJECT -public: - AnotherTreeWidget(QWidget *parent = 0) : QTreeWidget(parent) {} - void deleteCurrent() { if (currentItem()) delete currentItem(); } -}; - void tst_QTreeWidget::removeCurrentItem() { - AnotherTreeWidget widget; - QObject::connect(widget.selectionModel(), - SIGNAL(currentChanged(QModelIndex,QModelIndex)), - &widget, SLOT(clear())); + PublicTreeWidget widget; + connect(widget.selectionModel(), + &QItemSelectionModel::currentChanged, + &widget, &PublicTreeWidget::clear); QTreeWidgetItem *item = new QTreeWidgetItem(&widget); widget.setCurrentItem(item); widget.deleteCurrent(); @@ -2930,9 +2890,9 @@ void tst_QTreeWidget::removeCurrentItem() void tst_QTreeWidget::removeCurrentItem_task186451() { - AnotherTreeWidget widget; - QTreeWidgetItem *item = new QTreeWidgetItem(&widget, QStringList() << "1"); - QTreeWidgetItem *item2 = new QTreeWidgetItem(&widget, QStringList() << "2"); + PublicTreeWidget widget; + QTreeWidgetItem *item = new QTreeWidgetItem(&widget, {"1"}); + QTreeWidgetItem *item2 = new QTreeWidgetItem(&widget, {"2"}); widget.setCurrentItem(item); widget.deleteCurrent(); @@ -2940,19 +2900,6 @@ void tst_QTreeWidget::removeCurrentItem_task186451() QCOMPARE(item2, widget.currentItem()); } - -class TreeWidget : QTreeWidget { - -public: - QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const { - return QTreeWidget::indexFromItem(item, column); - } - QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const { - return QTreeWidget::itemFromIndex(index); - } -}; - - void tst_QTreeWidget::randomExpand() { QTreeWidget tree; @@ -2970,9 +2917,8 @@ void tst_QTreeWidget::randomExpand() \- item4 */ - QTreeWidgetItem *newItem1 = 0; for (int i = 0; i < 100; i++) { - newItem1 = new QTreeWidgetItem(&tree, item1); + auto newItem1 = new QTreeWidgetItem(&tree, item1); newItem1->setExpanded(true); QCOMPARE(newItem1->isExpanded(), true); @@ -2982,35 +2928,34 @@ void tst_QTreeWidget::randomExpand() QCOMPARE(newItem1->isExpanded(), true); } - } void tst_QTreeWidget::crashTest() { - QTreeWidget *tree = new QTreeWidget(); - tree->setColumnCount(1); - tree->show(); + QTreeWidget tree; + tree.setColumnCount(1); + tree.show(); - QTreeWidgetItem *item1 = new QTreeWidgetItem(tree); + QTreeWidgetItem *item1 = new QTreeWidgetItem(&tree); item1->setText(0, "item1"); item1->setExpanded(true); QTreeWidgetItem *item2 = new QTreeWidgetItem(item1); item2->setText(0, "item2"); - QTreeWidgetItem *item3 = new QTreeWidgetItem(tree, item1); + QTreeWidgetItem *item3 = new QTreeWidgetItem(&tree, item1); item3->setText(0, "item3"); item3->setExpanded(true); QTreeWidgetItem *item4 = new QTreeWidgetItem(item3); item4->setText(0, "item4"); - QTreeWidgetItem *item5 = new QTreeWidgetItem(tree, item3); + QTreeWidgetItem *item5 = new QTreeWidgetItem(&tree, item3); item5->setText(0, "item5"); item5->setExpanded(true); QTreeWidgetItem *item6 = new QTreeWidgetItem(item5); item6->setText(0, "item6"); for (int i = 0; i < 1000; i++) { - QTreeWidgetItem *newItem1 = new QTreeWidgetItem(tree, item1); + QTreeWidgetItem *newItem1 = new QTreeWidgetItem(&tree, item1); newItem1->setText(0, "newItem"); QTreeWidgetItem *newItem2 = new QTreeWidgetItem(newItem1); newItem2->setText(0, "subItem1"); @@ -3019,23 +2964,23 @@ void tst_QTreeWidget::crashTest() delete item3; item3 = newItem1; } - QApplication::instance()->processEvents(); - - delete tree; + QCoreApplication::processEvents(); } class CrashWidget : public QTreeWidget { public: - CrashWidget(QWidget *parent = 0) : QTreeWidget(parent), i(0) { + CrashWidget(QWidget *parent = nullptr) : QTreeWidget(parent) + { setSortingEnabled(true); timerId = startTimer(10); } - int i; + int i = 0; protected: - void timerEvent(QTimerEvent * event) { + void timerEvent(QTimerEvent * event) override + { if (event->timerId() == timerId) { - QTreeWidgetItem *newItem = new QTreeWidgetItem((QStringList() << QString::number(i++))); + auto newItem = new QTreeWidgetItem({QString::number(i++)}); m_list.append(newItem); insertTopLevelItem(0, newItem); while (m_list.count() > 10) @@ -3045,7 +2990,7 @@ protected: } private: int timerId; - QList<QTreeWidgetItem*> m_list; + QVector<QTreeWidgetItem*> m_list; }; void tst_QTreeWidget::sortAndSelect() @@ -3068,12 +3013,13 @@ void tst_QTreeWidget::defaultRowSizes() const QScopedPointer<QTreeWidget> tw(new QTreeWidget); tw->setIconSize(QSize(50, 50)); tw->setColumnCount(6); - for (int i=0; i<10; ++i) { + for (int i = 0; i < 10; ++i) { auto it = new QTreeWidgetItem(tw.data()); - for (int j=0; j<tw->columnCount() - 1; ++j) { + for (int j = 0; j < tw->columnCount() - 1; ++j) it->setText(j, "This is a test"); - } - QPixmap icon = tw->style()->standardPixmap((QStyle::StandardPixmap)(i + QStyle::SP_TitleBarMenuButton)); + auto sp = static_cast<QStyle::StandardPixmap>(i + QStyle::SP_TitleBarMenuButton); + QPixmap icon = tw->style()->standardPixmap(sp); + if (icon.isNull()) QSKIP("No pixmap found on current style, skipping this test."); it->setIcon(tw->columnCount() - 1, @@ -3089,8 +3035,8 @@ void tst_QTreeWidget::defaultRowSizes() void tst_QTreeWidget::task191552_rtl() { - Qt::LayoutDirection oldDir = qApp->layoutDirection(); - qApp->setLayoutDirection(Qt::RightToLeft); + Qt::LayoutDirection oldDir = QGuiApplication::layoutDirection(); + QGuiApplication::setLayoutDirection(Qt::RightToLeft); QTreeWidget tw; tw.setColumnCount(1); @@ -3111,7 +3057,7 @@ void tst_QTreeWidget::task191552_rtl() QTest::mouseClick(tw.viewport(), Qt::LeftButton, Qt::NoModifier, checkRect.center()); QCOMPARE(item->checkState(0), Qt::Unchecked); - qApp->setLayoutDirection(oldDir); + QGuiApplication::setLayoutDirection(oldDir); } void tst_QTreeWidget::task203673_selection() @@ -3210,7 +3156,7 @@ void tst_QTreeWidget::task253109_itemHeight() QTreeWidgetItem item(&treeWidget); class MyWidget : public QWidget { - virtual QSize sizeHint() const { return QSize(200,100); } + QSize sizeHint() const override { return QSize(200, 100); } } w; treeWidget.setItemWidget(&item, 0, &w); @@ -3230,24 +3176,23 @@ void tst_QTreeWidget::task206367_duplication() treeWidget.setHeaderHidden(true); treeWidget.setSortingEnabled(true); - QTreeWidgetItem* rootItem = new QTreeWidgetItem( &treeWidget, QStringList("root") ); + QTreeWidgetItem* rootItem = new QTreeWidgetItem(&treeWidget, QStringList("root")); for (int nFile = 0; nFile < 2; nFile++ ) { - QTreeWidgetItem* itemFile = new QTreeWidgetItem(rootItem, QStringList(QString::number(nFile))); + QTreeWidgetItem* itemFile = new QTreeWidgetItem(rootItem, {QString::number(nFile)}); for (int nRecord = 0; nRecord < 2; nRecord++) - new QTreeWidgetItem(itemFile , QStringList(QString::number(nRecord))); + new QTreeWidgetItem(itemFile, {QString::number(nRecord)}); itemFile->setExpanded(true); } rootItem->setExpanded(true); //there should be enough room for 2x2 items. If there is a scrollbar, it means the items are duplicated QTRY_VERIFY(!treeWidget.verticalScrollBar()->isVisible()); - } void tst_QTreeWidget::itemSelectionChanged() { QVERIFY(testWidget); - if(testWidget->topLevelItem(0)) + if (testWidget->topLevelItem(0)) QVERIFY(testWidget->topLevelItem(0)->isSelected()); } @@ -3255,14 +3200,18 @@ void tst_QTreeWidget::selectionOrder() { testWidget->setColumnCount(1); QList<QTreeWidgetItem *> items; - for (int i = 0; i < 10; ++i) - items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QLatin1String("item: ") + QString::number(i)))); + for (int i = 0; i < 10; ++i) { + items.append(new QTreeWidgetItem(static_cast<QTreeWidget *>(nullptr), + {QStringLiteral("item: %1").arg(i)})); + } testWidget->insertTopLevelItems(0, items); - QModelIndex idx = testWidget->indexFromItem(items[0]); - connect(testWidget, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); + QModelIndex idx = testWidget->indexFromItem(items.at(0)); + connect(testWidget, &QTreeWidget::itemSelectionChanged, + this, &tst_QTreeWidget::itemSelectionChanged); testWidget->selectionModel()->select(idx, QItemSelectionModel::SelectCurrent); - disconnect(testWidget, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); + disconnect(testWidget, &QTreeWidget::itemSelectionChanged, + this, &tst_QTreeWidget::itemSelectionChanged); } void tst_QTreeWidget::setSelectionModel() @@ -3271,7 +3220,7 @@ void tst_QTreeWidget::setSelectionModel() for(int i = 0; i < 3; ++i) new QTreeWidgetItem(&tree, QStringList(QString::number(i))); QItemSelectionModel selection(tree.model()); - selection.select(tree.model()->index(1,0), QItemSelectionModel::Select); + selection.select(tree.model()->index(1, 0), QItemSelectionModel::Select); tree.setSelectionModel(&selection); QCOMPARE(tree.topLevelItem(1)->isSelected(), true); } @@ -3301,9 +3250,9 @@ void tst_QTreeWidget::task217309() void tst_QTreeWidget::nonEditableTristate() { // A tree with checkable items, the parent is tristate - QTreeWidget *tree = new QTreeWidget; - QTreeWidgetItem *item = new QTreeWidgetItem(); - tree->insertTopLevelItem(0, item); + QTreeWidget tree; + QTreeWidgetItem *item = new QTreeWidgetItem; + tree.insertTopLevelItem(0, item); item->setFlags(item->flags() | Qt::ItemIsAutoTristate); item->setCheckState(0, Qt::Unchecked); QTreeWidgetItem *subitem1 = new QTreeWidgetItem(item); @@ -3311,53 +3260,46 @@ void tst_QTreeWidget::nonEditableTristate() QTreeWidgetItem *subitem2 = new QTreeWidgetItem(item); subitem2->setCheckState(0, Qt::Unchecked); QCOMPARE(int(item->checkState(0)), int(Qt::Unchecked)); - tree->show(); + tree.show(); + QVERIFY(QTest::qWaitForWindowExposed(&tree)); // Test clicking on the parent item, it should become Checked (not PartiallyChecked) QStyleOptionViewItem option; - option.rect = tree->visualRect(tree->model()->index(0, 0)); + option.rect = tree.visualRect(tree.model()->index(0, 0)); option.state |= QStyle::State_Enabled; option.features |= QStyleOptionViewItem::HasCheckIndicator | QStyleOptionViewItem::HasDisplay; option.checkState = item->checkState(0); - const int checkMargin = qApp->style()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, 0) + 1; - QPoint pos = qApp->style()->subElementRect(QStyle::SE_ItemViewItemCheckIndicator, &option, 0).center() + QPoint(checkMargin, 0); - QTest::mouseClick(tree->viewport(), Qt::LeftButton, Qt::NoModifier, pos); - QCOMPARE(int(item->checkState(0)), int(Qt::Checked)); + auto appStyle = QApplication::style(); + const int checkMargin = appStyle->pixelMetric( + QStyle::PM_FocusFrameHMargin, nullptr, nullptr) + 1; + QPoint pos = appStyle->subElementRect( + QStyle::SE_ItemViewItemCheckIndicator, &option, nullptr).center(); + pos.rx() += checkMargin; + QTest::mouseClick(tree.viewport(), Qt::LeftButton, Qt::NoModifier, pos); + QCOMPARE(item->checkState(0), Qt::Checked); // Click again, it should become Unchecked. - QTest::mouseClick(tree->viewport(), Qt::LeftButton, Qt::NoModifier, pos); - QCOMPARE(int(item->checkState(0)), int(Qt::Unchecked)); - - delete tree; + QTest::mouseClick(tree.viewport(), Qt::LeftButton, Qt::NoModifier, pos); + QCOMPARE(item->checkState(0), Qt::Unchecked); } -class TreeWidgetItem : public QTreeWidgetItem -{ - -public: - void _emitDataChanged() { emitDataChanged(); } - -}; - void tst_QTreeWidget::emitDataChanged() { - - QTreeWidget *tree = new QTreeWidget; - QSignalSpy spy(tree, SIGNAL(itemChanged(QTreeWidgetItem*,int))); - TreeWidgetItem *item = new TreeWidgetItem(); - tree->insertTopLevelItem(0, item); - item->_emitDataChanged(); + QTreeWidget tree; + QSignalSpy spy(&tree, &QTreeWidget::itemChanged); + auto item = new PublicTreeItem; + tree.insertTopLevelItem(0, item); + item->emitDataChanged(); QCOMPARE(spy.count(), 1); - } void tst_QTreeWidget::setCurrentItemExpandsParent() { QTreeWidget w; w.setColumnCount(1); - QTreeWidgetItem *i1 = new QTreeWidgetItem(&w, QStringList() << "parent"); - QTreeWidgetItem *i2 = new QTreeWidgetItem(i1, QStringList() << "child"); + QTreeWidgetItem *i1 = new QTreeWidgetItem(&w, {"parent"}); + QTreeWidgetItem *i2 = new QTreeWidgetItem(i1, {"child"}); QVERIFY(!i2->isExpanded()); QVERIFY(!w.currentItem()); w.setCurrentItem(i2); @@ -3373,13 +3315,13 @@ void tst_QTreeWidget::task239150_editorWidth() QStyleOptionFrame opt; opt.init(&tree); const int minWidth = tree.style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(0, 0). - expandedTo(QApplication::globalStrut()), 0).width(); + expandedTo(QApplication::globalStrut()), nullptr).width(); { QTreeWidgetItem item; item.setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled ); tree.addTopLevelItem(&item); - QVERIFY(tree.itemWidget(&item, 0) == 0); + QVERIFY(tree.itemWidget(&item, 0) == nullptr); tree.editItem(&item); QVERIFY(tree.itemWidget(&item, 0)); QVERIFY(tree.itemWidget(&item, 0)->width() >= minWidth); @@ -3391,7 +3333,7 @@ void tst_QTreeWidget::task239150_editorWidth() item.setText(0, "foooooooooooooooooooooooo"); item.setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled ); tree.addTopLevelItem(&item); - QVERIFY(tree.itemWidget(&item, 0) == 0); + QVERIFY(tree.itemWidget(&item, 0) == nullptr); tree.editItem(&item); QVERIFY(tree.itemWidget(&item, 0)); QVERIFY(tree.itemWidget(&item, 0)->width() >= minWidth + tree.fontMetrics().horizontalAdvance(item.text(0))); @@ -3408,23 +3350,21 @@ void tst_QTreeWidget::setTextUpdate() class MyItemDelegate : public QStyledItemDelegate { public: - MyItemDelegate() : numPaints(0) { } - void paint(QPainter *painter, - const QStyleOptionViewItem &option, const QModelIndex &index) const + using QStyledItemDelegate::QStyledItemDelegate; + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const override { numPaints++; QStyledItemDelegate::paint(painter, option, index); } - mutable int numPaints; + mutable int numPaints = 0; } delegate; treeWidget.setItemDelegate(&delegate); treeWidget.show(); QVERIFY(QTest::qWaitForWindowExposed(&treeWidget)); - QStringList strList; - strList << "variable1" << "0"; - QTreeWidgetItem *item = new QTreeWidgetItem(strList); + QTreeWidgetItem *item = new QTreeWidgetItem({ "variable1", "0" }); treeWidget.insertTopLevelItem(0, item); QTRY_VERIFY(delegate.numPaints > 0); delegate.numPaints = 0; @@ -3435,7 +3375,7 @@ void tst_QTreeWidget::setTextUpdate() void tst_QTreeWidget::taskQTBUG2844_visualItemRect() { - CustomTreeWidget tree; + PublicTreeWidget tree; tree.resize(150, 100); tree.setColumnCount(3); QTreeWidgetItem item(&tree); @@ -3457,15 +3397,17 @@ void tst_QTreeWidget::setChildIndicatorPolicy() class MyItemDelegate : public QStyledItemDelegate { public: - MyItemDelegate() : numPaints(0), expectChildren(false) { } - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const + using QStyledItemDelegate::QStyledItemDelegate; + void paint(QPainter *painter, + const QStyleOptionViewItem &option, + const QModelIndex &index) const override { numPaints++; QCOMPARE(!(option.state & QStyle::State_Children), !expectChildren); QStyledItemDelegate::paint(painter, option, index); } - mutable int numPaints; - bool expectChildren; + mutable int numPaints = 0; + bool expectChildren = false; } delegate; treeWidget.setItemDelegate(&delegate); @@ -3503,19 +3445,15 @@ void tst_QTreeWidget::setChildIndicatorPolicy() // The test passes simply if it doesn't crash. void tst_QTreeWidget::taskQTBUG_34717_collapseAtBottom() { - struct PublicTreeWidget: public QTreeWidget - { - inline int sizeHintForColumn(int column) const { return QTreeWidget::sizeHintForColumn(column); } - }; PublicTreeWidget treeWidget; treeWidget.header()->setSectionResizeMode(QHeaderView::ResizeToContents); treeWidget.setColumnCount(2); - QTreeWidgetItem *mainItem = new QTreeWidgetItem(&treeWidget, QStringList() << "Root"); + QTreeWidgetItem *mainItem = new QTreeWidgetItem(&treeWidget, { "Root" }); for (int i = 0; i < 200; ++i) { - QTreeWidgetItem *item = new QTreeWidgetItem(mainItem, QStringList(QString("Item"))); - new QTreeWidgetItem(item, QStringList() << "Child" << "1"); - new QTreeWidgetItem(item, QStringList() << "Child" << "2"); - new QTreeWidgetItem(item, QStringList() << "Child" << "3"); + QTreeWidgetItem *item = new QTreeWidgetItem(mainItem, { "Item" }); + new QTreeWidgetItem(item, { "Child", "1" }); + new QTreeWidgetItem(item, { "Child", "2" }); + new QTreeWidgetItem(item, { "Child", "3" }); } treeWidget.show(); treeWidget.expandAll(); @@ -3545,11 +3483,8 @@ void tst_QTreeWidget::task20345_sortChildren() tw.setSortingEnabled(true); tw.show(); - QTreeWidgetItem *rootItem = 0; - QTreeWidgetItem *childItem = 0; - - rootItem = new QTreeWidgetItem(&tw, QStringList("a")); - childItem = new QTreeWidgetItem(rootItem); + auto rootItem = new QTreeWidgetItem(&tw, QStringList("a")); + auto childItem = new QTreeWidgetItem(rootItem); childItem->setText(1, "3"); childItem = new QTreeWidgetItem(rootItem); childItem->setText(1, "1"); @@ -3558,10 +3493,10 @@ void tst_QTreeWidget::task20345_sortChildren() tw.setCurrentItem(tw.topLevelItem(0)); - QTreeWidgetItem * curItem = tw.currentItem(); + QTreeWidgetItem *curItem = tw.currentItem(); int childCount = curItem->childCount() + 1; - QTreeWidgetItem * newItem = new QTreeWidgetItem(curItem); + QTreeWidgetItem *newItem = new QTreeWidgetItem(curItem); newItem->setText(1, QString::number(childCount)); rootItem->sortChildren(1, Qt::AscendingOrder); QVERIFY(1); @@ -3569,7 +3504,7 @@ void tst_QTreeWidget::task20345_sortChildren() void tst_QTreeWidget::getMimeDataWithInvalidItem() { - CustomTreeWidget w; + PublicTreeWidget w; QTest::ignoreMessage(QtWarningMsg, "QTreeWidget::mimeData: Null-item passed"); QMimeData *md = w.mimeData(QList<QTreeWidgetItem*>() << nullptr); QVERIFY(!md); diff --git a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp index 76ca148d3f..68d149fc6e 100644 --- a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp +++ b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp @@ -27,20 +27,19 @@ ****************************************************************************/ -#include <QtTest/QtTest> +#include <QTreeWidget> +#include <QTreeWidgetItemIterator> +#include <QTest> -#include <qtreewidget.h> -#include <qtreewidgetitemiterator.h> -#include <qapplication.h> -#include <qeventloop.h> -#include <qdebug.h> +Q_DECLARE_METATYPE(QTreeWidgetItemIterator::IteratorFlag) +Q_DECLARE_METATYPE(QTreeWidgetItemIterator::IteratorFlags) class tst_QTreeWidgetItemIterator : public QObject { Q_OBJECT public: - tst_QTreeWidgetItemIterator(); + using QObject::QObject; private slots: void initTestCase(); @@ -65,13 +64,9 @@ private slots: void initializeIterator(); void sortingEnabled(); private: - QTreeWidget *testWidget; + QTreeWidget *testWidget = nullptr; }; -tst_QTreeWidgetItemIterator::tst_QTreeWidgetItemIterator(): testWidget(0) -{ -} - void tst_QTreeWidgetItemIterator::initTestCase() { testWidget = new QTreeWidget(); @@ -90,7 +85,7 @@ void tst_QTreeWidgetItemIterator::initTestCase() * |Qt::ItemIsDropEnabled * */ - for (int i=0; i <= 16; ++i) { + for (int i = 0; i <= 16; ++i) { QTreeWidgetItem *top = new QTreeWidgetItem(testWidget); const QString topS = QLatin1String("top") + QString::number(i); top->setText(0, topS); @@ -111,9 +106,7 @@ void tst_QTreeWidgetItemIterator::initTestCase() case 9: top->setFlags(Qt::ItemIsEnabled);break; case 10: top->setFlags(Qt::ItemIsEnabled);break; - case 11: - top->setFlags(0); - break; + case 11: top->setFlags({});break; case 12: top->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable);break; case 13: top->setFlags(Qt::ItemIsEnabled);break; @@ -142,7 +135,7 @@ void tst_QTreeWidgetItemIterator::initTestCase() case 9: child->setFlags(Qt::ItemIsEnabled);break; case 10: child->setFlags(Qt::ItemIsEnabled);break; - case 11: child->setFlags(0);break; + case 11: child->setFlags({});break; case 12: child->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable);break; case 13: child->setFlags(Qt::ItemIsEnabled);break; @@ -188,10 +181,10 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() NotEditable = 0x00020000 */ QTest::addColumn<int>("start"); - QTest::addColumn<int>("iteratorflags"); + QTest::addColumn<QTreeWidgetItemIterator::IteratorFlags>("iteratorflags"); QTest::addColumn<QStringList>("matches"); - QTest::newRow("Match all") << 0 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Match all") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::All) << (QStringList() << "top0" << "top0,child0" << "top0,child1" << "top0,child2" << "top0,child3" << "top0,child4" << "top0,child5" << "top0,child6" << "top0,child7" @@ -279,7 +272,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top16,child12" << "top16,child13" << "top16,child14" << "top16,child15" << "top16,child16"); - QTest::newRow("Match hidden") << 0 << (int)QTreeWidgetItemIterator::Hidden + QTest::newRow("Match hidden") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::Hidden) << (QStringList() << "top0" << "top0,child0" // fails due to hidden row << "top1,child0" @@ -299,7 +292,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top15,child0" << "top16,child0"); - QTest::newRow("Match not hidden") << 0 << (int)QTreeWidgetItemIterator::NotHidden + QTest::newRow("Match not hidden") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::NotHidden) << (QStringList() << "top0,child1" << "top0,child2" << "top0,child3" << "top0,child4" << "top0,child5" << "top0,child6" << "top0,child7" @@ -387,7 +380,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top16,child12" << "top16,child13" << "top16,child14" << "top16,child15" << "top16,child16"); - QTest::newRow("Match selected") << 0 << (int)QTreeWidgetItemIterator::Selected + QTest::newRow("Match selected") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::Selected) << (QStringList() << "top0,child2" << "top1,child2" @@ -407,7 +400,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top15,child2" << "top16,child2"); - QTest::newRow("Match selectable") << 0 << (int)QTreeWidgetItemIterator::Selectable + QTest::newRow("Match selectable") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::Selectable) << (QStringList() << "top0" << "top0,child0" << "top0,child1" << "top0,child2" << "top0,child3" << "top0,child4" @@ -479,7 +472,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top16,child16"); - QTest::newRow("Match DragEnabled") << 0 << (int)QTreeWidgetItemIterator::DragEnabled + QTest::newRow("Match DragEnabled") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::DragEnabled) << (QStringList() << "top0" << "top0,child0" << "top0,child1" << "top0,child2" << "top0,child3" << "top0,child6" @@ -550,7 +543,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top16,child14" << "top16,child15" << "top16,child16"); - QTest::newRow("Match DragDisabled") << 0 << (int)QTreeWidgetItemIterator::DragDisabled + QTest::newRow("Match DragDisabled") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::DragDisabled) << (QStringList() /* top0 */ @@ -623,7 +616,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top16,child13" ); - QTest::newRow("Match DropEnabled") << 0 << (int)QTreeWidgetItemIterator::DropEnabled + QTest::newRow("Match DropEnabled") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::DropEnabled) << (QStringList() << "top0" << "top0,child0" << "top0,child1" << "top0,child2" << "top0,child3" << "top0,child8" @@ -694,12 +687,12 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top16,child14" << "top16,child15" << "top16,child16"); - QTest::newRow("Match HasChildren") << 0 << (int)QTreeWidgetItemIterator::HasChildren + QTest::newRow("Match HasChildren") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::HasChildren) << (QStringList() << "top0" << "top1" << "top2" << "top3" << "top4" << "top5" << "top6" << "top7" << "top8" << "top9" << "top10" << "top11" << "top12" << "top13" << "top14" << "top15" << "top16"); - QTest::newRow("Match Checked") << 0 << (int)QTreeWidgetItemIterator::Checked + QTest::newRow("Match Checked") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::Checked) << (QStringList() << "top0,child14" << "top0,child16" << "top1,child14" << "top1,child16" @@ -721,7 +714,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top16" << "top16,child14" << "top16,child16"); - QTest::newRow("Match NotChecked") << 0 << (int)QTreeWidgetItemIterator::NotChecked + QTest::newRow("Match NotChecked") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::NotChecked) << (QStringList() << "top0" << "top0,child0" << "top0,child1" << "top0,child2" << "top0,child3" << "top0,child4" << "top0,child5" << "top0,child6" << "top0,child7" @@ -810,7 +803,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() - QTest::newRow("Match Disabled") << 0 << (int)QTreeWidgetItemIterator::Disabled + QTest::newRow("Match Disabled") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::Disabled) << (QStringList() << "top0,child11" << "top1,child11" @@ -848,7 +841,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top15,child11" << "top16,child11"); - QTest::newRow("Match Editable") << 0 << (int)QTreeWidgetItemIterator::Editable + QTest::newRow("Match Editable") << 0 << QTreeWidgetItemIterator::IteratorFlags(QTreeWidgetItemIterator::Editable) << (QStringList() << "top0,child12" << "top1,child12" @@ -869,34 +862,34 @@ void tst_QTreeWidgetItemIterator::iteratorflags_data() << "top15,child12" << "top16,child12"); - QTest::newRow("Match mutually exclusive Hidden|NotHidden") << 0 << (int)(QTreeWidgetItemIterator::Hidden|QTreeWidgetItemIterator::NotHidden) + QTest::newRow("Match mutually exclusive Hidden|NotHidden") << 0 << (QTreeWidgetItemIterator::Hidden|QTreeWidgetItemIterator::NotHidden) << QStringList(); - QTest::newRow("Match mutually exclusive Selected|Unselected") << 0 << (int)(QTreeWidgetItemIterator::Selected|QTreeWidgetItemIterator::Unselected) + QTest::newRow("Match mutually exclusive Selected|Unselected") << 0 << (QTreeWidgetItemIterator::Selected|QTreeWidgetItemIterator::Unselected) << QStringList(); - QTest::newRow("Match mutually exclusive Selectable|NotSelectable") << 0 << (int)(QTreeWidgetItemIterator::Selectable|QTreeWidgetItemIterator::NotSelectable) + QTest::newRow("Match mutually exclusive Selectable|NotSelectable") << 0 << (QTreeWidgetItemIterator::Selectable|QTreeWidgetItemIterator::NotSelectable) << QStringList(); - QTest::newRow("Match mutually exclusive DragEnabled|DragDisabled") << 0 << (int)(QTreeWidgetItemIterator::DragEnabled|QTreeWidgetItemIterator::DragDisabled) + QTest::newRow("Match mutually exclusive DragEnabled|DragDisabled") << 0 << (QTreeWidgetItemIterator::DragEnabled|QTreeWidgetItemIterator::DragDisabled) << QStringList(); - QTest::newRow("Match mutually exclusive DropEnabled|DropDisabled") << 0 << (int)(QTreeWidgetItemIterator::DropEnabled|QTreeWidgetItemIterator::DropDisabled) + QTest::newRow("Match mutually exclusive DropEnabled|DropDisabled") << 0 << (QTreeWidgetItemIterator::DropEnabled|QTreeWidgetItemIterator::DropDisabled) << QStringList(); - QTest::newRow("Match mutually exclusive HasChildren|NoChildren") << 0 << (int)(QTreeWidgetItemIterator::HasChildren|QTreeWidgetItemIterator::NoChildren) + QTest::newRow("Match mutually exclusive HasChildren|NoChildren") << 0 << (QTreeWidgetItemIterator::HasChildren|QTreeWidgetItemIterator::NoChildren) << QStringList(); - QTest::newRow("Match mutually exclusive Checked|NotChecked") << 0 << (int)(QTreeWidgetItemIterator::Checked|QTreeWidgetItemIterator::NotChecked) + QTest::newRow("Match mutually exclusive Checked|NotChecked") << 0 << (QTreeWidgetItemIterator::Checked|QTreeWidgetItemIterator::NotChecked) << QStringList(); - QTest::newRow("Match mutually exclusive Disabled|Enabled") << 0 << (int)(QTreeWidgetItemIterator::Disabled|QTreeWidgetItemIterator::Enabled) + QTest::newRow("Match mutually exclusive Disabled|Enabled") << 0 << (QTreeWidgetItemIterator::Disabled|QTreeWidgetItemIterator::Enabled) << QStringList(); - QTest::newRow("Match mutually exclusive Editable|NotEditable") << 0 << (int)(QTreeWidgetItemIterator::Editable|QTreeWidgetItemIterator::NotEditable) + QTest::newRow("Match mutually exclusive Editable|NotEditable") << 0 << (QTreeWidgetItemIterator::Editable|QTreeWidgetItemIterator::NotEditable) << QStringList(); } void tst_QTreeWidgetItemIterator::iteratorflags() { QFETCH(int, start); - QFETCH(int, iteratorflags); + QFETCH(QTreeWidgetItemIterator::IteratorFlags, iteratorflags); QFETCH(QStringList, matches); - QTreeWidgetItemIterator it(testWidget, QTreeWidgetItemIterator::IteratorFlags(iteratorflags)); - it+=start; + QTreeWidgetItemIterator it(testWidget, iteratorflags); + it += start; int iMatch = 0; while (*it && iMatch < matches.count()) { QTreeWidgetItem *item = *it; @@ -953,26 +946,26 @@ void tst_QTreeWidgetItemIterator::plus_eq_data() { QTest::addColumn<int>("start"); QTest::addColumn<int>("addition"); - QTest::addColumn<int>("iteratorflags"); + QTest::addColumn<QTreeWidgetItemIterator::IteratorFlag>("iteratorflags"); QTest::addColumn<QString>("expecteditem"); - QTest::newRow("+=0") << 0 << 0 << (int)QTreeWidgetItemIterator::All << QString("top0"); - QTest::newRow("+=1") << 0 << 1 << (int)QTreeWidgetItemIterator::All << QString("top0,child0"); - QTest::newRow("+=2") << 0 << 2 << (int)QTreeWidgetItemIterator::All << QString("top0,child1"); - QTest::newRow("+=(-1)") << 1 << -1 << (int)QTreeWidgetItemIterator::All << QString("top0"); - QTest::newRow("+=(-2)") << 3 << -2 << (int)QTreeWidgetItemIterator::All << QString("top0,child0"); + QTest::newRow("+=0") << 0 << 0 << QTreeWidgetItemIterator::All << QString("top0"); + QTest::newRow("+=1") << 0 << 1 << QTreeWidgetItemIterator::All << QString("top0,child0"); + QTest::newRow("+=2") << 0 << 2 << QTreeWidgetItemIterator::All << QString("top0,child1"); + QTest::newRow("+=(-1)") << 1 << -1 << QTreeWidgetItemIterator::All << QString("top0"); + QTest::newRow("+=(-2)") << 3 << -2 << QTreeWidgetItemIterator::All << QString("top0,child0"); } void tst_QTreeWidgetItemIterator::plus_eq() { QFETCH(int, start); QFETCH(int, addition); - QFETCH(int, iteratorflags); + QFETCH(QTreeWidgetItemIterator::IteratorFlag, iteratorflags); QFETCH(QString, expecteditem); - QTreeWidgetItemIterator it(testWidget, QTreeWidgetItemIterator::IteratorFlags(iteratorflags)); - it+=start; - it+=addition; + QTreeWidgetItemIterator it(testWidget, iteratorflags); + it += start; + it += addition; QTreeWidgetItem *item = *it; QVERIFY(item); @@ -984,28 +977,28 @@ void tst_QTreeWidgetItemIterator::minus_eq_data() { QTest::addColumn<int>("start"); QTest::addColumn<int>("subtraction"); - QTest::addColumn<int>("iteratorflags"); + QTest::addColumn<QTreeWidgetItemIterator::IteratorFlag>("iteratorflags"); QTest::addColumn<QString>("expecteditem"); - QTest::newRow("0-=0") << 0 << 0 << (int)QTreeWidgetItemIterator::All << QString("top0"); - QTest::newRow("2-=1") << 2 << 1 << (int)QTreeWidgetItemIterator::All << QString("top0,child0"); - QTest::newRow("4-=2") << 4 << 2 << (int)QTreeWidgetItemIterator::All << QString("top0,child1"); - QTest::newRow("0-=(-1)") << 0 << -1 << (int)QTreeWidgetItemIterator::All << QString("top0,child0"); - QTest::newRow("0-=(-2)") << 0 << -2 << (int)QTreeWidgetItemIterator::All << QString("top0,child1"); - QTest::newRow("18-=1") << 18 << 1 << (int)QTreeWidgetItemIterator::All << QString("top0,child16"); - QTest::newRow("1-=1") << 1 << 1 << (int)QTreeWidgetItemIterator::All << QString("top0"); + QTest::newRow("0-=0") << 0 << 0 << QTreeWidgetItemIterator::All << QString("top0"); + QTest::newRow("2-=1") << 2 << 1 << QTreeWidgetItemIterator::All << QString("top0,child0"); + QTest::newRow("4-=2") << 4 << 2 << QTreeWidgetItemIterator::All << QString("top0,child1"); + QTest::newRow("0-=(-1)") << 0 << -1 << QTreeWidgetItemIterator::All << QString("top0,child0"); + QTest::newRow("0-=(-2)") << 0 << -2 << QTreeWidgetItemIterator::All << QString("top0,child1"); + QTest::newRow("18-=1") << 18 << 1 << QTreeWidgetItemIterator::All << QString("top0,child16"); + QTest::newRow("1-=1") << 1 << 1 << QTreeWidgetItemIterator::All << QString("top0"); } void tst_QTreeWidgetItemIterator::minus_eq() { QFETCH(int, start); QFETCH(int, subtraction); - QFETCH(int, iteratorflags); + QFETCH(QTreeWidgetItemIterator::IteratorFlag, iteratorflags); QFETCH(QString, expecteditem); - QTreeWidgetItemIterator it(testWidget, QTreeWidgetItemIterator::IteratorFlags(iteratorflags)); - it+=start; - it-=subtraction; + QTreeWidgetItemIterator it(testWidget, iteratorflags); + it += start; + it -= subtraction; QTreeWidgetItem *item = *it; // should be the first one QVERIFY(item); @@ -1017,41 +1010,41 @@ void tst_QTreeWidgetItemIterator::updateIfModifiedFromWidget_data() QTest::addColumn<int>("topLevelItems"); QTest::addColumn<int>("childItems"); QTest::addColumn<int>("grandChildItems"); - QTest::addColumn<int>("iteratorflags"); + QTest::addColumn<QTreeWidgetItemIterator::IteratorFlag>("iteratorflags"); QTest::addColumn<int>("removeindex"); QTest::addColumn<int>("expecteditemindex"); QTest::addColumn<QString>("expecteditemvalue"); QTest::addColumn<QString>("expectedUpdatedCurrent"); QTest::addColumn<int>("expecteditemIsNull"); - QTest::newRow("Remove 3, check 1") << 3 << 3 << 0 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove 3, check 1") << 3 << 3 << 0 << QTreeWidgetItemIterator::All << 3 << 1 << QString("top0,child0") << QString("top1") << 0; - QTest::newRow("Remove 1, check 0") << 3 << 3 << 0 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove 1, check 0") << 3 << 3 << 0 << QTreeWidgetItemIterator::All << 1 << 0 << QString("top0") << QString("top0,child1") << 0; - QTest::newRow("Remove 2, check 2") << 3 << 3 << 0 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove 2, check 2") << 3 << 3 << 0 << QTreeWidgetItemIterator::All << 2 << 2 << QString("top0,child2") << QString("top0,child2") << 0; - QTest::newRow("Remove 0, check 0") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove 0, check 0") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 0 << 0 << QString("top1") << QString("top1") << 0; - QTest::newRow("Remove top1, check top1") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove top1, check top1") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 13 << 13 << QString("top2") << QString("top2") << 0; - QTest::newRow("Remove top0, check top1") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove top0, check top1") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 0 << 13 << QString("top1") << QString("top1") << 0; - QTest::newRow("Remove (top0,child1), check (top0,child1)") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove (top0,child1), check (top0,child1)") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 5 << 5 << QString("top0,child2") << QString("top0,child2") << 0; - QTest::newRow("Remove (t0,c0) check (t0,c0)") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove (t0,c0) check (t0,c0)") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 1 << 1 << QString("top0,child1") << QString("top0,child1") << 0; - QTest::newRow("Remove (t0,c1) check (t0,c1)") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove (t0,c1) check (t0,c1)") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 5 << 5 << QString("top0,child2") << QString("top0,child2") << 0; - QTest::newRow("Remove (t0) check (t0,c1)") << 3 << 3 << 0 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove (t0) check (t0,c1)") << 3 << 3 << 0 << QTreeWidgetItemIterator::All << 0 << 4 << QString("top1") << QString("top1") << 0; - QTest::newRow("Remove (t0) check (t0,c0,g1)") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove (t0) check (t0,c0,g1)") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 0 << 3 << QString("top1") << QString("top1") << 0; - QTest::newRow("Remove (top2), check if top2 is null") << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All + QTest::newRow("Remove (top2), check if top2 is null") << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 2*13 << 2*13 << QString() << QString() << 1; QTest::newRow("Remove last item, check if iterator::current returns 0") - << 3 << 0 << 0 << (int)QTreeWidgetItemIterator::All << 2 << 2 << QString() << QString() << 1; + << 3 << 0 << 0 << QTreeWidgetItemIterator::All << 2 << 2 << QString() << QString() << 1; QTest::newRow("remove 1, iterator points to 3, should move to 1") - << 3 << 3 << 3 << (int)QTreeWidgetItemIterator::All << 1 << 3 << QString("top0,child1") << QString("top0,child1") << 0; + << 3 << 3 << 3 << QTreeWidgetItemIterator::All << 1 << 3 << QString("top0,child1") << QString("top0,child1") << 0; } static void populate3Levels(QTreeWidget &tw, int topLevelItems, int childItems, int grandChildItems) @@ -1077,7 +1070,7 @@ void tst_QTreeWidgetItemIterator::updateIfModifiedFromWidget() QFETCH(int, topLevelItems); QFETCH(int, childItems); QFETCH(int, grandChildItems); - QFETCH(int, iteratorflags); + QFETCH(QTreeWidgetItemIterator::IteratorFlag, iteratorflags); QFETCH(int, removeindex); QFETCH(int, expecteditemindex); QFETCH(QString, expecteditemvalue); @@ -1089,12 +1082,11 @@ void tst_QTreeWidgetItemIterator::updateIfModifiedFromWidget() tw.setColumnCount(2); populate3Levels(tw, topLevelItems, childItems, grandChildItems); - QTreeWidgetItemIterator it(&tw, QTreeWidgetItemIterator::IteratorFlags(iteratorflags)); + QTreeWidgetItemIterator it(&tw, iteratorflags); it+=expecteditemindex; - QTreeWidgetItem *item = 0; QTreeWidgetItemIterator itRemove(&tw, QTreeWidgetItemIterator::IteratorFlags(iteratorflags)); itRemove+=removeindex; - item = *itRemove; + QTreeWidgetItem *item = *itRemove; QVERIFY(item); delete item; item = *it; @@ -1104,11 +1096,10 @@ void tst_QTreeWidgetItemIterator::updateIfModifiedFromWidget() QVERIFY(item); QCOMPARE(item->text(0), expecteditemvalue); item = *itRemove; - if (expectedUpdatedCurrent.isNull()) { + if (expectedUpdatedCurrent.isNull()) QVERIFY(!item); - } else { + else QCOMPARE(item->text(0), expectedUpdatedCurrent); - } } } @@ -1152,38 +1143,36 @@ void tst_QTreeWidgetItemIterator::updateIteratorAfterDeletedItem_and_ContinueIte QTreeWidgetItemIterator it(&tw, QTreeWidgetItemIterator::All); it += iterator_initial_index; - QTreeWidgetItem *item = 0; QTreeWidgetItemIterator itRemove(&tw, QTreeWidgetItemIterator::All); itRemove+=removeindex; - item = *itRemove; + QTreeWidgetItem *item = *itRemove; QVERIFY(item); delete item; it+=iterator_advance_after_removal; - if (iterator_new_value.isNull()) { + if (iterator_new_value.isNull()) QCOMPARE((*it), nullptr); - } else { + else QCOMPARE((*it)->text(0), iterator_new_value); - } } void tst_QTreeWidgetItemIterator::constructIteratorWithItem_data() { QTest::addColumn<int>("indextoitem"); - QTest::addColumn<int>("iteratorflags"); + QTest::addColumn<QTreeWidgetItemIterator::IteratorFlag>("iteratorflags"); QTest::addColumn<QString>("expecteditem"); - QTest::newRow("index 0") << 0 << 0 << QString("top0"); - QTest::newRow("index 1") << 1 << 0 << QString("top0,child0"); - QTest::newRow("index 2") << 2 << 0 << QString("top0,child1"); - QTest::newRow("index 30") << 30 << 0 << QString("top1,child11"); - QTest::newRow("305 (last item)") << 305 << 0 << QString("top16,child16"); - QTest::newRow("index 0, advance to next matching node") << 0 << (int)QTreeWidgetItemIterator::NotHidden << QString("top0,child1"); + QTest::newRow("index 0") << 0 << QTreeWidgetItemIterator::All << QString("top0"); + QTest::newRow("index 1") << 1 << QTreeWidgetItemIterator::All << QString("top0,child0"); + QTest::newRow("index 2") << 2 << QTreeWidgetItemIterator::All << QString("top0,child1"); + QTest::newRow("index 30") << 30 << QTreeWidgetItemIterator::All << QString("top1,child11"); + QTest::newRow("305 (last item)") << 305 << QTreeWidgetItemIterator::All << QString("top16,child16"); + QTest::newRow("index 0, advance to next matching node") << 0 << QTreeWidgetItemIterator::NotHidden << QString("top0,child1"); } void tst_QTreeWidgetItemIterator::constructIteratorWithItem() { QFETCH(int, indextoitem); - QFETCH(int, iteratorflags); + QFETCH(QTreeWidgetItemIterator::IteratorFlag, iteratorflags); QFETCH(QString, expecteditem); QTreeWidgetItemIterator it(testWidget); diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index c2cf31bfa4..b31e230893 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -1978,8 +1978,23 @@ void tst_QTextEdit::fullWidthSelection_data() #endif #ifdef QT_BUILD_INTERNAL + +// With the fix for QTBUG-78318 scaling of documentMargin is added. The testing framework +// forces qt_defaultDpi() to always return 96 DPI. For systems where the actual DPI differs +// (typically 72 DPI) this would now cause scaling of the documentMargin when +// drawing QTextEdit into QImage. In order to avoid the need of multiple reference PNGs +// for comparison we disable the Qt::AA_Use96Dpi attribute for these tests. + +struct ForceSystemDpiHelper { + ForceSystemDpiHelper() { QCoreApplication::setAttribute(Qt::AA_Use96Dpi, false); } + ~ForceSystemDpiHelper() { QCoreApplication::setAttribute(Qt::AA_Use96Dpi, old); } + bool old = QCoreApplication::testAttribute(Qt::AA_Use96Dpi); +}; + void tst_QTextEdit::fullWidthSelection() { + ForceSystemDpiHelper useSystemDpi; + QFETCH(int, cursorFrom); QFETCH(int, cursorTo); QFETCH(QString, imageFileName); @@ -2048,6 +2063,8 @@ void tst_QTextEdit::fullWidthSelection() #ifdef QT_BUILD_INTERNAL void tst_QTextEdit::fullWidthSelection2() { + ForceSystemDpiHelper useSystemDpi; + QPalette myPalette; myPalette.setColor(QPalette::All, QPalette::HighlightedText, QColor(0,0,0,0)); myPalette.setColor(QPalette::All, QPalette::Highlight, QColor(239,221,85)); |