From 9cbf246a09a07c48714ee69abaa35a4c2143db5f Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Fri, 20 Mar 2026 17:31:40 -0500 Subject: [PATCH 1/4] COMP: Replace deprecated invalidateFilter() with beginFilterChange/endFilterChange Qt 6.10 deprecated QSortFilterProxyModel::invalidateFilter() in favor of the beginFilterChange()/endFilterChange() pair. Use #if QT_VERSION guards to select the appropriate API while maintaining Qt5 and Qt6 <6.10 compat. Co-Authored-By: Claude Opus 4.6 --- Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp | 28 +++++++++++++++++++ .../Core/ctkDICOMPatientFilterProxyModel.cpp | 25 +++++++++++++++++ Libs/Widgets/ctkActionsWidget.cpp | 14 ++++++++++ 3 files changed, 67 insertions(+) diff --git a/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp b/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp index 36e0b4b133..4176084c4f 100644 --- a/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp @@ -66,29 +66,57 @@ ctkDICOMFilterProxyModel::~ctkDICOMFilterProxyModel(){ //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setNameSearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextName = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setStudySearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextStudy = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setSeriesSearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextSeries = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setIdSearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextID = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } bool ctkDICOMFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const{ diff --git a/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp b/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp index f9d806bacc..c488a097e2 100644 --- a/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp @@ -107,7 +107,12 @@ void ctkDICOMPatientFilterProxyModel::setDisplayMode(DisplayMode mode) d->DisplayMode = mode; // Trigger re-filtering +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif emit displayModeChanged(mode); } @@ -217,7 +222,12 @@ void ctkDICOMPatientFilterProxyModel::setWidgetWidth(int width) { d->WidgetWidth = width; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } @@ -236,7 +246,12 @@ void ctkDICOMPatientFilterProxyModel::setMaxTextWidth(int width) { d->MaxTextWidth = width; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } @@ -255,7 +270,12 @@ void ctkDICOMPatientFilterProxyModel::setIconSize(int size) { d->IconSize = size; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } @@ -274,7 +294,12 @@ void ctkDICOMPatientFilterProxyModel::setSpacing(int spacing) { d->Spacing = spacing; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } diff --git a/Libs/Widgets/ctkActionsWidget.cpp b/Libs/Widgets/ctkActionsWidget.cpp index 6df91189cf..93bedc8e3b 100644 --- a/Libs/Widgets/ctkActionsWidget.cpp +++ b/Libs/Widgets/ctkActionsWidget.cpp @@ -348,8 +348,15 @@ ctkSortFilterActionsProxyModel::ctkSortFilterActionsProxyModel(QObject* parentOb void ctkSortFilterActionsProxyModel::setActionsWithNoShortcutVisible(bool visible) { Q_D(ctkSortFilterActionsProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); +#endif d->ActionsWithNoShortcutVisible = visible; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //----------------------------------------------------------------------------- @@ -363,8 +370,15 @@ bool ctkSortFilterActionsProxyModel::areActionsWithNoShortcutVisible()const void ctkSortFilterActionsProxyModel::setMenuActionsVisible(bool visible) { Q_D(ctkSortFilterActionsProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); +#endif d->MenuActionsVisible = visible; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //----------------------------------------------------------------------------- From aba272b4b71c5f241452ea01173d7848e1264880 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Fri, 20 Mar 2026 17:36:30 -0500 Subject: [PATCH 2/4] COMP: Replace QImage::mirrored() with flipped() for Qt 6.9+ compatibility QImage::flipped(Qt::Orientations) was introduced in Qt 6.9. While QImage::mirrored() was briefly annotated as deprecated in Qt 6.9 and then un-deprecated in Qt 6.10 (scheduled for removal from Qt 6.13), the newer flipped() API is clearer in intent and is the recommended replacement going forward. Use #if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) guards to select the appropriate API while maintaining Qt5 compatibility. Co-Authored-By: Claude Opus 4.6 --- .../VTK/Widgets/ctkVTKMagnifyView.cpp | 4 ++++ .../VTK/Widgets/ctkVTKWidgetsUtils.cpp | 14 ++++++++++++-- Libs/Widgets/ctkExpandButton.cpp | 5 +++++ Libs/Widgets/ctkQImageView.cpp | 7 +++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp index 9ce3e7ef9f..e9f77b3600 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp @@ -382,7 +382,11 @@ void ctkVTKMagnifyViewPrivate::updatePixmap() } pixelData->Delete(); image = image.rgbSwapped(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + image = image.flipped(); +#else image = image.mirrored(); +#endif // Scale the image to zoom, using FastTransformation to prevent smoothing QSize imageSize = actualSize * this->Magnification; diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp index 8bd94e4aef..b29893ae03 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp @@ -132,7 +132,11 @@ QImage ctk::vtkImageDataToQImage(vtkImageData* imageData) // Qt image is upside-down compared to VTK, so return mirrored image. // Mirroring also takes care of the pixel buffer ownership, because mirroring deep-copies the pixel buffer // (therefore the returned QImage() owns its own pixel buffer). +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + return image.flipped(); +#else return image.mirrored(); +#endif } //---------------------------------------------------------------------------- @@ -157,17 +161,23 @@ bool ctk::qImageToVTKImageData(const QImage& inputQImage, vtkImageData* outputVT vtkIdType numberOfScalarComponents = 0; if (inputQImage.hasAlphaChannel() || forceAlphaChannel) { -#if QT_VERSION >= QT_VERSION_CHECK(5,2,0) +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGBA8888).flipped(); +#elif QT_VERSION >= QT_VERSION_CHECK(5,2,0) normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGBA8888).mirrored(); - numberOfScalarComponents = 4; #else qWarning() << Q_FUNC_INFO << " failed: conversion of 4-component image is not available with Qt < 5.2"; return false; #endif + numberOfScalarComponents = 4; } else { +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGB888).flipped(); +#else normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGB888).mirrored(); +#endif numberOfScalarComponents = 3; } diff --git a/Libs/Widgets/ctkExpandButton.cpp b/Libs/Widgets/ctkExpandButton.cpp index c38f194655..605d5b71bf 100644 --- a/Libs/Widgets/ctkExpandButton.cpp +++ b/Libs/Widgets/ctkExpandButton.cpp @@ -137,9 +137,14 @@ void ctkExpandButton::updateIcon() } else { +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + QImage mirrorImage = + d->defaultPixmap.toImage().flipped(d->orientation); +#else QImage mirrorImage = d->defaultPixmap.toImage().mirrored(d->orientation == Qt::Horizontal, d->orientation == Qt::Vertical); +#endif this->setIcon(QIcon(QPixmap::fromImage(mirrorImage))); } } diff --git a/Libs/Widgets/ctkQImageView.cpp b/Libs/Widgets/ctkQImageView.cpp index 3e82eb17ef..45dd5d0fa6 100644 --- a/Libs/Widgets/ctkQImageView.cpp +++ b/Libs/Widgets/ctkQImageView.cpp @@ -1020,7 +1020,14 @@ void ctkQImageView::update( bool zoomChanged, } if( d->FlipXAxis || d->FlipYAxis ) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + Qt::Orientations flipOrient; + if( d->FlipXAxis ) flipOrient |= Qt::Horizontal; + if( d->FlipYAxis ) flipOrient |= Qt::Vertical; + tmpI = tmpI.flipped( flipOrient ); +#else tmpI = tmpI.mirrored( d->FlipXAxis, d->FlipYAxis ); +#endif if( d->FlipXAxis ) { sourceX = tmpI.width() - (d->TmpXMax - d->TmpXMin) - d->TmpXMin; From e2361bc899dba2c86bf2441c17d8eb2007c71310 Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Sun, 6 Jul 2025 20:32:23 -0500 Subject: [PATCH 3/4] COMP: Q_ENUMS (deprecated) in Qt5.5+ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Requires explicit declaration of the enum in Q_ENUMS(...). • Does not support compile-time introspection via QMetaEnum::fromType(). • Print conversions via qDebug() or QVariant conversions not automatically supported. • Replace all Q_ENUMS(...) with Q_ENUM(...) in your QObject classes. • Make sure the enum is declared immediately before the Q_ENUM macro. • After migration, there is seamless integration into Qt’s meta-object system, better introspection, and compatibility with modern Qt5 (5.5+) and Qt6. --- Libs/Core/ctkAbstractJob.h | 2 +- Libs/DICOM/Core/ctkDICOMJob.h | 2 +- Libs/Scripting/Python/Core/ctkAbstractPythonManager.h | 2 +- Libs/Widgets/ctkComboBox.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Libs/Core/ctkAbstractJob.h b/Libs/Core/ctkAbstractJob.h index 124493f89d..88a1288643 100644 --- a/Libs/Core/ctkAbstractJob.h +++ b/Libs/Core/ctkAbstractJob.h @@ -90,7 +90,7 @@ class CTK_CORE_EXPORT ctkAbstractJob : public QObject Failed, Finished, }; - Q_ENUM(JobStatus) + Q_ENUM(JobStatus); JobStatus status() const; virtual void setStatus(JobStatus status); ///@} diff --git a/Libs/DICOM/Core/ctkDICOMJob.h b/Libs/DICOM/Core/ctkDICOMJob.h index 763ae33dcc..25785739ab 100644 --- a/Libs/DICOM/Core/ctkDICOMJob.h +++ b/Libs/DICOM/Core/ctkDICOMJob.h @@ -60,7 +60,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMJob : public ctkAbstractJob Series, Instances }; - Q_ENUM(DICOMLevels) + Q_ENUM(DICOMLevels); ///@{ /// DICOM Level diff --git a/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h b/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h index 32cc0718dc..0848bfa4b1 100644 --- a/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h +++ b/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h @@ -96,7 +96,7 @@ class CTK_SCRIPTING_PYTHON_CORE_EXPORT ctkAbstractPythonManager : public QObject FileInput, SingleInput }; - Q_ENUM(ExecuteStringMode) + Q_ENUM(ExecuteStringMode); /// Execute a python of python code (can be multiple lines separated with newline) /// and return the result as a QVariant. diff --git a/Libs/Widgets/ctkComboBox.h b/Libs/Widgets/ctkComboBox.h index a9ff51498b..a66164b0ab 100644 --- a/Libs/Widgets/ctkComboBox.h +++ b/Libs/Widgets/ctkComboBox.h @@ -92,7 +92,7 @@ class CTK_WIDGETS_EXPORT ctkComboBox : public QComboBox /// a visible vertical scrollbar. ScrollWithNoVScrollBar }; - Q_ENUM(ScrollEffect) + Q_ENUM(ScrollEffect); /// Return the scrollWheelEffect property value. /// \sa scrollEffect ScrollEffect scrollWheelEffect()const; From e276b2f4c7b71c58b36c6568f80c93ff8788153d Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Sun, 22 Mar 2026 15:42:24 -0500 Subject: [PATCH 4/4] PERF: Prevent range-loop container detach (clazy range-loop-detach) Use std::as_const() or const local variables to ensure range-for loops call the const begin()/end() overloads, avoiding unnecessary COW detach on implicitly shared Qt containers. Co-Authored-By: Claude Opus 4.6 --- Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp | 2 +- Libs/DICOM/Core/ctkDICOMPatientModel.cpp | 12 ++++++------ Libs/DICOM/Core/ctkDICOMSeriesModel.cpp | 6 +++--- Libs/DICOM/Core/ctkDICOMStudyModel.cpp | 8 ++++---- Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp | 3 ++- Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp | 14 +++++++------- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp b/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp index b0ea3bd426..45a886e7ca 100644 --- a/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp +++ b/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp @@ -36,7 +36,7 @@ void Q_DECL_EXPORT bt_func1() bool foundBackTrace = false; bool foundFunc1 = false; bool foundFunc2 = false; - for (const QString& frame : trace) + for (const QString& frame : std::as_const(trace)) { if (frame.contains("ctkBackTrace")) { diff --git a/Libs/DICOM/Core/ctkDICOMPatientModel.cpp b/Libs/DICOM/Core/ctkDICOMPatientModel.cpp index 9d3e26841b..3527d0a242 100644 --- a/Libs/DICOM/Core/ctkDICOMPatientModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMPatientModel.cpp @@ -224,7 +224,7 @@ void ctkDICOMPatientModelPrivate::populatePatients() // Create a set of existing patient items for quick lookup QSet existingPatientUIDs; - for (const PatientData& patient : this->Patients) + for (const PatientData& patient : std::as_const(this->Patients)) { existingPatientUIDs.insert(patient.patientUID); } @@ -360,7 +360,7 @@ void ctkDICOMPatientModelPrivate::populatePatients() // Update allowed servers from database for newly added patients if (!newPatients.isEmpty()) { - for (const PatientData& patientData : newPatients) + for (const PatientData& patientData : std::as_const(newPatients)) { q->updateAllowedServersFromDB(patientData.patientUID); } @@ -433,7 +433,7 @@ int ctkDICOMPatientModelPrivate::getSeriesCountForPatient(const QString& patient { return 0; } - QStringList studyInstanceUIDs = studyModel->studyInstanceUIDs(); + const QStringList studyInstanceUIDs = studyModel->studyInstanceUIDs(); int totalSeriesCount = 0; for (const QString& studyInstanceUID : studyInstanceUIDs) { @@ -458,7 +458,7 @@ int ctkDICOMPatientModelPrivate::getFilteredSeriesCountForPatient(const QString& { return 0; } - QStringList filteredStudyInstanceUIDs = studyModel->filteredStudyInstanceUIDs(); + const QStringList filteredStudyInstanceUIDs = studyModel->filteredStudyInstanceUIDs(); int totalFilteredSeriesCount = 0; for (const QString& studyInstanceUID : filteredStudyInstanceUIDs) { @@ -1791,7 +1791,7 @@ void ctkDICOMPatientModel::updateAllowedServersFromDB(const QString& patientUID) QStringList denyList = connectionsInformation["deny"]; QStringList allowedServers; - for (const QString& connectionName : allActiveConnectionNames) + for (const QString& connectionName : std::as_const(allActiveConnectionNames)) { if (allowList.contains(connectionName)) { @@ -1853,7 +1853,7 @@ void ctkDICOMPatientModel::saveAllowedServersToDB(const QString& patientUID, con QStringList databaseAllowList; QStringList databaseDenyList; - for (const QString& connectionName : allActiveConnectionNames) + for (const QString& connectionName : std::as_const(allActiveConnectionNames)) { if (allowedServers.contains(connectionName)) { diff --git a/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp b/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp index bed26f42e2..a056c5eb0a 100644 --- a/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp @@ -1009,7 +1009,7 @@ void ctkDICOMSeriesModel::forceUpdateSeriesJobs(const QString &seriesInstanceUID // Stop running or waiting jobs QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : runningJobs) + for (const QSharedPointer& job : std::as_const(runningJobs)) { jobUIDs.append(job->jobUID()); } @@ -1019,7 +1019,7 @@ void ctkDICOMSeriesModel::forceUpdateSeriesJobs(const QString &seriesInstanceUID { QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : failedJobs) + for (const QSharedPointer& job : std::as_const(failedJobs)) { jobUIDs.append(job->jobUID()); } @@ -1542,7 +1542,7 @@ void ctkDICOMSeriesModel::updateGUIFromScheduler(const QVariant& data, const boo this->refresh(); - for (const QString& seriesInstanceUID : td.QueriedSeriesInstanceUIDs) + for (const QString& seriesInstanceUID : std::as_const(td.QueriedSeriesInstanceUIDs)) { int linearIndex = d->findSeriesLinearIndex(seriesInstanceUID); if (linearIndex < 0) diff --git a/Libs/DICOM/Core/ctkDICOMStudyModel.cpp b/Libs/DICOM/Core/ctkDICOMStudyModel.cpp index 852c949f6c..89b542d20c 100644 --- a/Libs/DICOM/Core/ctkDICOMStudyModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMStudyModel.cpp @@ -263,7 +263,7 @@ void ctkDICOMStudyModelPrivate::populateStudies() // Create a set of existing study instance UIDs for quick lookup QSet existingStudyUIDs; - for (const StudyData& study : this->Studies) + for (const StudyData& study : std::as_const(this->Studies)) { existingStudyUIDs.insert(study.studyInstanceUID); } @@ -1563,7 +1563,7 @@ void ctkDICOMStudyModel::forceUpdateStudyJobs(const QString &studyInstanceUID) // Stop running or waiting jobs QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : runningJobs) + for (const QSharedPointer& job : std::as_const(runningJobs)) { jobUIDs.append(job->jobUID()); } @@ -1573,7 +1573,7 @@ void ctkDICOMStudyModel::forceUpdateStudyJobs(const QString &studyInstanceUID) { QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : failedJobs) + for (const QSharedPointer& job : std::as_const(failedJobs)) { jobUIDs.append(job->jobUID()); } @@ -1611,7 +1611,7 @@ void ctkDICOMStudyModel::updateGUIFromScheduler(const QVariant& data) // Sort study UIDs by date/time (most recent first) using the same logic as proxy models QList> studyDateTimePairs; - for (const QString& studyInstanceUID : td.QueriedStudyInstanceUIDs) + for (const QString& studyInstanceUID : std::as_const(td.QueriedStudyInstanceUIDs)) { QModelIndex idx = this->indexFromStudyInstanceUID(studyInstanceUID); QString studyDate = this->data(idx, ctkDICOMStudyModel::StudyDateRole).toString(); diff --git a/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp index a0558b8a8f..3fb469b7df 100644 --- a/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp @@ -265,7 +265,8 @@ void ctkDICOMQueryRetrieveWidget::query() d->QueriesByServer[d->CurrentServer] = query; - for (const auto & StudyAndSeriesInstanceUIDPair : query->studyAndSeriesInstanceUIDQueried() ) + const auto queriedPairs = query->studyAndSeriesInstanceUIDQueried(); + for (const auto & StudyAndSeriesInstanceUIDPair : queriedPairs ) { d->QueriesByStudyUID[StudyAndSeriesInstanceUIDPair.first] = query; d->StudyAndSeriesInstanceUIDPairList.push_back(qMakePair( StudyAndSeriesInstanceUIDPair.first, StudyAndSeriesInstanceUIDPair.second )); diff --git a/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp index 4fe34e4a29..1d30cd891d 100644 --- a/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp @@ -2887,7 +2887,7 @@ void ctkDICOMVisualBrowserWidget::onStudiesSortedByDate(const QStringList& sorte // Find which patient these studies belong to QString patientID; - QList studyModels = d->PatientModel->allStudyModels(); + const QList studyModels = d->PatientModel->allStudyModels(); for (ctkDICOMStudyModel* studyModel : studyModels) { if (studyModel && studyModel->studyInstanceUIDs().contains(sortedStudyInstanceUIDs.first())) @@ -2919,7 +2919,7 @@ void ctkDICOMVisualBrowserWidget::onStudyReadyToOpen(const QString& studyInstanc // Get the patient ID for this study QString patientID; - QList studyModels = d->PatientModel->allStudyModels(); + const QList studyModels = d->PatientModel->allStudyModels(); for (ctkDICOMStudyModel* studyModel : studyModels) { if (studyModel && studyModel->studyInstanceUIDs().contains(studyInstanceUID)) @@ -3296,7 +3296,7 @@ void ctkDICOMVisualBrowserWidget::onSeriesDoubleClicked(const QString& seriesIns ctkDICOMStudyListView* studyListView = d->PatientView->studyListView(); if (studyListView) { - QMap allSeriesViews = studyListView->getAllSeriesView(); + const QMap allSeriesViews = studyListView->getAllSeriesView(); for (ctkDICOMSeriesTableView* seriesView : allSeriesViews) { if (seriesView) @@ -3383,10 +3383,10 @@ void ctkDICOMVisualBrowserWidget::removePatients(const QStringList& patientUIDs) QStringList loadedSeriesInstanceUIDs = d->DicomDatabase->loadedSeriesInstanceUIDs(); foreach (const QString& patientUID, patientUIDs) { - QStringList studyInstanceUIDs = d->DicomDatabase->studiesForPatient(patientUID); + const QStringList studyInstanceUIDs = d->DicomDatabase->studiesForPatient(patientUID); for (const QString& studyInstanceUID : studyInstanceUIDs) { - QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); + const QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); for (const QString& seriesInstanceUID : seriesInstanceUIDs) { loadedSeriesInstanceUIDs.removeAll(seriesInstanceUID); @@ -3487,7 +3487,7 @@ void ctkDICOMVisualBrowserWidget::removeStudies(const QStringList& studyInstance QStringList loadedSeriesInstanceUIDs = d->DicomDatabase->loadedSeriesInstanceUIDs(); foreach (const QString& studyInstanceUID, studyInstanceUIDs) { - QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); + const QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); for (const QString& seriesInstanceUID : seriesInstanceUIDs) { loadedSeriesInstanceUIDs.removeAll(seriesInstanceUID); @@ -3743,7 +3743,7 @@ void ctkDICOMVisualBrowserWidget::onLoadSeries(const QStringList& seriesInstance { emit seriesRetrieved(retrievedSeriesInstanceUIDs); QStringList loadedSeriesInstanceUIDs = d->DicomDatabase->loadedSeriesInstanceUIDs(); - for (const QString& uid : retrievedSeriesInstanceUIDs) + for (const QString& uid : std::as_const(retrievedSeriesInstanceUIDs)) { if (!loadedSeriesInstanceUIDs.contains(uid)) {