ADB*_*ADB 4 qt pyqt pyside qt-signals pyqt5
我正在查看Qt文档.有一种快速而肮脏的方法来获取窗口小部件可以发出的所有信号的列表.
例如(withPyQt):
allSignalsList = thisWidget.getSignals()
Run Code Online (Sandbox Code Playgroud)
或者,新的Qt5 API上有一个很好的位置,它显示给定QObject的所有信号吗?
诀窍是使用QObject的元对象迭代QObject的方法,然后挑选出具有信号类型的方法.
例如,此代码段将打印出QThread信号的名称:
QThread thread;
QMetaObject metaObject = thread.staticMetaObject;
for (int i = 0; i < metaObject.methodCount(); i++) {
QMetaMethod method = metaObject.method(i);
if (method.methodType() == QMetaMethod::Signal) {
qDebug() << "Signal: " << method.name();
}
}
Run Code Online (Sandbox Code Playgroud)
应该将QMetaMethods放入QList或任何其他数据结构中应该是微不足道的.
没有用于列出信号的内置方法,但正常的python对象内省将非常容易地获取信息:
from PyQt5 import QtCore, QtWidgets
def get_signals(source):
cls = source if isinstance(source, type) else type(source)
signal = type(QtCore.pyqtSignal())
for name in dir(source):
if isinstance(getattr(cls, name), signal):
print(name)
get_signals(QtWidgets.QPushButton)
Run Code Online (Sandbox Code Playgroud)
输出:
clicked
customContextMenuRequested
destroyed
objectNameChanged
pressed
released
toggled
windowIconChanged
windowIconTextChanged
windowTitleChanged
Run Code Online (Sandbox Code Playgroud)
但是,学习使用Qt文档可能会更好.如果你转到Qt类的页面,右上角有一个内容侧边栏,其中包含主要成员类型的链接.这通常包括信号部分,但如果没有,您可以深入查看继承的类,直到找到它.
因此,例如,QPushButton页面不显示信号部分,但它继承了QAbstractButton,它有一个.