Qt 4.8 如何获取放置在 QList<QWidget *> 中的 QPushButton 的属性?

Qt 4.8 how to do get properties of a QPushButton placed in a QList<QWidget *>?

有人知道获取 QList 中 QPushButton 属性的解决方案吗?

.h
QList<QWidget *> list;

.cpp
QPushButton *button = new QPushButton("Push", this);
list->append(button);
qDebug() << list.at(0)->text(); // Not working : text() is not a property of QWidget but a property of QPushButton

感谢

这个问题更多地与 c++ 和一般的多态性有关,而不是 Qt 的任何特定问题。表达式...

list.at(0)

returns一个QWidget *。因此调用...

list.at(0)->text()

编译失败,因为 QWidget 没有名为 text 的成员函数。如果您认为 list.at(0) 返回的指针指向 QWidget 的特定子类,那么您需要将其向下转换并在使用前检查结果。例如

if (auto *b = dynamic_cast<QPushButton *>(list.at(0)))
    qDebug() << b->text();

或者——因为您正在使用 Qt——您可以以类似的方式使用 qobject_cast...

if (auto *b = qobject_cast<QPushButton *>(list.at(0)))
    qDebug() << b->text();