From cbf7dff87e6f4c8aab8aac8aee447e08667cba46 Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Fri, 19 Oct 2012 18:13:11 +0200 Subject: [PATCH] Show how to extend the Qt widgets with custom properties --- declarativeobjects.cpp | 4 ++-- declarativeobjects_p.h | 5 +++-- declarativewidgets.pro | 14 ++++++++++++-- editor.qml | 2 +- objectadaptors.cpp | 12 ++++++++++++ objectadaptors_p.h | 22 ++++++++++++++++++++++ 6 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 objectadaptors.cpp create mode 100644 objectadaptors_p.h diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index 051006b..d38dfa8 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -930,12 +930,12 @@ DeclarativeTabWidgetAttached *DeclarativeTabWidget::qmlAttachedProperties(QObjec CUSTOM_METAOBJECT(DeclarativeTabWidget, QTabWidget) // DeclarativeTextEdit -DeclarativeTextEdit::DeclarativeTextEdit(QObject *parent) : DeclarativeWidgetProxy(parent) +DeclarativeTextEdit::DeclarativeTextEdit(QObject *parent) : DeclarativeWidgetProxy(parent) { connectAllSignals(m_proxiedObject, this); } -CUSTOM_METAOBJECT(DeclarativeTextEdit, QTextEdit) +CUSTOM_METAOBJECT(DeclarativeTextEdit, TextEdit) // DeclarativeToolBar DeclarativeToolBar::DeclarativeToolBar(QObject *parent) : DeclarativeWidgetProxy(parent) diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index 76bfef1..f4de211 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -1,6 +1,8 @@ #ifndef DECLARATIVEOBJECTS_H #define DECLARATIVEOBJECTS_H +#include "objectadaptors_p.h" + #include #include #include @@ -16,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -535,7 +536,7 @@ class DeclarativeTabWidget : public DeclarativeWidgetProxy QML_DECLARE_TYPEINFO(DeclarativeTabWidget, QML_HAS_ATTACHED_PROPERTIES) -class DeclarativeTextEdit : public DeclarativeWidgetProxy +class DeclarativeTextEdit : public DeclarativeWidgetProxy { DECLARATIVE_OBJECT diff --git a/declarativewidgets.pro b/declarativewidgets.pro index 0a82893..4d13136 100644 --- a/declarativewidgets.pro +++ b/declarativewidgets.pro @@ -8,8 +8,18 @@ DEPENDPATH += . INCLUDEPATH += . # Input -HEADERS += declarativeobjects_p.h declarativewidgetdocument.h qmetaobjectbuilder_p.h -SOURCES += declarativeobjects.cpp declarativewidgetdocument.cpp main.cpp qmetaobjectbuilder.cpp +HEADERS += \ + declarativeobjects_p.h \ + declarativewidgetdocument.h \ + objectadaptors_p.h \ + qmetaobjectbuilder_p.h + +SOURCES += \ + declarativeobjects.cpp \ + declarativewidgetdocument.cpp \ + main.cpp \ + objectadaptors.cpp \ + qmetaobjectbuilder.cpp QT += declarative diff --git a/editor.qml b/editor.qml index 53a5379..efd35e0 100644 --- a/editor.qml +++ b/editor.qml @@ -1,7 +1,7 @@ import QtGui 1.0 MainWindow { - windowTitle: qsTr("Declarative Widget Editor") + windowTitle: textEdit.modified ? qsTr("Declarative Widget Editor *modified*") : qsTr("Declarative Widget Editor") size: Qt.size(500, 300) diff --git a/objectadaptors.cpp b/objectadaptors.cpp new file mode 100644 index 0000000..ca7bc0c --- /dev/null +++ b/objectadaptors.cpp @@ -0,0 +1,12 @@ +#include "objectadaptors_p.h" + +TextEdit::TextEdit(QWidget *parent) + : QTextEdit(parent) +{ + connect(document(), SIGNAL(modificationChanged(bool)), this, SIGNAL(modifiedChanged())); +} + +bool TextEdit::modified() const +{ + return document()->isModified(); +} diff --git a/objectadaptors_p.h b/objectadaptors_p.h new file mode 100644 index 0000000..c485ce8 --- /dev/null +++ b/objectadaptors_p.h @@ -0,0 +1,22 @@ +#ifndef OBJECTADAPTORS_P_H +#define OBJECTADAPTORS_P_H + +#include + +class TextEdit : public QTextEdit +{ + Q_OBJECT + + Q_PROPERTY(bool modified READ modified NOTIFY modifiedChanged) + + public: + TextEdit(QWidget *parent = 0); + + Q_SIGNALS: + void modifiedChanged(); + + private: + bool modified() const; +}; + +#endif -- 1.7.2.5