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