QT迭代所有子组件并获取该小部件的文本

QT Iterate all children and get the text of that widget

本文关键字:小部 文本 获取 迭代 组件 QT      更新时间:2023-10-16

我需要打包一个QWidget的所有子部件的内容。但由于孩子是不同的类型(QComboBox, QTextEdit, QSpinBox等),有可能编写一个泛型函数。

我发现当前的方法是迭代每个类型和PackXML,或者在迭代时识别类型并执行不同的getText函数。

,

QList<QWidget*> lstChildren = findChildren<QWidget*>();
foreach(QWidget* pWidget, lstChildren) {
     PackXML(pWidget->text());
}

这可能对你有帮助:

http://qt project.org/doc/qt - 4.8 -/- qobject.html # qobject_cast

QWidget * qobject_cast (QObject * object)返回给定的对象如果对象是T类型(或子类),则强制转换为T类型;否则返回0。如果object为0,那么它也将返回0。的类T必须(直接或间接)继承QObject并声明使用Q_OBJECT宏。一个类被认为继承了它自己。例子:

QObject *obj = new QTimer;//QTimer继承QObject

QTimer *timer = qobject_cast(obj);//timer == (QObject .*) obj

QAbstractButton *button = qobject_cast(obj);//button == 0

qobject_cast()函数的行为与标准c++ dynamic_cast(),具有它不具备的优点需要RTTI支持,并且它可以跨动态库边界工作。Qobject_cast()也可以与接口结合使用;看到插头&绘制示例以了解细节。警告:如果没有声明T使用Q_OBJECT宏,该函数的返回值是未定义的。参见QObject::inherits()。

没有通用的text属性,所以从QWidget开始使用多态性是行不通的。但是,您可以通过查询text属性的存在并使用它来获得某种方式,否则您将不得不转换为它的真实类型并调用适当的getter方法(假设有一个)。