diff --git a/src/libs/timeline/timelinemodelaggregator.cpp b/src/libs/timeline/timelinemodelaggregator.cpp index 0986486af31..b8c4bbd41a9 100644 --- a/src/libs/timeline/timelinemodelaggregator.cpp +++ b/src/libs/timeline/timelinemodelaggregator.cpp @@ -28,6 +28,8 @@ #include "timelinemodel.h" #include "timelinenotesmodel.h" +#include + #include #include @@ -70,10 +72,15 @@ void TimelineModelAggregator::addModel(TimelineModel *m) emit heightChanged(); } -void TimelineModelAggregator::setModels(const QList &models) +void TimelineModelAggregator::setModels(const QVariantList &models) { Q_D(TimelineModelAggregator); - if (d->modelList == models) + + QList timelineModels = Utils::transform(models, [](const QVariant &model) { + return qvariant_cast(model); + }); + + if (d->modelList == timelineModels) return; int prevHeight = height(); @@ -83,8 +90,8 @@ void TimelineModelAggregator::setModels(const QList &models) d->notesModel->removeTimelineModel(m); } - d->modelList = models; - foreach (TimelineModel *m, models) { + d->modelList = timelineModels; + foreach (TimelineModel *m, timelineModels) { connect(m, &TimelineModel::heightChanged, this, &TimelineModelAggregator::heightChanged); if (d->notesModel) d->notesModel->addTimelineModel(m); diff --git a/src/libs/timeline/timelinemodelaggregator.h b/src/libs/timeline/timelinemodelaggregator.h index 56aaf86d06c..fb0e5a1162c 100644 --- a/src/libs/timeline/timelinemodelaggregator.h +++ b/src/libs/timeline/timelinemodelaggregator.h @@ -34,7 +34,7 @@ class TIMELINE_EXPORT TimelineModelAggregator : public QObject { Q_OBJECT Q_PROPERTY(int height READ height NOTIFY heightChanged) - Q_PROPERTY(QVariantList models READ models NOTIFY modelsChanged) + Q_PROPERTY(QVariantList models READ models WRITE setModels NOTIFY modelsChanged) Q_PROPERTY(Timeline::TimelineNotesModel *notes READ notes CONSTANT) public: TimelineModelAggregator(TimelineNotesModel *notes, QObject *parent = 0); @@ -43,9 +43,10 @@ public: int height() const; void addModel(TimelineModel *m); - void setModels(const QList &models); const TimelineModel *model(int modelIndex) const; + QVariantList models() const; + void setModels(const QVariantList &models); TimelineNotesModel *notes() const; void clear(); diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp index e50c4d82947..bf676a4968a 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp @@ -130,15 +130,18 @@ QmlProfilerTraceView::QmlProfilerTraceView(QWidget *parent, QmlProfilerViewManag d->m_modelProxy = new Timeline::TimelineModelAggregator(modelManager->notesModel(), this); d->m_modelManager = modelManager; - QList models; - models.append(new PixmapCacheModel(modelManager, d->m_modelProxy)); - models.append(new SceneGraphTimelineModel(modelManager, d->m_modelProxy)); - models.append(new MemoryUsageModel(modelManager, d->m_modelProxy)); - models.append(new InputEventsModel(modelManager, d->m_modelProxy)); - models.append(new DebugMessagesModel(modelManager, d->m_modelProxy)); - models.append(new QmlProfilerAnimationsModel(modelManager, d->m_modelProxy)); - for (int i = 0; i < MaximumRangeType; ++i) - models.append(new QmlProfilerRangeModel(modelManager, (RangeType)i, d->m_modelProxy)); + QVariantList models; + models.append(QVariant::fromValue(new PixmapCacheModel(modelManager, d->m_modelProxy))); + models.append(QVariant::fromValue(new SceneGraphTimelineModel(modelManager, d->m_modelProxy))); + models.append(QVariant::fromValue(new MemoryUsageModel(modelManager, d->m_modelProxy))); + models.append(QVariant::fromValue(new InputEventsModel(modelManager, d->m_modelProxy))); + models.append(QVariant::fromValue(new DebugMessagesModel(modelManager, d->m_modelProxy))); + models.append(QVariant::fromValue(new QmlProfilerAnimationsModel(modelManager, + d->m_modelProxy))); + for (int i = 0; i < MaximumRangeType; ++i) { + models.append(QVariant::fromValue(new QmlProfilerRangeModel(modelManager, (RangeType)i, + d->m_modelProxy))); + } d->m_modelProxy->setModels(models); // Minimum height: 5 rows of 20 pixels + scrollbar of 50 pixels + 20 pixels margin