Vác*_*hár 2 c++ qt qwidget qt-signals qtcore
我需要在运行时获取来自特定QWidget的可用信号列表.
例如,QWidget是QPushButton,我想得到这个列表:
"clicked()"
"pressed()"
"released()"
"toggled()"
"destroyed()"
...
Run Code Online (Sandbox Code Playgroud)
你能给我一个提示怎么做吗?谢谢
这是获取继承树中所有信号的代码.如果您不需要所有这些,很容易根据您的需求进行调整:
#include <QStringList>
#include <QApplication>
#include <QPushButton>
#include <QMetaObject>
#include <QMetaMethod>
#include <QDebug>
int main(int argc, char **argv)
{
QApplication application(argc, argv);
QPushButton pushButton;
const QMetaObject* metaObject = pushButton.metaObject();
do {
for (int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i) {
QMetaMethod metaMethod = metaObject->method(i);
if (metaMethod.methodType() == QMetaMethod::Signal)
qDebug() << metaMethod.methodSignature();
}
} while ((metaObject = metaObject->superClass()));
return application.exec();
}
Run Code Online (Sandbox Code Playgroud)
TEMPLATE = app
TARGET = main
QT += widgets
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)
qmake && make && ./main
Run Code Online (Sandbox Code Playgroud)
"pressed()"
"released()"
"clicked(bool)"
"clicked()"
"toggled(bool)"
"windowTitleChanged(QString)"
"windowIconChanged(QIcon)"
"windowIconTextChanged(QString)"
"customContextMenuRequested(QPoint)"
"destroyed(QObject*)"
"destroyed()"
"objectNameChanged(QString)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |