当前位置:网站首页>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 .
边栏推荐
猜你喜欢
MySQL lock summary (comprehensive and concise + graphic explanation)
Write a program to simulate the traffic lights in real life.
The latest tank battle 2022 full development notes-1
更改VS主题及设置背景图片
5.MSDN的下载和使用
优先队列PriorityQueue (大根堆/小根堆/TopK问题)
About the parental delegation mechanism and the process of class loading
Rich Shenzhen people and renting Shenzhen people
Thoroughly understand LRU algorithm - explain 146 questions in detail and eliminate LRU cache in redis
6.函数的递归
随机推荐
[hand tearing code] single case mode and producer / consumer mode
Differences among fianl, finally, and finalize
.Xmind文件如何上传金山文档共享在线编辑?
重载和重写的区别
记一次猫舍由外到内的渗透撞库操作提取-flag
ArrayList的自动扩容机制实现原理
View UI plus released version 1.3.0, adding space and $imagepreview components
最新坦克大战2022-全程开发笔记-2
更改VS主题及设置背景图片
【九阳神功】2019复旦大学应用统计真题+解析
【九阳神功】2017复旦大学应用统计真题+解析
MySQL锁总结(全面简洁 + 图文详解)
[the Nine Yang Manual] 2016 Fudan University Applied Statistics real problem + analysis
甲、乙机之间采用方式 1 双向串行通信,具体要求如下: (1)甲机的 k1 按键可通过串行口控制乙机的 LEDI 点亮、LED2 灭,甲机的 k2 按键控制 乙机的 LED1
The difference between abstract classes and interfaces
Redis的两种持久化机制RDB和AOF的原理和优缺点
8.C语言——位操作符与位移操作符
最新坦克大战2022-全程开发笔记-1
[graduation season · advanced technology Er] goodbye, my student days
[modern Chinese history] Chapter 6 test