QtBase  v6.3.1
src_corelib_kernel_qmetaobject.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the documentation of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** BSD License Usage
18 ** Alternatively, you may use this file under the terms of the BSD license
19 ** as follows:
20 **
21 ** "Redistribution and use in source and binary forms, with or without
22 ** modification, are permitted provided that the following conditions are
23 ** met:
24 ** * Redistributions of source code must retain the above copyright
25 ** notice, this list of conditions and the following disclaimer.
26 ** * Redistributions in binary form must reproduce the above copyright
27 ** notice, this list of conditions and the following disclaimer in
28 ** the documentation and/or other materials provided with the
29 ** distribution.
30 ** * Neither the name of The Qt Company Ltd nor the names of its
31 ** contributors may be used to endorse or promote products derived
32 ** from this software without specific prior written permission.
33 **
34 **
35 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
38 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
45 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
46 **
47 ** $QT_END_LICENSE$
48 **
49 ****************************************************************************/
50 
51 
53 {
54 
56 class MyClass : public QObject
57 {
58  Q_OBJECT
59  Q_CLASSINFO("author", "Sabrina Schweinsteiger")
60  Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/")
61 
62 public:
63  ...
64 };
66 
67 
69 QByteArray normType = QMetaObject::normalizedType(" int const *");
70 // normType is now "const int*"
72 
73 
75 QMetaObject::invokeMethod(thread, "quit",
78 
79 
81 QMetaObject::invokeMethod: Unable to handle unregistered datatype 'MyType'
83 
84 
86 QString retVal;
88  Q_RETURN_ARG(QString, retVal),
89  Q_ARG(QString, "sqrt"),
90  Q_ARG(int, 42),
91  Q_ARG(double, 9.7));
93 
94 
96 class MyClass
97 {
98  Q_OBJECT
99  Q_CLASSINFO("author", "Sabrina Schweinsteiger")
100  Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/")
101 
102 public:
103  ...
104 };
106 
107 
109 const QMetaObject* metaObject = obj->metaObject();
110 QStringList properties;
111 for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount(); ++i)
112  properties << QString::fromLatin1(metaObject->property(i).name());
114 
115 
117 const QMetaObject* metaObject = obj->metaObject();
118 QStringList methods;
119 for(int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i)
120  methods << QString::fromLatin1(metaObject->method(i).methodSignature());
122 
124 int methodIndex = pushButton->metaObject()->indexOfMethod("animateClick()");
125 QMetaMethod method = metaObject->method(methodIndex);
128 
130 QMetaMethod::invoke: Unable to handle unregistered datatype 'MyType'
132 
134 QString retVal;
135 QByteArray normalizedSignature = QMetaObject::normalizedSignature("compute(QString, int, double)");
136 int methodIndex = obj->metaObject()->indexOfMethod(normalizedSignature);
137 QMetaMethod method = obj->metaObject()->method(methodIndex);
138 method.invoke(obj,
140  Q_RETURN_ARG(QString, retVal),
141  Q_ARG(QString, "sqrt"),
142  Q_ARG(int, 42),
143  Q_ARG(double, 9.7));
145 
149 
151  // In the class MainWindow declaration
152  #ifndef Q_MOC_RUN
153  // define the tag text as empty, so the compiler doesn't see it
154  # define MY_CUSTOM_TAG
155  #endif
156  ...
157  private slots:
158  MY_CUSTOM_TAG void testFunc();
160 
162  MainWindow win;
163  win.show();
164 
165  int functionIndex = win.metaObject()->indexOfSlot("testFunc()");
166  QMetaMethod mm = win.metaObject()->method(functionIndex);
167  qDebug() << mm.tag(); // prints MY_CUSTOM_TAG
169 }
small capitals from c petite p scientific i
[1]
Definition: afcover.h:80
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:85
The QMetaMethod class provides meta-data about a member function.
Definition: qmetaobject.h:54
static QMetaMethod fromSignal(PointerToMemberFunction signal)
Definition: qmetaobject.h:175
bool invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument val0=QGenericArgument(nullptr), QGenericArgument val1=QGenericArgument(), QGenericArgument val2=QGenericArgument(), QGenericArgument val3=QGenericArgument(), QGenericArgument val4=QGenericArgument(), QGenericArgument val5=QGenericArgument(), QGenericArgument val6=QGenericArgument(), QGenericArgument val7=QGenericArgument(), QGenericArgument val8=QGenericArgument(), QGenericArgument val9=QGenericArgument()) const
const char * tag() const
The QObject class is the base class of all Qt objects.
Definition: qobject.h:125
void destroyed(QObject *=nullptr)
The QString class provides a Unicode character string.
Definition: qstring.h:388
static QString fromLatin1(QByteArrayView ba)
Definition: qstring.cpp:5488
The QStringList class provides a list of strings.
void show()
Definition: qwidget.cpp:7825
@ QueuedConnection
Definition: qnamespace.h:1307
@ DirectConnection
Definition: qnamespace.h:1306
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
#define qDebug
[1]
Definition: qlogging.h:177
#define Q_ARG(type, data)
Definition: qobjectdefs.h:98
#define Q_RETURN_ARG(type, data)
Definition: qobjectdefs.h:99
GLuint64 GLenum void * handle
GLhandleARB obj
[2]
Definition: qopenglext.h:4164
#define Q_OBJECT
Definition: qtmetamacros.h:158
#define Q_CLASSINFO(name, value)
Definition: qtmetamacros.h:88
#define slots
Definition: qtmetamacros.h:76
QWidget * win
Definition: settings.cpp:53
#define MY_CUSTOM_TAG
QPushButton * pushButton
obj metaObject() -> className()
The QMetaObject class contains meta-information about Qt objects.
Definition: qobjectdefs.h:165
static bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType, QGenericReturnArgument ret, QGenericArgument val0=QGenericArgument(nullptr), QGenericArgument val1=QGenericArgument(), QGenericArgument val2=QGenericArgument(), QGenericArgument val3=QGenericArgument(), QGenericArgument val4=QGenericArgument(), QGenericArgument val5=QGenericArgument(), QGenericArgument val6=QGenericArgument(), QGenericArgument val7=QGenericArgument(), QGenericArgument val8=QGenericArgument(), QGenericArgument val9=QGenericArgument())
static QByteArray normalizedSignature(const char *method)
static QByteArray normalizedType(const char *type)