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
wrapInFunction()52 void wrapInFunction()
53 {
54
55 //! [0]
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 };
65 //! [0]
66
67
68 //! [1]
69 QByteArray normType = QMetaObject::normalizedType(" int const *");
70 // normType is now "const int*"
71 //! [1]
72
73
74 //! [2]
75 QMetaObject::invokeMethod(thread, "quit",
76 Qt::QueuedConnection);
77 //! [2]
78
79
80 //! [3]
81 QMetaObject::invokeMethod: Unable to handle unregistered datatype 'MyType'
82 //! [3]
83
84
85 //! [4]
86 QString retVal;
87 QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
88 Q_RETURN_ARG(QString, retVal),
89 Q_ARG(QString, "sqrt"),
90 Q_ARG(int, 42),
91 Q_ARG(double, 9.7));
92 //! [4]
93
94
95 //! [5]
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 };
105 //! [5]
106
107
108 //! [propertyCount]
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());
113 //! [propertyCount]
114
115
116 //! [methodCount]
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());
121 //! [methodCount]
122
123 //! [6]
124 int methodIndex = pushButton->metaObject()->indexOfMethod("animateClick()");
125 QMetaMethod method = metaObject->method(methodIndex);
126 method.invoke(pushButton, Qt::QueuedConnection);
127 //! [6]
128
129 //! [7]
130 QMetaMethod::invoke: Unable to handle unregistered datatype 'MyType'
131 //! [7]
132
133 //! [8]
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,
139 Qt::DirectConnection,
140 Q_RETURN_ARG(QString, retVal),
141 Q_ARG(QString, "sqrt"),
142 Q_ARG(int, 42),
143 Q_ARG(double, 9.7));
144 //! [8]
145
146 //! [9]
147 QMetaMethod destroyedSignal = QMetaMethod::fromSignal(&QObject::destroyed);
148 //! [9]
149
150 //! [10]
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();
159 //! [10]
160
161 //! [11]
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
168 //! [11]
169 }
170