From 82c3e9edc2e9990027a65705c31bd618df455d91 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 6 May 2015 12:59:05 +0200 Subject: Manual QScreen test: capture screen changes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Make the subject of the Property watcher settable. - Embed it into a QMainWindow with menu and listen to the screen changed event, setting the new screen with a message about the position. - Remove hash, close obsolete windows by iterating over the top levels looking for the screen. Change-Id: I4ed1122bab7c0cd9676d63995ce85a44719f4ba6 Reviewed-by: Morten Johan Sørvig --- tests/manual/qscreen/propertywatcher.cpp | 81 +++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 17 deletions(-) (limited to 'tests/manual/qscreen/propertywatcher.cpp') diff --git a/tests/manual/qscreen/propertywatcher.cpp b/tests/manual/qscreen/propertywatcher.cpp index 19668a8d26..b745ef5125 100644 --- a/tests/manual/qscreen/propertywatcher.cpp +++ b/tests/manual/qscreen/propertywatcher.cpp @@ -35,35 +35,82 @@ #include #include #include +#include #include "propertyfield.h" PropertyWatcher::PropertyWatcher(QObject *subject, QString annotation, QWidget *parent) - : QWidget(parent), m_subject(subject), m_layout(new QFormLayout) + : QWidget(parent), m_subject(Q_NULLPTR), m_formLayout(new QFormLayout(this)) { - setWindowTitle(QString("Properties of %1 %2 %3") - .arg(subject->metaObject()->className()).arg(subject->objectName()).arg(annotation)); setMinimumSize(450, 300); + m_formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); + setSubject(subject, annotation); +} + +class UpdatesEnabledBlocker +{ + Q_DISABLE_COPY(UpdatesEnabledBlocker); +public: + explicit UpdatesEnabledBlocker(QWidget *w) : m_widget(w) + { + m_widget->setUpdatesEnabled(false); + } + ~UpdatesEnabledBlocker() + { + m_widget->setUpdatesEnabled(true); + m_widget->update(); + } + +private: + QWidget *m_widget; +}; + +void PropertyWatcher::setSubject(QObject *s, const QString &annotation) +{ + if (s == m_subject) + return; + + UpdatesEnabledBlocker blocker(this); + + if (m_subject) { + disconnect(m_subject, &QObject::destroyed, this, &PropertyWatcher::subjectDestroyed); + for (int i = m_formLayout->count() - 1; i >= 0; --i) { + QLayoutItem *item = m_formLayout->takeAt(i); + delete item->widget(); + delete item; + } + window()->setWindowTitle(QString()); + window()->setWindowIconText(QString()); + } + + m_subject = s; + if (!m_subject) + return; + const QMetaObject* meta = m_subject->metaObject(); + QString title = QLatin1String("Properties ") + QLatin1String(meta->className()); + if (!m_subject->objectName().isEmpty()) + title += QLatin1Char(' ') + m_subject->objectName(); + if (!annotation.isEmpty()) + title += QLatin1Char(' ') + annotation; + window()->setWindowTitle(title); - for (int i = 0; i < meta->propertyCount(); ++i) { - QMetaProperty prop = meta->property(i); + for (int i = 0, count = meta->propertyCount(); i < count; ++i) { + const QMetaProperty prop = meta->property(i); if (prop.isReadable()) { - PropertyField* field = new PropertyField(m_subject, prop); - m_layout->addRow(prop.name(), field); + QLabel *label = new QLabel(prop.name(), this); + PropertyField *field = new PropertyField(m_subject, prop, this); + m_formLayout->addRow(label, field); if (!qstrcmp(prop.name(), "name")) - setWindowIconText(prop.read(subject).toString()); + window()->setWindowIconText(prop.read(m_subject).toString()); + label->setVisible(true); + field->setVisible(true); } } - QPushButton *updateButton = new QPushButton("update"); - connect(updateButton, &QPushButton::clicked, this, &PropertyWatcher::updateAllFields); - m_layout->addRow("", updateButton); - m_layout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); - setLayout(m_layout); - connect(subject, &QObject::destroyed, this, &PropertyWatcher::subjectDestroyed); -} + connect(m_subject, &QObject::destroyed, this, &PropertyWatcher::subjectDestroyed); -PropertyWatcher::~PropertyWatcher() -{ + QPushButton *updateButton = new QPushButton(QLatin1String("Update"), this); + connect(updateButton, &QPushButton::clicked, this, &PropertyWatcher::updateAllFields); + m_formLayout->addRow(QString(), updateButton); } void PropertyWatcher::updateAllFields() -- cgit v1.2.3