当前位置:网站首页>QT meta object qmetaobject indexofslot and other functions to obtain class methods attention
QT meta object qmetaobject indexofslot and other functions to obtain class methods attention
2022-07-06 13:43:00 【Jingchu idlers】
- indexOfSlot Return from QObject Index of slot function in derived class , If there is a specified slot function , Then return to non -1 Value , If it doesn't exist , Then return to -1.
indexOfMethod Return from QObject Index of any function of derived class , If there is a specified function , Then return to non -1 Value , If it doesn't exist , Then return to -1.
indexOfSignal Return from QObject Index of any signal of derived class , If there is a specified signal , Then return to non -1 Value , If it doesn't exist , Then return to -1.
The following for QtWidgetsApplication2.h:
#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtWidgetsApplication2.h"
#include"test.h"
class QtWidgetsApplication2 : public QWidget
{
Q_OBJECT
signals:
void setValueSignal(int);
void testSignal(int&);
public slots:
int setMyAge(int&);
int setValue(int nValue);
int setValue(int* pValue);
void setColor(const QColor& clr);
void setTest(const CTest& test);
public:
QtWidgetsApplication2(QWidget *parent = Q_NULLPTR);
private:
Ui::QtWidgetsApplication2Class ui;
};
QtWidgetsApplication2.cpp Document code omitted . The following for test.h
#pragma once
class CTest
{
public:
CTest() {};
~CTest() {};
};
The following for main:
#include "QtWidgetsApplication2.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtWidgetsApplication2 w;
auto nIndex1 = w.metaObject()->indexOfSlot("setValue(int)");
auto nIndex2 = w.metaObject()->indexOfSlot("setMyAge(int&)");
auto nIndex3 = w.metaObject()->indexOfSlot("setValue(int*)");
auto nIndex4 = w.metaObject()->indexOfSlot("setColor(QColor)");
auto nIndex5 = w.metaObject()->indexOfSlot("setTest(CTest)");
qDebug() << "nIndex1:" << nIndex1 << "nIndex2:" << nIndex2
<< "nIndex3:" << nIndex3 << "nIndex4:" << nIndex4
<< "nIndex5:" << nIndex5 << "\r\n";
auto nIndex6 = w.metaObject()->indexOfSlot("int setValue(int)");
auto nIndex7 = w.metaObject()->indexOfSlot(" setValue(int)");
auto nIndex8 = w.metaObject()->indexOfSlot("setValue(int )");
auto nIndex9 = w.metaObject()->indexOfSlot("setValue(int value)");
qDebug() << "nIndex6:" << nIndex6 << "nIndex7:" << nIndex7
<< "nIndex8:" << nIndex8 << "nIndex9:" << nIndex9 << "\r\n";
auto nIndex10 = w.metaObject()->indexOfSlot("setColor(const QColor)");
auto nIndex11 = w.metaObject()->indexOfSlot("setColor(QColor&)");
auto nIndex12 = w.metaObject()->indexOfSlot("setColor(const QColor&)");
auto nIndex13 = w.metaObject()->indexOfMethod("setValue(int)");
auto nIndex14 = w.metaObject()->indexOfMethod("dansir(int)");
qDebug() << "nIndex10:" << nIndex10 << "nIndex11:" << nIndex11
<< "nIndex12:" << nIndex12 << "nIndex13:" << nIndex13
<< "nIndex14:" << nIndex14 << "\r\n";
auto nIndex15 = w.metaObject()->indexOfSignal("setValueSignal(int)");
auto nIndex16 = w.metaObject()->indexOfSignal("setValueSignal(int )");
auto nIndex17 = w.metaObject()->indexOfSignal("testSignal(int&)");
qDebug() << "nIndex15:" << nIndex15 << "nIndex16:" << nIndex16
<< "nIndex17:" << nIndex17 << "\r\n";
w.show();
return a.exec();
}
The input results on my machine are as follows :
From the above input results , Summarized below :
- The parameters of these functions pass in the function or signal to be searched , It does not include the return value of function or signal , Otherwise it will return to -1, Such as : The first 18 Line .
- The parameters of these functions pass in the function or signal to be searched , And there must be no space between the function name and double quotation marks , Otherwise it will return to -1, Such as : The first 19 Line .
- The parameters of these functions pass in the function or signal to be searched , If there is a parameter type , Then there must be no space between the parameter type and the parentheses , Such as : The first 20 Line .
- The parameters of these functions pass in the function or signal to be searched , You can take parameter types , But no specific parameter name , Such as : The first 21 Line .
- The parameters of these functions pass in the function or signal to be searched , If the parameter is a reference and the parameter type is not int、double Basic data types such as , Then remove the reference symbol , Such as :setColor(QColor&) Returns the -1, Need to put setColor(QColor&) Change it to setColor(QColor), If the parameter has const, Will return to -1, Need to put const Get rid of , namely setColor(const QColor&) Should be changed to setColor(QColor).
Sum up : These three indexOf The parameters of the first function are :
- Function or signal name to search .
- Function or signal names cannot have return values .
- If the function or signal name has parameters , Only parameter types can be taken , No specific parameter name .
- If the function or signal name has parameters , There cannot be spaces between parameter types and braces .
- There must be no space between the function or signal name and the double quotation marks .
- Non basic data type const Or the quotation should be removed .
边栏推荐
- Detailed explanation of redis' distributed lock principle
- 5月27日杂谈
- .Xmind文件如何上传金山文档共享在线编辑?
- 3. C language uses algebraic cofactor to calculate determinant
- fianl、finally、finalize三者的区别
- [the Nine Yang Manual] 2021 Fudan University Applied Statistics real problem + analysis
- 4.分支语句和循环语句
- 优先队列PriorityQueue (大根堆/小根堆/TopK问题)
- hashCode()与equals()之间的关系
- Redis cache obsolescence strategy
猜你喜欢
Arduino+ water level sensor +led display + buzzer alarm
Thoroughly understand LRU algorithm - explain 146 questions in detail and eliminate LRU cache in redis
[during the interview] - how can I explain the mechanism of TCP to achieve reliable transmission
4. Binary search
(super detailed II) detailed visualization of onenet data, how to plot with intercepted data flow
The latest tank battle 2022 full development notes-1
仿牛客技术博客项目常见问题及解答(二)
The difference between cookies and sessions
凡人修仙学指针-1
受检异常和非受检异常的区别和理解
随机推荐
canvas基础2 - arc - 画弧线
(super detailed II) detailed visualization of onenet data, how to plot with intercepted data flow
Difference and understanding between detected and non detected anomalies
Arduino+ water level sensor +led display + buzzer alarm
1.C语言矩阵加减法
Leetcode.3 无重复字符的最长子串——超过100%的解法
Relationship between hashcode() and equals()
Change vs theme and set background picture
vector
3.猜数字游戏
[the Nine Yang Manual] 2017 Fudan University Applied Statistics real problem + analysis
4.二分查找
编写程序,模拟现实生活中的交通信号灯。
The difference between abstract classes and interfaces
Nuxtjs快速上手(Nuxt2)
5月27日杂谈
The difference between overloading and rewriting
稻 城 亚 丁
5. Download and use of MSDN
仿牛客技术博客项目常见问题及解答(二)