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();
有人知道获取 QList
.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();