我在各个单元格中创建了一个QTable
,其中包含许多gui元素,如comboBoxes
和checkBoxes
。我可以通过创建指向它们的指针来访问这些元素。我想知道的是,有没有办法知道一个单元格的widget
(comboBox
或checkBox
)的类型?
答案 0 :(得分:13)
查看this question的答案。接受的答案从小部件的meta-object获取类名(作为const char*
),如下所示:
widget->metaObject()->className();
还有另一个答案建议使用C ++的类型管理,但这听起来要少得多(更笨拙?)。
答案 1 :(得分:6)
我建议使用qobject_cast
https://doc.qt.io/qt-5/qobject.html#qobject_cast
它的工作方式与dynamic_cast
类似,但稍微好一些,因为它可以做出一些特定于Qt的假设(不依赖于RTTI)。
你可以像这样使用它:
if(QPushButton *pb = qobject_cast<QPushButton*>(widget)) {
// it's a "QPushButton", do something with pb here
}
// etc
答案 2 :(得分:1)
您可以编写以下实用程序功能:
bool IsCheckBox(const QWidget *widget)
{
return dynamic_cast<const QCheckBox*>(widget) != 0;
}
bool IsComboBox(const QWidget *widget)
{
return dynamic_cast<const QComboBox*>(widget) != 0;
}
或许,您可以使用typeid
来确定单元格中对象的运行时类型。
编辑:
正如@Evan在评论中指出的那样,您也可以使用qobject_cast
来投射对象,而不是dynamic_cast
。请参阅示例here。
答案 3 :(得分:0)
您可以使用QObject::className()
来获取窗口小部件的类型。