drop support for some properties annotations, revisioned properties and methods

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-04-26 22:40:51 +03:00
parent 2fa4e0cdc5
commit 65d8629a0c
42 changed files with 104 additions and 766 deletions

View file

@ -619,7 +619,6 @@ katie_generate_obsolete(QSizeF QtCore qsize.h)
katie_generate_obsolete(QSpacerItem QtGui qlayoutitem.h) katie_generate_obsolete(QSpacerItem QtGui qlayoutitem.h)
katie_generate_obsolete(QSplitterHandle QtGui qsplitter.h) katie_generate_obsolete(QSplitterHandle QtGui qsplitter.h)
katie_generate_obsolete(QSpontaneKeyEvent QtTest qtestspontaneevent.h) katie_generate_obsolete(QSpontaneKeyEvent QtTest qtestspontaneevent.h)
katie_generate_obsolete(QStandardItemEditorCreator QtGui qitemeditorfactory.h)
katie_generate_obsolete(QStandardItem QtGui qstandarditemmodel.h) katie_generate_obsolete(QStandardItem QtGui qstandarditemmodel.h)
katie_generate_obsolete(QStatusTipEvent QtGui qevent.h) katie_generate_obsolete(QStatusTipEvent QtGui qevent.h)
katie_generate_obsolete(QStringListIterator QtCore qstringlist.h) katie_generate_obsolete(QStringListIterator QtCore qstringlist.h)

View file

@ -502,7 +502,6 @@ include/katie/QtGui/QSplitterHandle
include/katie/QtGui/QStackedLayout include/katie/QtGui/QStackedLayout
include/katie/QtGui/QStackedWidget include/katie/QtGui/QStackedWidget
include/katie/QtGui/QStandardItem include/katie/QtGui/QStandardItem
include/katie/QtGui/QStandardItemEditorCreator
include/katie/QtGui/QStandardItemModel include/katie/QtGui/QStandardItemModel
include/katie/QtGui/QStatusBar include/katie/QtGui/QStatusBar
include/katie/QtGui/QStatusTipEvent include/katie/QtGui/QStatusTipEvent

View file

@ -177,7 +177,6 @@ incmap = {
'QSpacerItem': 'qlayoutitem.h', 'QSpacerItem': 'qlayoutitem.h',
'QSplitterHandle': 'qsplitter.h', 'QSplitterHandle': 'qsplitter.h',
'QStandardItem': 'qstandarditemmodel.h', 'QStandardItem': 'qstandarditemmodel.h',
'QStandardItemEditorCreator': 'qitemeditorfactory.h',
'QStatusTipEvent': 'qevent.h', 'QStatusTipEvent': 'qevent.h',
'QStyleHintReturn': 'qstyleoption.h', 'QStyleHintReturn': 'qstyleoption.h',
'QStyleHintReturnMask': 'qstyleoption.h', 'QStyleHintReturnMask': 'qstyleoption.h',

View file

@ -386,7 +386,6 @@ classlist = [
"QStackedLayout", "QStackedLayout",
"QStackedWidget", "QStackedWidget",
"QStandardItem", "QStandardItem",
"QStandardItemEditorCreator",
"QStandardItemModel", "QStandardItemModel",
"QStandardPaths", "QStandardPaths",
"QStatusBar", "QStatusBar",

View file

@ -99,11 +99,7 @@ QT_BEGIN_NAMESPACE
\value ReadProperty \value ReadProperty
\value WriteProperty \value WriteProperty
\value ResetProperty \value ResetProperty
\value QueryPropertyDesignable
\value QueryPropertyScriptable \value QueryPropertyScriptable
\value QueryPropertyStored
\value QueryPropertyEditable
\value QueryPropertyUser
\value CreateInstance \value CreateInstance
*/ */
@ -784,24 +780,6 @@ QMetaProperty QMetaObject::property(int index) const
return result; return result;
} }
/*!
\since 4.2
Returns the property that has the \c USER flag set to true.
\sa QMetaProperty::isUser()
*/
QMetaProperty QMetaObject::userProperty() const
{
const int propCount = propertyCount();
for (int i = propCount - 1; i >= 0; --i) {
const QMetaProperty prop = property(i);
if (prop.isUser())
return prop;
}
return QMetaProperty();
}
/*! /*!
Returns the meta-data for the item of class information with the Returns the meta-data for the item of class information with the
given \a index. given \a index.
@ -1343,25 +1321,6 @@ int QMetaMethod::methodIndex() const
return ((handle - priv(mobj->d.data)->methodData) / 5) + mobj->methodOffset(); return ((handle - priv(mobj->d.data)->methodData) / 5) + mobj->methodOffset();
} }
/*!
\internal
Returns the method revision if one was
specified by Q_REVISION, otherwise returns 0.
*/
int QMetaMethod::revision() const
{
if (!mobj)
return 0;
if ((QMetaMethod::Access)(mobj->d.data[handle + 4] & MethodRevisioned)) {
int offset = priv(mobj->d.data)->methodData
+ priv(mobj->d.data)->methodCount * 5
+ (handle - priv(mobj->d.data)->methodData) / 5;
return mobj->d.data[offset];
}
return 0;
}
/*! /*!
Returns the access specification of this method (private, Returns the access specification of this method (private,
protected, or public). protected, or public).
@ -1968,8 +1927,8 @@ inline static QByteArray qualifiedName(const QMetaEnum &e)
\section1 Property Meta-Data \section1 Property Meta-Data
A property has a name() and a type(), as well as various A property has a name() and a type(), as well as various
attributes that specify its behavior: isReadable(), isWritable(), attributes that specify its behavior: isReadable(), isWritable()
isDesignable(), isScriptable(), and isStored(). and isScriptable().
If the property is an enumeration, isEnumType() returns true; if the If the property is an enumeration, isEnumType() returns true; if the
property is an enumeration that is also a flag (i.e. its values property is an enumeration that is also a flag (i.e. its values
@ -2379,35 +2338,6 @@ int QMetaProperty::notifySignalIndex() const
} }
} }
/*!
\internal
Returns the property revision if one was
specified by REVISION, otherwise returns 0.
*/
int QMetaProperty::revision() const
{
if (!mobj)
return 0;
int flags = mobj->d.data[handle + 2];
if (flags & Revisioned) {
int offset = priv(mobj->d.data)->propertyData +
priv(mobj->d.data)->propertyCount * 3 + idx;
// Revision data is placed after NOTIFY data, if present.
// Iterate through properties to discover whether we have NOTIFY signals.
for (int i = 0; i < priv(mobj->d.data)->propertyCount; ++i) {
int handle = priv(mobj->d.data)->propertyData + 3*i;
if (mobj->d.data[handle + 2] & Notify) {
offset += priv(mobj->d.data)->propertyCount;
break;
}
}
return mobj->d.data[offset];
} else {
return 0;
}
}
/*! /*!
Returns true if this property is writable; otherwise returns Returns true if this property is writable; otherwise returns
false. false.
@ -2422,33 +2352,6 @@ bool QMetaProperty::isWritable() const
return flags & Writable; return flags & Writable;
} }
/*!
Returns true if this property is designable for the given \a object;
otherwise returns false.
If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c DESIGNABLE attribute is false; otherwise
returns true (if the attribute is true or is a function or expression).
\sa isScriptable(), isStored()
*/
bool QMetaProperty::isDesignable(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & Designable;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyDesignable,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*! /*!
Returns true if the property is scriptable for the given \a object; Returns true if the property is scriptable for the given \a object;
otherwise returns false. otherwise returns false.
@ -2456,8 +2359,6 @@ bool QMetaProperty::isDesignable(const QObject *object) const
If no \a object is given, the function returns false if the If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c SCRIPTABLE attribute is false; otherwise returns \c{Q_PROPERTY()}'s \c SCRIPTABLE attribute is false; otherwise returns
true (if the attribute is true or is a function or expression). true (if the attribute is true or is a function or expression).
\sa isDesignable(), isStored()
*/ */
bool QMetaProperty::isScriptable(const QObject *object) const bool QMetaProperty::isScriptable(const QObject *object) const
{ {
@ -2473,113 +2374,6 @@ bool QMetaProperty::isScriptable(const QObject *object) const
return b; return b;
} }
/*!
Returns true if the property is stored for \a object; otherwise returns
false.
If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c STORED attribute is false; otherwise returns
true (if the attribute is true or is a function or expression).
\sa isDesignable(), isScriptable()
*/
bool QMetaProperty::isStored(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & Stored;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyStored,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*!
Returns true if this property is designated as the \c USER
property, i.e., the one that the user can edit for \a object or
that is significant in some other way. Otherwise it returns
false. e.g., the \c text property is the \c USER editable property
of a QLineEdit.
If \a object is null, the function returns false if the \c
{Q_PROPERTY()}'s \c USER attribute is false. Otherwise it returns
true.
\sa QMetaObject::userProperty(), isDesignable(), isScriptable()
*/
bool QMetaProperty::isUser(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & User;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyUser,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*!
\since 4.6
Returns true if the property is constant; otherwise returns false.
A property is constant if the \c{Q_PROPERTY()}'s \c CONSTANT attribute
is set.
*/
bool QMetaProperty::isConstant() const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
return flags & Constant;
}
/*!
\since 4.6
Returns true if the property is final; otherwise returns false.
A property is final if the \c{Q_PROPERTY()}'s \c FINAL attribute
is set.
*/
bool QMetaProperty::isFinal() const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
return flags & Final;
}
/*!
\obsolete
Returns true if the property is editable for the given \a object;
otherwise returns false.
If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c EDITABLE attribute is false; otherwise returns
true (if the attribute is true or is a function or expression).
\sa isDesignable(), isScriptable(), isStored()
*/
bool QMetaProperty::isEditable(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & Editable;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyEditable,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*! /*!
\class QMetaClassInfo \class QMetaClassInfo

View file

@ -45,7 +45,6 @@ public:
enum Attributes { Cloned = 0x1, Scriptable = 0x2 }; enum Attributes { Cloned = 0x1, Scriptable = 0x2 };
int attributes() const; int attributes() const;
int methodIndex() const; int methodIndex() const;
int revision() const;
inline const QMetaObject *enclosingMetaObject() const { return mobj; } inline const QMetaObject *enclosingMetaObject() const { return mobj; }
@ -162,13 +161,7 @@ public:
bool isReadable() const; bool isReadable() const;
bool isWritable() const; bool isWritable() const;
bool isResettable() const; bool isResettable() const;
bool isDesignable(const QObject *obj = nullptr) const;
bool isScriptable(const QObject *obj = nullptr) const; bool isScriptable(const QObject *obj = nullptr) const;
bool isStored(const QObject *obj = nullptr) const;
bool isEditable(const QObject *obj = nullptr) const;
bool isUser(const QObject *obj = nullptr) const;
bool isConstant() const;
bool isFinal() const;
bool isFlagType() const; bool isFlagType() const;
bool isEnumType() const; bool isEnumType() const;
@ -178,8 +171,6 @@ public:
QMetaMethod notifySignal() const; QMetaMethod notifySignal() const;
int notifySignalIndex() const; int notifySignalIndex() const;
int revision() const;
QVariant read(const QObject *obj) const; QVariant read(const QObject *obj) const;
bool write(QObject *obj, const QVariant &value) const; bool write(QObject *obj, const QVariant &value) const;
bool reset(QObject *obj) const; bool reset(QObject *obj) const;

View file

@ -54,20 +54,9 @@ enum PropertyFlags {
EnumOrFlag = 0x00000008, EnumOrFlag = 0x00000008,
StdCppSet = 0x00000100, StdCppSet = 0x00000100,
// Override = 0x00000200, // Override = 0x00000200,
Constant = 0x00000400, Scriptable = 0x00000400,
Final = 0x00000800, ResolveScriptable = 0x00000800,
Designable = 0x00001000, Notify = 0x00001000,
ResolveDesignable = 0x00002000,
Scriptable = 0x00004000,
ResolveScriptable = 0x00008000,
Stored = 0x00010000,
ResolveStored = 0x00020000,
Editable = 0x00040000,
ResolveEditable = 0x00080000,
User = 0x00100000,
ResolveUser = 0x00200000,
Notify = 0x00400000,
Revisioned = 0x00800000
}; };
enum MethodFlags { enum MethodFlags {
@ -83,8 +72,7 @@ enum MethodFlags {
MethodTypeMask = 0x0c, MethodTypeMask = 0x0c,
MethodCloned = 0x10, MethodCloned = 0x10,
MethodScriptable = 0x20, MethodScriptable = 0x20
MethodRevisioned = 0x40
}; };
enum MetaObjectFlags { enum MetaObjectFlags {

View file

@ -51,7 +51,6 @@ class QString;
#define Q_INTERFACES(x) #define Q_INTERFACES(x)
#define Q_PROPERTY(text) #define Q_PROPERTY(text)
#define Q_PRIVATE_PROPERTY(d, text) #define Q_PRIVATE_PROPERTY(d, text)
#define Q_REVISION(v)
#define Q_OVERRIDE(text) #define Q_OVERRIDE(text)
#define Q_ENUMS(x) #define Q_ENUMS(x)
#define Q_FLAGS(x) #define Q_FLAGS(x)
@ -119,7 +118,6 @@ private:
#define Q_INTERFACES(x) Q_INTERFACES(x) #define Q_INTERFACES(x) Q_INTERFACES(x)
#define Q_PROPERTY(text) Q_PROPERTY(text) #define Q_PROPERTY(text) Q_PROPERTY(text)
#define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text) #define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text)
#define Q_REVISION(v) Q_REVISION(v)
#define Q_OVERRIDE(text) Q_OVERRIDE(text) #define Q_OVERRIDE(text) Q_OVERRIDE(text)
#define Q_ENUMS(x) Q_ENUMS(x) #define Q_ENUMS(x) Q_ENUMS(x)
#define Q_FLAGS(x) Q_FLAGS(x) #define Q_FLAGS(x) Q_FLAGS(x)
@ -234,7 +232,6 @@ struct Q_CORE_EXPORT QMetaObject
QMetaEnum enumerator(int index) const; QMetaEnum enumerator(int index) const;
QMetaProperty property(int index) const; QMetaProperty property(int index) const;
QMetaClassInfo classInfo(int index) const; QMetaClassInfo classInfo(int index) const;
QMetaProperty userProperty() const;
static bool checkConnectArgs(const char *signal, const char *method); static bool checkConnectArgs(const char *signal, const char *method);
static QByteArray normalizedSignature(const char *method); static QByteArray normalizedSignature(const char *method);
@ -336,11 +333,7 @@ struct Q_CORE_EXPORT QMetaObject
ReadProperty, ReadProperty,
WriteProperty, WriteProperty,
ResetProperty, ResetProperty,
QueryPropertyDesignable,
QueryPropertyScriptable, QueryPropertyScriptable,
QueryPropertyStored,
QueryPropertyEditable,
QueryPropertyUser,
CreateInstance CreateInstance
}; };

View file

@ -312,7 +312,7 @@ void QDBusMetaObjectGenerator::parseProperties()
mp.typeName = type.name; mp.typeName = type.name;
// build the flags: // build the flags:
mp.flags = StdCppSet | Scriptable | Stored | Designable; mp.flags = StdCppSet | Scriptable;
if (p.access != QDBusIntrospection::Property::Write) if (p.access != QDBusIntrospection::Property::Write)
mp.flags |= Readable; mp.flags |= Readable;
if (p.access != QDBusIntrospection::Property::Read) if (p.access != QDBusIntrospection::Property::Read)

View file

@ -49,11 +49,10 @@ class Q_GUI_EXPORT QFileDialog : public QDialog
Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode) Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode)
Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode) Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode)
Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode) Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly DESIGNABLE false) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
Q_PROPERTY(bool confirmOverwrite READ confirmOverwrite WRITE setConfirmOverwrite DESIGNABLE false) Q_PROPERTY(bool confirmOverwrite READ confirmOverwrite WRITE setConfirmOverwrite)
Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix) Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix)
Q_PROPERTY(bool nameFilterDetailsVisible READ isNameFilterDetailsVisible Q_PROPERTY(bool nameFilterDetailsVisible READ isNameFilterDetailsVisible WRITE setNameFilterDetailsVisible)
WRITE setNameFilterDetailsVisible DESIGNABLE false)
Q_PROPERTY(Options options READ options WRITE setOptions) Q_PROPERTY(Options options READ options WRITE setOptions)
public: public:

View file

@ -482,14 +482,14 @@ inline QRectF QGraphicsItem::mapRectFromScene(qreal ax, qreal ay, qreal w, qreal
class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QGraphicsObject * parent READ parentObject WRITE setParentItem NOTIFY parentChanged DESIGNABLE false) Q_PROPERTY(QGraphicsObject * parent READ parentObject WRITE setParentItem NOTIFY parentChanged)
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL) Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL) Q_PROPERTY(QPointF pos READ pos WRITE setPos)
Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL) Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL) Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged FINAL) Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged)
Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged) Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged) Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint) Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint)

View file

@ -501,27 +501,9 @@ void QItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) con
#else #else
Q_D(const QItemDelegate); Q_D(const QItemDelegate);
QVariant v = index.data(Qt::EditRole); QVariant v = index.data(Qt::EditRole);
QByteArray n = editor->metaObject()->userProperty().name(); QByteArray n = d->editorFactory()->valuePropertyName(v.type());
// ### Qt 5: remove
// A work-around for missing "USER true" in qdatetimeedit.h for
// QTimeEdit's time property and QDateEdit's date property.
// It only triggers if the default user property "dateTime" is
// reported for QTimeEdit and QDateEdit.
if (n == "dateTime") {
if (editor->inherits("QTimeEdit"))
n = "time";
else if (editor->inherits("QDateEdit"))
n = "date";
}
// ### Qt 5: give QComboBox a USER property
if (n.isEmpty() && editor->inherits("QComboBox"))
n = d->editorFactory()->valuePropertyName(static_cast<QVariant::Type>(v.userType()));
if (!n.isEmpty()) { if (!n.isEmpty()) {
if (!v.isValid()) editor->setProperty(n, editor->property(n));
v = QVariant(editor->property(n).userType(), (const void *)0);
editor->setProperty(n, v);
} }
#endif #endif
} }
@ -549,10 +531,7 @@ void QItemDelegate::setModelData(QWidget *editor,
Q_D(const QItemDelegate); Q_D(const QItemDelegate);
Q_ASSERT(model); Q_ASSERT(model);
Q_ASSERT(editor); Q_ASSERT(editor);
QByteArray n = editor->metaObject()->userProperty().name(); QByteArray n = d->editorFactory()->valuePropertyName(model->data(index, Qt::EditRole).type());
if (n.isEmpty())
n = d->editorFactory()->valuePropertyName(
static_cast<QVariant::Type>(model->data(index, Qt::EditRole).userType()));
if (!n.isEmpty()) if (!n.isEmpty())
model->setData(index, editor->property(n), Qt::EditRole); model->setData(index, editor->property(n), Qt::EditRole);
#endif #endif

View file

@ -43,7 +43,7 @@ QT_BEGIN_NAMESPACE
class QBooleanComboBox : public QComboBox class QBooleanComboBox : public QComboBox
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool value READ value WRITE setValue USER true) Q_PROPERTY(bool value READ value WRITE setValue)
public: public:
QBooleanComboBox(QWidget *parent); QBooleanComboBox(QWidget *parent);
@ -311,20 +311,15 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
An editor should provide a user property for the data it edits. An editor should provide a user property for the data it edits.
QItemDelagates can then access the property using Qt's QItemDelagates can then access the property using Qt's
\l{Meta-Object System}{meta-object system} to set and retrieve the \l{Meta-Object System}{meta-object system} to set and retrieve the
editing data. A property is set as the user property with the USER editing data.
keyword:
\snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 0 The editor must return the name of the property from valuePropertyName();
delegates will then use the name to access the property.
If the editor does not provide a user property, it must return the QItemEditorCreator is a convenience template class that can be used
name of the property from valuePropertyName(); delegates will then
use the name to access the property. If a user property exists,
item delegates will not call valuePropertyName().
QStandardItemEditorCreator is a convenience template class that can be used
to register widgets without the need to subclass QItemEditorCreatorBase. to register widgets without the need to subclass QItemEditorCreatorBase.
\sa QStandardItemEditorCreator, QItemEditorFactory, \sa QItemEditorCreator, QItemEditorFactory,
{Model/View Programming}, {Color Editor Factory Example} {Model/View Programming}, {Color Editor Factory Example}
*/ */
@ -362,14 +357,14 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
override this behavior by reimplementing QAbstractItemDelegate::setModelData() override this behavior by reimplementing QAbstractItemDelegate::setModelData()
and QAbstractItemDelegate::setEditorData(). and QAbstractItemDelegate::setEditorData().
\sa QMetaObject::userProperty(), QItemEditorFactory::registerEditor() \sa QMetaObject::property(), QItemEditorFactory::registerEditor()
*/ */
/*! /*!
\class QItemEditorCreator \class QItemEditorCreator
\brief The QItemEditorCreator class makes it possible to create \brief The QItemEditorCreator class makes it possible to create
item editor creator bases without subclassing item editor creator bases without subclassing
QItemEditorCreatorBase. QItemEditorCreatorBase.
\since 4.2 \since 4.2
\ingroup model-view \ingroup model-view
@ -383,13 +378,9 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
The constructor takes the name of the property that contains the The constructor takes the name of the property that contains the
editing data. QItemDelegate can then access the property by name editing data. QItemDelegate can then access the property by name
when it sets and retrieves editing data. Only use this class if when it sets and retrieves editing data.
your editor does not define a user property (using the USER
keyword in the Q_PROPERTY macro). If the widget has a user
property, you should use QStandardItemEditorCreator instead.
\sa QItemEditorCreatorBase, QStandardItemEditorCreator, \sa QItemEditorCreatorBase, QItemEditorFactory, {Color Editor Factory Example}
QItemEditorFactory, {Color Editor Factory Example}
*/ */
/*! /*!
@ -414,55 +405,6 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
\reimp \reimp
*/ */
/*!
\class QStandardItemEditorCreator
\brief The QStandardItemEditorCreator class provides the
possibility to register widgets without having to subclass
QItemEditorCreatorBase.
\since 4.2
\ingroup model-view
This convenience template class makes it possible to register widgets without
having to subclass QItemEditorCreatorBase.
Example:
\snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 2
Setting the \c editorFactory created above in an item delegate via
QItemDelegate::setItemEditorFactory() makes sure that all values of type
QVariant::DateTime will be edited in \c{MyFancyDateTimeEdit}.
The editor must provide a user property that will contain the
editing data. The property is used by \l{QItemDelegate}s to set
and retrieve the data (using Qt's \l{Meta-Object
System}{meta-object system}). You set the user property with
the USER keyword:
\snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 3
\sa QItemEditorCreatorBase, QItemEditorCreator,
QItemEditorFactory, QItemDelegate, {Color Editor Factory Example}
*/
/*!
\fn QStandardItemEditorCreator::QStandardItemEditorCreator()
Constructs an editor creator object.
*/
/*!
\fn QWidget *QStandardItemEditorCreator::createWidget(QWidget *parent) const
\reimp
*/
/*!
\fn QByteArray QStandardItemEditorCreator::valuePropertyName() const
\reimp
*/
#ifndef QT_NO_LINEEDIT #ifndef QT_NO_LINEEDIT
QExpandingLineEdit::QExpandingLineEdit(QWidget *parent) QExpandingLineEdit::QExpandingLineEdit(QWidget *parent)

View file

@ -56,20 +56,6 @@ private:
QByteArray propertyName; QByteArray propertyName;
}; };
template <class T>
class QStandardItemEditorCreator: public QItemEditorCreatorBase
{
public:
inline QStandardItemEditorCreator()
: propertyName(T::staticMetaObject.userProperty().name())
{}
inline QWidget *createWidget(QWidget *parent) const { return new T(parent); }
inline QByteArray valuePropertyName() const { return propertyName; }
private:
QByteArray propertyName;
};
template <class T> template <class T>
Q_INLINE_TEMPLATE QItemEditorCreator<T>::QItemEditorCreator(const QByteArray &avaluePropertyName) Q_INLINE_TEMPLATE QItemEditorCreator<T>::QItemEditorCreator(const QByteArray &avaluePropertyName)

View file

@ -169,7 +169,7 @@ class Q_GUI_EXPORT QListWidget : public QListView
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(int count READ count) Q_PROPERTY(int count READ count)
Q_PROPERTY(int currentRow READ currentRow WRITE setCurrentRow NOTIFY currentRowChanged USER true) Q_PROPERTY(int currentRow READ currentRow WRITE setCurrentRow NOTIFY currentRowChanged)
Q_PROPERTY(bool sortingEnabled READ isSortingEnabled WRITE setSortingEnabled) Q_PROPERTY(bool sortingEnabled READ isSortingEnabled WRITE setSortingEnabled)
friend class QListWidgetItem; friend class QListWidgetItem;

View file

@ -449,27 +449,9 @@ void QStyledItemDelegate::setEditorData(QWidget *editor, const QModelIndex &inde
#else #else
Q_D(const QStyledItemDelegate); Q_D(const QStyledItemDelegate);
QVariant v = index.data(Qt::EditRole); QVariant v = index.data(Qt::EditRole);
QByteArray n = editor->metaObject()->userProperty().name(); QByteArray n = d->editorFactory()->valuePropertyName(v.type());
// ### Qt 5: remove
// A work-around for missing "USER true" in qdatetimeedit.h for
// QTimeEdit's time property and QDateEdit's date property.
// It only triggers if the default user property "dateTime" is
// reported for QTimeEdit and QDateEdit.
if (n == "dateTime") {
if (editor->inherits("QTimeEdit"))
n = "time";
else if (editor->inherits("QDateEdit"))
n = "date";
}
// ### Qt 5: give QComboBox a USER property
if (n.isEmpty() && editor->inherits("QComboBox"))
n = d->editorFactory()->valuePropertyName(static_cast<QVariant::Type>(v.userType()));
if (!n.isEmpty()) { if (!n.isEmpty()) {
if (!v.isValid()) editor->setProperty(n, editor->property(n));
v = QVariant(editor->property(n).userType(), (const void *)0);
editor->setProperty(n, v);
} }
#endif #endif
} }
@ -496,10 +478,7 @@ void QStyledItemDelegate::setModelData(QWidget *editor,
Q_D(const QStyledItemDelegate); Q_D(const QStyledItemDelegate);
Q_ASSERT(model); Q_ASSERT(model);
Q_ASSERT(editor); Q_ASSERT(editor);
QByteArray n = editor->metaObject()->userProperty().name(); QByteArray n = d->editorFactory()->valuePropertyName(model->data(index, Qt::EditRole).type());
if (n.isEmpty())
n = d->editorFactory()->valuePropertyName(
static_cast<QVariant::Type>(model->data(index, Qt::EditRole).userType()));
if (!n.isEmpty()) if (!n.isEmpty())
model->setData(index, editor->property(n), Qt::EditRole); model->setData(index, editor->property(n), Qt::EditRole);
#endif #endif

View file

@ -46,7 +46,7 @@ class Q_GUI_EXPORT QAction : public QObject
Q_ENUMS(MenuRole) Q_ENUMS(MenuRole)
Q_ENUMS(Priority) Q_ENUMS(Priority)
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY changed) Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY changed)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled) Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY changed) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY changed)
Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY changed) Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY changed)
Q_PROPERTY(QString text READ text WRITE setText NOTIFY changed) Q_PROPERTY(QString text READ text WRITE setText NOTIFY changed)

View file

@ -98,9 +98,9 @@ class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(QRect normalGeometry READ normalGeometry) Q_PROPERTY(QRect normalGeometry READ normalGeometry)
Q_PROPERTY(int x READ x) Q_PROPERTY(int x READ x)
Q_PROPERTY(int y READ y) Q_PROPERTY(int y READ y)
Q_PROPERTY(QPoint pos READ pos WRITE move DESIGNABLE false STORED false) Q_PROPERTY(QPoint pos READ pos WRITE move)
Q_PROPERTY(QSize frameSize READ frameSize) Q_PROPERTY(QSize frameSize READ frameSize)
Q_PROPERTY(QSize size READ size WRITE resize DESIGNABLE false STORED false) Q_PROPERTY(QSize size READ size WRITE resize)
Q_PROPERTY(int width READ width) Q_PROPERTY(int width READ width)
Q_PROPERTY(int height READ height) Q_PROPERTY(int height READ height)
Q_PROPERTY(QRect rect READ rect) Q_PROPERTY(QRect rect READ rect)
@ -109,10 +109,10 @@ class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy) Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)
Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize) Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)
Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize) Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)
Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false DESIGNABLE false) Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth)
Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false DESIGNABLE false) Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight)
Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false DESIGNABLE false) Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth)
Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false DESIGNABLE false) Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight)
Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement) Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement)
Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize) Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize)
Q_PROPERTY(QPalette palette READ palette WRITE setPalette) Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
@ -125,19 +125,19 @@ class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy) Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
Q_PROPERTY(bool focus READ hasFocus) Q_PROPERTY(bool focus READ hasFocus)
Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy) Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy)
Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled DESIGNABLE false) Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false) Q_PROPERTY(bool visible READ isVisible WRITE setVisible)
Q_PROPERTY(bool minimized READ isMinimized) Q_PROPERTY(bool minimized READ isMinimized)
Q_PROPERTY(bool maximized READ isMaximized) Q_PROPERTY(bool maximized READ isMaximized)
Q_PROPERTY(bool fullScreen READ isFullScreen) Q_PROPERTY(bool fullScreen READ isFullScreen)
Q_PROPERTY(QSize sizeHint READ sizeHint) Q_PROPERTY(QSize sizeHint READ sizeHint)
Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint) Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint)
Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops) Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops)
Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle DESIGNABLE isWindow) Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon DESIGNABLE isWindow) Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon)
Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText DESIGNABLE isWindow) Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText)
Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity DESIGNABLE isWindow) Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity)
Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified DESIGNABLE isWindow) Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified)
#ifndef QT_NO_TOOLTIP #ifndef QT_NO_TOOLTIP
Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip) Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)
#endif #endif

View file

@ -59,7 +59,7 @@ class Q_GUI_EXPORT QTextControl : public QObject
Q_OBJECT Q_OBJECT
Q_DECLARE_PRIVATE(QTextControl) Q_DECLARE_PRIVATE(QTextControl)
#ifndef QT_NO_TEXTHTMLPARSER #ifndef QT_NO_TEXTHTMLPARSER
Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true) Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged)
#endif #endif
Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode) Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText) Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText)

View file

@ -67,7 +67,7 @@ class Q_GUI_EXPORT QTextDocument : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled) Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false) Q_PROPERTY(bool modified READ isModified WRITE setModified)
Q_PROPERTY(QSizeF pageSize READ pageSize WRITE setPageSize) Q_PROPERTY(QSizeF pageSize READ pageSize WRITE setPageSize)
Q_PROPERTY(QFont defaultFont READ defaultFont WRITE setDefaultFont) Q_PROPERTY(QFont defaultFont READ defaultFont WRITE setDefaultFont)
Q_PROPERTY(QSizeF size READ size) Q_PROPERTY(QSizeF size READ size)

View file

@ -44,12 +44,12 @@ class Q_GUI_EXPORT QAbstractButton : public QWidget
Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut) Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut)
#endif #endif
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable) Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true) Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled)
Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat) Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat)
Q_PROPERTY(bool autoExclusive READ autoExclusive WRITE setAutoExclusive) Q_PROPERTY(bool autoExclusive READ autoExclusive WRITE setAutoExclusive)
Q_PROPERTY(int autoRepeatDelay READ autoRepeatDelay WRITE setAutoRepeatDelay) Q_PROPERTY(int autoRepeatDelay READ autoRepeatDelay WRITE setAutoRepeatDelay)
Q_PROPERTY(int autoRepeatInterval READ autoRepeatInterval WRITE setAutoRepeatInterval) Q_PROPERTY(int autoRepeatInterval READ autoRepeatInterval WRITE setAutoRepeatInterval)
Q_PROPERTY(bool down READ isDown WRITE setDown DESIGNABLE false) Q_PROPERTY(bool down READ isDown WRITE setDown)
public: public:
explicit QAbstractButton(QWidget* parent = nullptr); explicit QAbstractButton(QWidget* parent = nullptr);

View file

@ -38,13 +38,13 @@ class Q_GUI_EXPORT QAbstractSlider : public QWidget
Q_PROPERTY(int maximum READ maximum WRITE setMaximum) Q_PROPERTY(int maximum READ maximum WRITE setMaximum)
Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep) Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep)
Q_PROPERTY(int pageStep READ pageStep WRITE setPageStep) Q_PROPERTY(int pageStep READ pageStep WRITE setPageStep)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true) Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
Q_PROPERTY(int sliderPosition READ sliderPosition WRITE setSliderPosition NOTIFY sliderMoved) Q_PROPERTY(int sliderPosition READ sliderPosition WRITE setSliderPosition NOTIFY sliderMoved)
Q_PROPERTY(bool tracking READ hasTracking WRITE setTracking) Q_PROPERTY(bool tracking READ hasTracking WRITE setTracking)
Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation) Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation)
Q_PROPERTY(bool invertedAppearance READ invertedAppearance WRITE setInvertedAppearance) Q_PROPERTY(bool invertedAppearance READ invertedAppearance WRITE setInvertedAppearance)
Q_PROPERTY(bool invertedControls READ invertedControls WRITE setInvertedControls) Q_PROPERTY(bool invertedControls READ invertedControls WRITE setInvertedControls)
Q_PROPERTY(bool sliderDown READ isSliderDown WRITE setSliderDown DESIGNABLE false) Q_PROPERTY(bool sliderDown READ isSliderDown WRITE setSliderDown)
public: public:
explicit QAbstractSlider(QWidget *parent=0); explicit QAbstractSlider(QWidget *parent=0);

View file

@ -45,7 +45,7 @@ class Q_GUI_EXPORT QComboBox : public QWidget
Q_ENUMS(SizeAdjustPolicy) Q_ENUMS(SizeAdjustPolicy)
Q_PROPERTY(bool editable READ isEditable WRITE setEditable) Q_PROPERTY(bool editable READ isEditable WRITE setEditable)
Q_PROPERTY(int count READ count) Q_PROPERTY(int count READ count)
Q_PROPERTY(QString currentText READ currentText USER true) Q_PROPERTY(QString currentText READ currentText)
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems) Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems)
Q_PROPERTY(int maxCount READ maxCount WRITE setMaxCount) Q_PROPERTY(int maxCount READ maxCount WRITE setMaxCount)
@ -55,8 +55,8 @@ class Q_GUI_EXPORT QComboBox : public QWidget
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize) Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
#ifndef QT_NO_COMPLETER #ifndef QT_NO_COMPLETER
Q_PROPERTY(bool autoCompletion READ autoCompletion WRITE setAutoCompletion DESIGNABLE false) Q_PROPERTY(bool autoCompletion READ autoCompletion WRITE setAutoCompletion)
Q_PROPERTY(Qt::CaseSensitivity autoCompletionCaseSensitivity READ autoCompletionCaseSensitivity WRITE setAutoCompletionCaseSensitivity DESIGNABLE false) Q_PROPERTY(Qt::CaseSensitivity autoCompletionCaseSensitivity READ autoCompletionCaseSensitivity WRITE setAutoCompletionCaseSensitivity)
#endif // QT_NO_COMPLETER #endif // QT_NO_COMPLETER
Q_PROPERTY(bool duplicatesEnabled READ duplicatesEnabled WRITE setDuplicatesEnabled) Q_PROPERTY(bool duplicatesEnabled READ duplicatesEnabled WRITE setDuplicatesEnabled)

View file

@ -35,7 +35,7 @@ class Q_GUI_EXPORT QCommandLinkButton: public QPushButton
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString description READ description WRITE setDescription) Q_PROPERTY(QString description READ description WRITE setDescription)
Q_PROPERTY(bool flat READ isFlat WRITE setFlat DESIGNABLE false) Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
public: public:
explicit QCommandLinkButton(QWidget *parent=0); explicit QCommandLinkButton(QWidget *parent=0);

View file

@ -33,7 +33,7 @@ class QDateTimeEditPrivate;
class Q_GUI_EXPORT QDateTimeEdit : public QWidget class Q_GUI_EXPORT QDateTimeEdit : public QWidget
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged USER true) Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged)
Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged) Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged)
Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY timeChanged) Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY timeChanged)
Q_PROPERTY(QDateTime maximumDateTime READ maximumDateTime) Q_PROPERTY(QDateTime maximumDateTime READ maximumDateTime)

View file

@ -44,7 +44,7 @@ class Q_GUI_EXPORT QDockWidget : public QWidget
Q_PROPERTY(DockWidgetFeatures features READ features WRITE setFeatures NOTIFY featuresChanged) Q_PROPERTY(DockWidgetFeatures features READ features WRITE setFeatures NOTIFY featuresChanged)
Q_PROPERTY(Qt::DockWidgetAreas allowedAreas READ allowedAreas Q_PROPERTY(Qt::DockWidgetAreas allowedAreas READ allowedAreas
WRITE setAllowedAreas NOTIFY allowedAreasChanged) WRITE setAllowedAreas NOTIFY allowedAreasChanged)
Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle DESIGNABLE true) Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
public: public:
explicit QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = 0); explicit QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = 0);

View file

@ -40,7 +40,7 @@ class Q_GUI_EXPORT QFrame : public QWidget
Q_PROPERTY(int lineWidth READ lineWidth WRITE setLineWidth) Q_PROPERTY(int lineWidth READ lineWidth WRITE setLineWidth)
Q_PROPERTY(int midLineWidth READ midLineWidth WRITE setMidLineWidth) Q_PROPERTY(int midLineWidth READ midLineWidth WRITE setMidLineWidth)
Q_PROPERTY(int frameWidth READ frameWidth) Q_PROPERTY(int frameWidth READ frameWidth)
Q_PROPERTY(QRect frameRect READ frameRect WRITE setFrameRect DESIGNABLE false) Q_PROPERTY(QRect frameRect READ frameRect WRITE setFrameRect)
public: public:
explicit QFrame(QWidget* parent = nullptr, Qt::WindowFlags f = 0); explicit QFrame(QWidget* parent = nullptr, Qt::WindowFlags f = 0);

View file

@ -40,7 +40,7 @@ class Q_GUI_EXPORT QGroupBox : public QWidget
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment) Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
Q_PROPERTY(bool flat READ isFlat WRITE setFlat) Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable) Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true) Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled)
public: public:
explicit QGroupBox(QWidget* parent = nullptr); explicit QGroupBox(QWidget* parent = nullptr);
explicit QGroupBox(const QString &title, QWidget* parent = nullptr); explicit QGroupBox(const QString &title, QWidget* parent = nullptr);

View file

@ -46,14 +46,14 @@ class Q_GUI_EXPORT QLineEdit : public QWidget
Q_ENUMS(EchoMode) Q_ENUMS(EchoMode)
Q_PROPERTY(QString inputMask READ inputMask WRITE setInputMask) Q_PROPERTY(QString inputMask READ inputMask WRITE setInputMask)
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged USER true) Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
Q_PROPERTY(int maxLength READ maxLength WRITE setMaxLength) Q_PROPERTY(int maxLength READ maxLength WRITE setMaxLength)
Q_PROPERTY(bool frame READ hasFrame WRITE setFrame) Q_PROPERTY(bool frame READ hasFrame WRITE setFrame)
Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode) Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode)
Q_PROPERTY(QString displayText READ displayText) Q_PROPERTY(QString displayText READ displayText)
Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition) Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition)
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment) Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false) Q_PROPERTY(bool modified READ isModified WRITE setModified)
Q_PROPERTY(bool hasSelectedText READ hasSelectedText) Q_PROPERTY(bool hasSelectedText READ hasSelectedText)
Q_PROPERTY(QString selectedText READ selectedText) Q_PROPERTY(QString selectedText READ selectedText)
Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled) Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled)

View file

@ -52,7 +52,7 @@ class Q_GUI_EXPORT QPlainTextEdit : public QAbstractScrollArea
Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode) Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
Q_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode) Q_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged USER true) Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged)
Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode) Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth) Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth)
Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth) Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)

View file

@ -41,7 +41,7 @@ class Q_GUI_EXPORT QSpinBox : public QAbstractSpinBox
Q_PROPERTY(int minimum READ minimum WRITE setMinimum) Q_PROPERTY(int minimum READ minimum WRITE setMinimum)
Q_PROPERTY(int maximum READ maximum WRITE setMaximum) Q_PROPERTY(int maximum READ maximum WRITE setMaximum)
Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep) Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true) Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public: public:
explicit QSpinBox(QWidget *parent = nullptr); explicit QSpinBox(QWidget *parent = nullptr);
@ -100,7 +100,7 @@ class Q_GUI_EXPORT QDoubleSpinBox : public QAbstractSpinBox
Q_PROPERTY(double minimum READ minimum WRITE setMinimum) Q_PROPERTY(double minimum READ minimum WRITE setMinimum)
Q_PROPERTY(double maximum READ maximum WRITE setMaximum) Q_PROPERTY(double maximum READ maximum WRITE setMaximum)
Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep) Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep)
Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged USER true) Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged)
public: public:
explicit QDoubleSpinBox(QWidget *parent = nullptr); explicit QDoubleSpinBox(QWidget *parent = nullptr);

View file

@ -39,8 +39,8 @@ class Q_GUI_EXPORT QTextBrowser : public QTextEdit
Q_PROPERTY(QUrl source READ source WRITE setSource) Q_PROPERTY(QUrl source READ source WRITE setSource)
Q_OVERRIDE(bool modified SCRIPTABLE false) Q_OVERRIDE(bool modified SCRIPTABLE false)
Q_OVERRIDE(bool readOnly DESIGNABLE false SCRIPTABLE false) Q_OVERRIDE(bool readOnly SCRIPTABLE false)
Q_OVERRIDE(bool undoRedoEnabled DESIGNABLE false SCRIPTABLE false) Q_OVERRIDE(bool undoRedoEnabled SCRIPTABLE false)
Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths) Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths)
Q_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks) Q_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks)
Q_PROPERTY(bool openLinks READ openLinks WRITE setOpenLinks) Q_PROPERTY(bool openLinks READ openLinks WRITE setOpenLinks)

View file

@ -50,9 +50,9 @@ class Q_GUI_EXPORT QTextEdit : public QAbstractScrollArea
Q_PROPERTY(int lineWrapColumnOrWidth READ lineWrapColumnOrWidth WRITE setLineWrapColumnOrWidth) Q_PROPERTY(int lineWrapColumnOrWidth READ lineWrapColumnOrWidth WRITE setLineWrapColumnOrWidth)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
#ifndef QT_NO_TEXTHTMLPARSER #ifndef QT_NO_TEXTHTMLPARSER
Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true) Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged)
#endif #endif
Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText DESIGNABLE false) Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText)
Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode) Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth) Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth)
Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText) Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText)

View file

@ -41,18 +41,11 @@ class Q_GUI_EXPORT QToolBar : public QWidget
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool movable READ isMovable WRITE setMovable Q_PROPERTY(bool movable READ isMovable WRITE setMovable NOTIFY movableChanged)
DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) != 0) Q_PROPERTY(Qt::ToolBarAreas allowedAreas READ allowedAreas WRITE setAllowedAreas NOTIFY allowedAreasChanged)
NOTIFY movableChanged) Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged)
Q_PROPERTY(Qt::ToolBarAreas allowedAreas READ allowedAreas WRITE setAllowedAreas
DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) != 0)
NOTIFY allowedAreasChanged)
Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation
DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) == 0)
NOTIFY orientationChanged)
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged) Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged)
Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle NOTIFY toolButtonStyleChanged)
NOTIFY toolButtonStyleChanged)
Q_PROPERTY(bool floating READ isFloating) Q_PROPERTY(bool floating READ isFloating)
Q_PROPERTY(bool floatable READ isFloatable WRITE setFloatable) Q_PROPERTY(bool floatable READ isFloatable WRITE setFloatable)

View file

@ -153,14 +153,10 @@ void Generator::generateCode()
int methodCount = cdef->signalList.count() + cdef->slotList.count() + cdef->methodList.count(); int methodCount = cdef->signalList.count() + cdef->slotList.count() + cdef->methodList.count();
fprintf(out, " %4d, %4d, // methods\n", methodCount, methodCount ? index : 0); fprintf(out, " %4d, %4d, // methods\n", methodCount, methodCount ? index : 0);
index += methodCount * 5; index += methodCount * 5;
if (cdef->revisionedMethods)
index += methodCount;
fprintf(out, " %4d, %4d, // properties\n", cdef->propertyList.count(), cdef->propertyList.count() ? index : 0); fprintf(out, " %4d, %4d, // properties\n", cdef->propertyList.count(), cdef->propertyList.count() ? index : 0);
index += cdef->propertyList.count() * 3; index += cdef->propertyList.count() * 3;
if(cdef->notifyableProperties) if(cdef->notifyableProperties)
index += cdef->propertyList.count(); index += cdef->propertyList.count();
if (cdef->revisionedProperties)
index += cdef->propertyList.count();
fprintf(out, " %4d, %4d, // enums/sets\n", cdef->enumList.count(), cdef->enumList.count() ? index : 0); fprintf(out, " %4d, %4d, // enums/sets\n", cdef->enumList.count(), cdef->enumList.count() ? index : 0);
int enumsIndex = index; int enumsIndex = index;
@ -193,15 +189,6 @@ void Generator::generateCode()
// //
generateFunctions(cdef->methodList, "method", MethodMethod); generateFunctions(cdef->methodList, "method", MethodMethod);
//
// Build method version arrays
//
if (cdef->revisionedMethods) {
generateFunctionRevisions(cdef->signalList, "signal");
generateFunctionRevisions(cdef->slotList, "slot");
generateFunctionRevisions(cdef->methodList, "method");
}
// //
// Build property array // Build property array
// //
@ -400,8 +387,6 @@ void Generator::generateFunctions(QList<FunctionDef>& list, const char *functype
flags |= MethodCloned; flags |= MethodCloned;
if (f.isScriptable) if (f.isScriptable)
flags |= MethodScriptable; flags |= MethodScriptable;
if (f.revision > 0)
flags |= MethodRevisioned;
fprintf(out, " %4d, %4d, %4d, %4d, 0x%02x,\n", fprintf(out, " %4d, %4d, %4d, %4d, 0x%02x,\n",
strreg(sig.constData()), strreg(sig.constData()),
strreg(arguments.constData()), strreg(arguments.constData()),
@ -410,16 +395,6 @@ void Generator::generateFunctions(QList<FunctionDef>& list, const char *functype
} }
} }
void Generator::generateFunctionRevisions(QList<FunctionDef>& list, const char *functype)
{
if (list.count())
fprintf(out, "\n // %ss: revision\n", functype);
for (int i = 0; i < list.count(); ++i) {
const FunctionDef &f = list.at(i);
fprintf(out, " %4d,\n", f.revision);
}
}
void Generator::generateProperties() void Generator::generateProperties()
{ {
// //
@ -449,42 +424,14 @@ void Generator::generateProperties()
// if (p.override) // if (p.override)
// flags |= Override; // flags |= Override;
if (p.designable.isEmpty())
flags |= ResolveDesignable;
else if (p.designable != "false")
flags |= Designable;
if (p.scriptable.isEmpty()) if (p.scriptable.isEmpty())
flags |= ResolveScriptable; flags |= ResolveScriptable;
else if (p.scriptable != "false") else if (p.scriptable != "false")
flags |= Scriptable; flags |= Scriptable;
if (p.stored.isEmpty())
flags |= ResolveStored;
else if (p.stored != "false")
flags |= Stored;
if (p.editable.isEmpty())
flags |= ResolveEditable;
else if (p.editable != "false")
flags |= Editable;
if (p.user.isEmpty())
flags |= ResolveUser;
else if (p.user != "false")
flags |= User;
if (p.notifyId != -1) if (p.notifyId != -1)
flags |= Notify; flags |= Notify;
if (p.revision > 0)
flags |= Revisioned;
if (p.constant)
flags |= Constant;
if (p.final)
flags |= Final;
fprintf(out, " %4d, %4d, ", fprintf(out, " %4d, %4d, ",
strreg(p.name.constData()), strreg(p.name.constData()),
strreg(p.type.constData())); strreg(p.type.constData()));
@ -505,13 +452,6 @@ void Generator::generateProperties()
p.notifyId); p.notifyId);
} }
} }
if (cdef->revisionedProperties) {
fprintf(out, "\n // properties: revision\n");
for (int i = 0; i < cdef->propertyList.count(); ++i) {
const PropertyDef &p = cdef->propertyList.at(i);
fprintf(out, " %4d,\n", p.revision);
}
}
} }
void Generator::generateEnums(int index) void Generator::generateEnums(int index)
@ -583,21 +523,13 @@ void Generator::generateMetacall()
bool needGet = false; bool needGet = false;
bool needSet = false; bool needSet = false;
bool needReset = false; bool needReset = false;
bool needDesignable = false;
bool needScriptable = false; bool needScriptable = false;
bool needStored = false;
bool needEditable = false;
bool needUser = false;
for (int i = 0; i < cdef->propertyList.size(); ++i) { for (int i = 0; i < cdef->propertyList.size(); ++i) {
const PropertyDef &p = cdef->propertyList.at(i); const PropertyDef &p = cdef->propertyList.at(i);
needGet |= !p.read.isEmpty(); needGet |= !p.read.isEmpty();
needSet |= !p.write.isEmpty(); needSet |= !p.write.isEmpty();
needReset |= !p.reset.isEmpty(); needReset |= !p.reset.isEmpty();
needDesignable |= p.designable.endsWith(')');
needScriptable |= p.scriptable.endsWith(')'); needScriptable |= p.scriptable.endsWith(')');
needStored |= p.stored.endsWith(')');
needEditable |= p.editable.endsWith(')');
needUser |= p.user.endsWith(')');
} }
fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n "); fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
@ -686,23 +618,6 @@ void Generator::generateMetacall()
" _id -= %d;\n" " _id -= %d;\n"
" }", cdef->propertyList.count()); " }", cdef->propertyList.count());
fprintf(out, " else ");
fprintf(out, "if (_c == QMetaObject::QueryPropertyDesignable) {\n");
if (needDesignable) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.designable.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.designable.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyScriptable) {\n"); fprintf(out, " else if (_c == QMetaObject::QueryPropertyScriptable) {\n");
if (needScriptable) { if (needScriptable) {
fprintf(out, " switch (_id) {\n"); fprintf(out, " switch (_id) {\n");
@ -719,56 +634,6 @@ void Generator::generateMetacall()
" _id -= %d;\n" " _id -= %d;\n"
" }", cdef->propertyList.count()); " }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyStored) {\n");
if (needStored) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.stored.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.stored.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyEditable) {\n");
if (needEditable) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.editable.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.editable.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyUser) {\n");
if (needUser) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.user.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.user.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, "\n#endif // QT_NO_PROPERTIES"); fprintf(out, "\n#endif // QT_NO_PROPERTIES");
} }
if (methodList.size() || cdef->signalList.size() || cdef->propertyList.size()) if (methodList.size() || cdef->signalList.size() || cdef->propertyList.size())

View file

@ -37,7 +37,6 @@ public:
private: private:
void generateClassInfos(); void generateClassInfos();
void generateFunctions(QList<FunctionDef> &list, const char *functype, int type); void generateFunctions(QList<FunctionDef> &list, const char *functype, int type);
void generateFunctionRevisions(QList<FunctionDef>& list, const char *functype);
void generateEnums(int index); void generateEnums(int index);
void generateProperties(); void generateProperties();
void generateMetacall(); void generateMetacall();

View file

@ -23,12 +23,12 @@
// DO NOT EDIT. // DO NOT EDIT.
static const short keyword_trans[][128] = { static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,520,517,0,0,0,0,0, {0,0,0,0,0,0,0,0,0,512,509,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
520,252,518,521,0,38,239,519,25,26,236,234,30,235,27,237, 512,252,510,513,0,38,239,511,25,26,236,234,30,235,27,237,
22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43, 22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43,
0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,21,8,8,8,8,8,8,8,8,8,31,522,32,238,8, 8,21,8,8,8,8,8,8,8,8,8,31,514,32,238,8,
0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13, 0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13,
14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0}, 14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -162,7 +162,7 @@ static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0, 0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0,
525,525,525,525,525,525,525,525,525,525,0,0,0,0,0,0, 517,517,517,517,517,517,517,517,517,517,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -321,7 +321,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,524,0,0,0,0,523, 0,0,0,0,0,0,0,0,0,0,516,0,0,0,0,515,
0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -364,7 +364,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,439,388,378,383,364,0,448,0,0,0,0,0,358, 0,0,0,439,388,378,383,364,0,448,0,0,0,0,0,358,
370,0,509,436,0,0,0,0,0,0,0,0,0,0,0,0, 370,0,0,436,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -926,14 +926,6 @@ static const struct
{CHARACTER, 0, 84, 507, CHARACTER}, {CHARACTER, 0, 84, 507, CHARACTER},
{CHARACTER, 0, 89, 508, CHARACTER}, {CHARACTER, 0, 89, 508, CHARACTER},
{Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER}, {Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 510, CHARACTER},
{CHARACTER, 0, 86, 511, CHARACTER},
{CHARACTER, 0, 73, 512, CHARACTER},
{CHARACTER, 0, 83, 513, CHARACTER},
{CHARACTER, 0, 73, 514, CHARACTER},
{CHARACTER, 0, 79, 515, CHARACTER},
{CHARACTER, 0, 78, 516, CHARACTER},
{Q_REVISION_TOKEN, 0, 0, 0, CHARACTER},
{NEWLINE, 0, 0, 0, NOTOKEN}, {NEWLINE, 0, 0, 0, NOTOKEN},
{QUOTE, 0, 0, 0, NOTOKEN}, {QUOTE, 0, 0, 0, NOTOKEN},
{SINGLEQUOTE, 0, 0, 0, NOTOKEN}, {SINGLEQUOTE, 0, 0, 0, NOTOKEN},

View file

@ -74,7 +74,7 @@ bool Moc::parseClassHead(ClassDef *def)
QByteArray name = lexem(); QByteArray name = lexem();
// support "class IDENT name" and "class IDENT(IDENT) name" // support "class IDENT name" and "class IDENT(IDENT) name"
// also support "class IDENT name (final|sealed|Q_DECL_FINAL)" // also support "class IDENT name (final|sealed)"
if (test(LPAREN)) { if (test(LPAREN)) {
until(RPAREN); until(RPAREN);
if (!test(IDENTIFIER)) if (!test(IDENTIFIER))
@ -82,7 +82,7 @@ bool Moc::parseClassHead(ClassDef *def)
name = lexem(); name = lexem();
} else if (test(IDENTIFIER)) { } else if (test(IDENTIFIER)) {
const QByteArray lex = lexem(); const QByteArray lex = lexem();
if (lex != "final" && lex != "sealed" && lex != "Q_DECL_FINAL") if (lex != "final" && lex != "sealed")
name = lex; name = lex;
} }
@ -98,7 +98,7 @@ bool Moc::parseClassHead(ClassDef *def)
if (test(IDENTIFIER)) { if (test(IDENTIFIER)) {
const QByteArray lex = lexem(); const QByteArray lex = lexem();
if (lex != "final" && lex != "sealed" && lex != "Q_DECL_FINAL") if (lex != "final" && lex != "sealed")
return false; return false;
} }
@ -316,23 +316,6 @@ bool Moc::testFunctionAttribute(Token tok, FunctionDef *def)
return false; return false;
} }
bool Moc::testFunctionRevision(FunctionDef *def)
{
if (test(Q_REVISION_TOKEN)) {
next(LPAREN);
QByteArray revision = lexemUntil(RPAREN);
revision.remove(0, 1);
revision.chop(1);
bool ok = false;
def->revision = revision.toInt(&ok);
if (!ok || def->revision < 0)
error("Invalid revision");
return true;
}
return false;
}
// returns false if the function should be ignored // returns false if the function should be ignored
bool Moc::parseFunction(FunctionDef *def, bool inMacro) bool Moc::parseFunction(FunctionDef *def, bool inMacro)
{ {
@ -341,7 +324,7 @@ bool Moc::parseFunction(FunctionDef *def, bool inMacro)
//skip modifiers and attributes //skip modifiers and attributes
while (test(INLINE) || (test(STATIC) && (def->isStatic = true) == true) || while (test(INLINE) || (test(STATIC) && (def->isStatic = true) == true) ||
(test(VIRTUAL) && (def->isVirtual = true) == true) //mark as virtual (test(VIRTUAL) && (def->isVirtual = true) == true) //mark as virtual
|| testFunctionAttribute(def) || testFunctionRevision(def)) {} || testFunctionAttribute(def)) {}
bool templateFunction = (lookup() == TEMPLATE); bool templateFunction = (lookup() == TEMPLATE);
def->type = parseType(); def->type = parseType();
if (def->type.name.isEmpty()) { if (def->type.name.isEmpty()) {
@ -433,7 +416,7 @@ bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
//skip modifiers and attributes //skip modifiers and attributes
while (test(EXPLICIT) || test(INLINE) || (test(STATIC) && (def->isStatic = true) == true) || while (test(EXPLICIT) || test(INLINE) || (test(STATIC) && (def->isStatic = true) == true) ||
(test(VIRTUAL) && (def->isVirtual = true) == true) //mark as virtual (test(VIRTUAL) && (def->isVirtual = true) == true) //mark as virtual
|| testFunctionAttribute(def) || testFunctionRevision(def)) {} || testFunctionAttribute(def)) {}
bool tilde = test(TILDE); bool tilde = test(TILDE);
def->type = parseType(); def->type = parseType();
if (def->type.name.isEmpty()) if (def->type.name.isEmpty())
@ -698,8 +681,6 @@ void Moc::parse()
funcDef.arguments.removeLast(); funcDef.arguments.removeLast();
def.slotList += funcDef; def.slotList += funcDef;
} }
if (funcDef.revision > 0)
++def.revisionedMethods;
} else if (funcDef.isSignal) { } else if (funcDef.isSignal) {
def.signalList += funcDef; def.signalList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) { while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
@ -707,8 +688,6 @@ void Moc::parse()
funcDef.arguments.removeLast(); funcDef.arguments.removeLast();
def.signalList += funcDef; def.signalList += funcDef;
} }
if (funcDef.revision > 0)
++def.revisionedMethods;
} else if (funcDef.isInvokable) { } else if (funcDef.isInvokable) {
def.methodList += funcDef; def.methodList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) { while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
@ -716,8 +695,6 @@ void Moc::parse()
funcDef.arguments.removeLast(); funcDef.arguments.removeLast();
def.methodList += funcDef; def.methodList += funcDef;
} }
if (funcDef.revision > 0)
++def.revisionedMethods;
} }
} }
} else { } else {
@ -800,18 +777,6 @@ void Moc::generate(FILE *out)
void Moc::parseSlots(ClassDef *def, FunctionDef::Access access) void Moc::parseSlots(ClassDef *def, FunctionDef::Access access)
{ {
int defaultRevision = -1;
if (test(Q_REVISION_TOKEN)) {
next(LPAREN);
QByteArray revision = lexemUntil(RPAREN);
revision.remove(0, 1);
revision.chop(1);
bool ok = false;
defaultRevision = revision.toInt(&ok);
if (!ok || defaultRevision < 0)
error("Invalid revision");
}
next(COLON); next(COLON);
while (inClass(def) && hasNext()) { while (inClass(def) && hasNext()) {
switch (next()) { switch (next()) {
@ -837,12 +802,6 @@ void Moc::parseSlots(ClassDef *def, FunctionDef::Access access)
funcDef.access = access; funcDef.access = access;
if (!parseFunction(&funcDef)) if (!parseFunction(&funcDef))
continue; continue;
if (funcDef.revision > 0) {
++def->revisionedMethods;
} else if (defaultRevision != -1) {
funcDef.revision = defaultRevision;
++def->revisionedMethods;
}
def->slotList += funcDef; def->slotList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) { while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
funcDef.wasCloned = true; funcDef.wasCloned = true;
@ -854,18 +813,6 @@ void Moc::parseSlots(ClassDef *def, FunctionDef::Access access)
void Moc::parseSignals(ClassDef *def) void Moc::parseSignals(ClassDef *def)
{ {
int defaultRevision = -1;
if (test(Q_REVISION_TOKEN)) {
next(LPAREN);
QByteArray revision = lexemUntil(RPAREN);
revision.remove(0, 1);
revision.chop(1);
bool ok = false;
defaultRevision = revision.toInt(&ok);
if (!ok || defaultRevision < 0)
error("Invalid revision");
}
next(COLON); next(COLON);
while (inClass(def) && hasNext()) { while (inClass(def) && hasNext()) {
switch (next()) { switch (next()) {
@ -893,12 +840,6 @@ void Moc::parseSignals(ClassDef *def)
warning("Signals cannot be declared virtual"); warning("Signals cannot be declared virtual");
if (funcDef.inlineCode) if (funcDef.inlineCode)
error("Not a signal declaration"); error("Not a signal declaration");
if (funcDef.revision > 0) {
++def->revisionedMethods;
} else if (defaultRevision != -1) {
funcDef.revision = defaultRevision;
++def->revisionedMethods;
}
def->signalList += funcDef; def->signalList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) { while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
funcDef.wasCloned = true; funcDef.wasCloned = true;
@ -913,8 +854,7 @@ void Moc::createPropertyDef(PropertyDef &propDef)
QByteArray type = parseType().name; QByteArray type = parseType().name;
if (type.isEmpty()) if (type.isEmpty())
error(); error();
propDef.designable = propDef.scriptable = propDef.stored = "true"; propDef.scriptable = "true";
propDef.user = "false";
/* /*
The Q_PROPERTY construct cannot contain any commas, since The Q_PROPERTY construct cannot contain any commas, since
commas separate macro arguments. We therefore expect users commas separate macro arguments. We therefore expect users
@ -941,66 +881,33 @@ void Moc::createPropertyDef(PropertyDef &propDef)
propDef.name = lexem(); propDef.name = lexem();
while (test(IDENTIFIER)) { while (test(IDENTIFIER)) {
QByteArray l = lexem(); QByteArray l = lexem();
if (l[0] == 'C' && l == "CONSTANT") {
propDef.constant = true;
continue;
} else if(l[0] == 'F' && l == "FINAL") {
propDef.final = true;
continue;
}
QByteArray v, v2; QByteArray v, v2;
if (test(LPAREN)) { next(IDENTIFIER);
v = lexemUntil(RPAREN); v = lexem();
} else if (test(INTEGER_LITERAL)) { if (v != "true" && v != "false")
v = lexem(); v2 = "()";
if (l != "REVISION")
error(1);
} else {
next(IDENTIFIER);
v = lexem();
if (test(LPAREN))
v2 = lexemUntil(RPAREN);
else if (v != "true" && v != "false")
v2 = "()";
}
switch (l[0]) { switch (l[0]) {
case 'R': case 'R':
if (l == "READ") if (l == "READ")
propDef.read = v; propDef.read = v;
else if (l == "RESET") else if (l == "RESET")
propDef.reset = v + v2; propDef.reset = v + v2;
else if (l == "REVISION") { else
bool ok = false;
propDef.revision = v.toInt(&ok);
if (!ok || propDef.revision < 0)
error(1);
} else
error(2); error(2);
break; break;
case 'S': case 'S':
if (l == "SCRIPTABLE") if (l == "SCRIPTABLE")
propDef.scriptable = v + v2; propDef.scriptable = v + v2;
else if (l == "STORED")
propDef.stored = v + v2;
else else
error(2); error(2);
break; break;
case 'W': if (l != "WRITE") error(2); case 'W': if (l != "WRITE") error(2);
propDef.write = v; propDef.write = v;
break; break;
case 'D': if (l != "DESIGNABLE") error(2);
propDef.designable = v + v2;
break;
case 'E': if (l != "EDITABLE") error(2);
propDef.editable = v + v2;
break;
case 'N': if (l != "NOTIFY") error(2); case 'N': if (l != "NOTIFY") error(2);
propDef.notify = v; propDef.notify = v;
break; break;
case 'U': if (l != "USER") error(2);
propDef.user = v + v2;
break;
default: default:
error(2); error(2);
} }
@ -1012,22 +919,6 @@ void Moc::createPropertyDef(PropertyDef &propDef)
msg += " has no READ accessor function. The property will be invalid."; msg += " has no READ accessor function. The property will be invalid.";
warning(msg.constData()); warning(msg.constData());
} }
if (propDef.constant && !propDef.write.isNull()) {
QByteArray msg;
msg += "Property declaration ";
msg += propDef.name;
msg += " is both WRITEable and CONSTANT. CONSTANT will be ignored.";
propDef.constant = false;
warning(msg.constData());
}
if (propDef.constant && !propDef.notify.isNull()) {
QByteArray msg;
msg += "Property declaration ";
msg += propDef.name;
msg += " is both NOTIFYable and CONSTANT. CONSTANT will be ignored.";
propDef.constant = false;
warning(msg.constData());
}
} }
void Moc::parseProperty(ClassDef *def) void Moc::parseProperty(ClassDef *def)
@ -1040,8 +931,6 @@ void Moc::parseProperty(ClassDef *def)
if(!propDef.notify.isEmpty()) if(!propDef.notify.isEmpty())
def->notifyableProperties++; def->notifyableProperties++;
if (propDef.revision > 0)
++def->revisionedProperties;
def->propertyList += propDef; def->propertyList += propDef;
} }
@ -1068,8 +957,6 @@ void Moc::parsePrivateProperty(ClassDef *def)
if(!propDef.notify.isEmpty()) if(!propDef.notify.isEmpty())
def->notifyableProperties++; def->notifyableProperties++;
if (propDef.revision > 0)
++def->revisionedProperties;
def->propertyList += propDef; def->propertyList += propDef;
} }
@ -1219,9 +1106,6 @@ void Moc::parseSlotInPrivate(ClassDef *def, FunctionDef::Access access)
funcDef.arguments.removeLast(); funcDef.arguments.removeLast();
def->slotList += funcDef; def->slotList += funcDef;
} }
if (funcDef.revision > 0)
++def->revisionedMethods;
} }
QByteArray Moc::lexemUntil(Token target) QByteArray Moc::lexemUntil(Token target)

View file

@ -62,10 +62,14 @@ struct ArgumentDef
struct FunctionDef struct FunctionDef
{ {
FunctionDef(): returnTypeIsVolatile(false), access(Private), isConst(false), isVirtual(false), isStatic(false), FunctionDef() :
inlineCode(false), wasCloned(false), isInvokable(false), returnTypeIsVolatile(false), access(Private), isConst(false), isVirtual(false), isStatic(false),
isScriptable(false), isSlot(false), isSignal(false), inlineCode(false), wasCloned(false), isInvokable(false),
isConstructor(false), isDestructor(false), isAbstract(false), revision(0) {} isScriptable(false), isSlot(false), isSignal(false),
isConstructor(false), isDestructor(false), isAbstract(false)
{
}
Type type; Type type;
QByteArray normalizedType; QByteArray normalizedType;
QByteArray tag; QByteArray tag;
@ -90,17 +94,13 @@ struct FunctionDef
bool isConstructor; bool isConstructor;
bool isDestructor; bool isDestructor;
bool isAbstract; bool isAbstract;
int revision;
}; };
struct PropertyDef struct PropertyDef
{ {
PropertyDef():notifyId(-1), constant(false), final(false), gspec(ValueSpec), revision(0){} PropertyDef():notifyId(-1), gspec(ValueSpec), revision(0){}
QByteArray name, type, read, write, reset, designable, scriptable, editable, stored, user, notify, inPrivateClass; QByteArray name, type, read, write, reset, scriptable, notify, inPrivateClass;
int notifyId; int notifyId;
bool constant;
bool final;
enum Specification { ValueSpec, ReferenceSpec, PointerSpec }; enum Specification { ValueSpec, ReferenceSpec, PointerSpec };
Specification gspec; Specification gspec;
bool stdCppSet() const { bool stdCppSet() const {
@ -122,7 +122,7 @@ struct ClassInfoDef
struct ClassDef { struct ClassDef {
ClassDef(): ClassDef():
hasQObject(false), hasQGadget(false), notifyableProperties(0) hasQObject(false), hasQGadget(false), notifyableProperties(0)
, revisionedMethods(0), revisionedProperties(0), begin(0), end(0){} , begin(0), end(0){}
QByteArray classname; QByteArray classname;
QByteArray qualified; QByteArray qualified;
QList<QPair<QByteArray, FunctionDef::Access> > superclassList; QList<QPair<QByteArray, FunctionDef::Access> > superclassList;
@ -147,8 +147,6 @@ struct ClassDef {
QMap<QByteArray, bool> enumDeclarations; QMap<QByteArray, bool> enumDeclarations;
QList<EnumDef> enumList; QList<EnumDef> enumList;
QMap<QByteArray, QByteArray> flagAliases; QMap<QByteArray, QByteArray> flagAliases;
int revisionedMethods;
int revisionedProperties;
int begin; int begin;
int end; int end;
@ -220,7 +218,6 @@ public:
// in FunctionDef accordingly // in FunctionDef accordingly
bool testFunctionAttribute(FunctionDef *def); bool testFunctionAttribute(FunctionDef *def);
bool testFunctionAttribute(Token tok, FunctionDef *def); bool testFunctionAttribute(Token tok, FunctionDef *def);
bool testFunctionRevision(FunctionDef *def);
void checkSuperClasses(ClassDef *def); void checkSuperClasses(ClassDef *def);
void checkProperties(ClassDef* cdef); void checkProperties(ClassDef* cdef);

View file

@ -230,7 +230,6 @@ static const Keyword keywords[] = {
{ "Q_SLOT", "Q_SLOT_TOKEN" }, { "Q_SLOT", "Q_SLOT_TOKEN" },
{ "Q_SCRIPTABLE", "Q_SCRIPTABLE_TOKEN" }, { "Q_SCRIPTABLE", "Q_SCRIPTABLE_TOKEN" },
{ "Q_PRIVATE_PROPERTY", "Q_PRIVATE_PROPERTY_TOKEN" }, { "Q_PRIVATE_PROPERTY", "Q_PRIVATE_PROPERTY_TOKEN" },
{ "Q_REVISION", "Q_REVISION_TOKEN" },
{ "\n", "NEWLINE" }, { "\n", "NEWLINE" },
{ "\"", "QUOTE" }, { "\"", "QUOTE" },
{ "\'", "SINGLEQUOTE" }, { "\'", "SINGLEQUOTE" },

View file

@ -397,15 +397,11 @@ void tst_QDBusMetaObject::types()
QVERIFY(propIdx != -1); QVERIFY(propIdx != -1);
QMetaProperty constructed = result->property(propIdx); QMetaProperty constructed = result->property(propIdx);
QCOMPARE(constructed.isDesignable(), expected.isDesignable());
QCOMPARE(constructed.isEditable(), expected.isEditable());
QCOMPARE(constructed.isEnumType(), expected.isEnumType()); QCOMPARE(constructed.isEnumType(), expected.isEnumType());
QCOMPARE(constructed.isFlagType(), expected.isFlagType()); QCOMPARE(constructed.isFlagType(), expected.isFlagType());
QCOMPARE(constructed.isReadable(), expected.isReadable()); QCOMPARE(constructed.isReadable(), expected.isReadable());
QCOMPARE(constructed.isResettable(), expected.isResettable()); QCOMPARE(constructed.isResettable(), expected.isResettable());
QCOMPARE(constructed.isScriptable(), expected.isScriptable()); QCOMPARE(constructed.isScriptable(), expected.isScriptable());
QCOMPARE(constructed.isStored(), expected.isStored());
QCOMPARE(constructed.isUser(), expected.isUser());
QCOMPARE(constructed.isWritable(), expected.isWritable()); QCOMPARE(constructed.isWritable(), expected.isWritable());
QCOMPARE(constructed.typeName(), expected.typeName()); QCOMPARE(constructed.typeName(), expected.typeName());
} }

View file

@ -90,8 +90,6 @@ class tst_QMetaObject : public QObject
Q_PROPERTY(int value6 READ value6 NOTIFY value6Changed) Q_PROPERTY(int value6 READ value6 NOTIFY value6Changed)
Q_PROPERTY(MyStruct value7 READ value7 WRITE setVal7 NOTIFY value7Changed) Q_PROPERTY(MyStruct value7 READ value7 WRITE setVal7 NOTIFY value7Changed)
Q_PROPERTY(int value8 READ value8) Q_PROPERTY(int value8 READ value8)
Q_PROPERTY(int value9 READ value9 CONSTANT)
Q_PROPERTY(int value10 READ value10 FINAL)
public: public:
enum EnumType { EnumType1 }; enum EnumType { EnumType1 };
@ -121,10 +119,6 @@ public:
int value8() const { return 1; } int value8() const { return 1; }
int value9() const { return 1; }
int value10() const { return 1; }
QList<QVariant> value4; QList<QVariant> value4;
QVariantList value5; QVariantList value5;
@ -149,8 +143,6 @@ private slots:
void customPropertyType(); void customPropertyType();
void checkScope(); void checkScope();
void propertyNotify(); void propertyNotify();
void propertyConstant();
void propertyFinal();
void stdSet(); void stdSet();
void classInfo(); void classInfo();
@ -974,32 +966,6 @@ void tst_QMetaObject::propertyNotify()
QCOMPARE(signal.signature(), (const char *)0); QCOMPARE(signal.signature(), (const char *)0);
} }
void tst_QMetaObject::propertyConstant()
{
const QMetaObject *mo = metaObject();
QMetaProperty prop = mo->property(mo->indexOfProperty("value8"));
QVERIFY(prop.isValid());
QVERIFY(!prop.isConstant());
prop = mo->property(mo->indexOfProperty("value9"));
QVERIFY(prop.isValid());
QVERIFY(prop.isConstant());
}
void tst_QMetaObject::propertyFinal()
{
const QMetaObject *mo = metaObject();
QMetaProperty prop = mo->property(mo->indexOfProperty("value10"));
QVERIFY(prop.isValid());
QVERIFY(prop.isFinal());
prop = mo->property(mo->indexOfProperty("value9"));
QVERIFY(prop.isValid());
QVERIFY(!prop.isFinal());
}
class ClassInfoTestObjectA : public QObject class ClassInfoTestObjectA : public QObject
{ {
Q_OBJECT Q_OBJECT