我已创建了许多像各种细胞QTable
和comboBoxes
GUI元素的checkBoxes
。我能够通过创建指向它们的指针来访问这些内容。我想知道的是,有没有办法知道什么类型的widget
的(comboBox
或checkBox
)细胞是有?
退房的答案this question。该接受的答案从窗口小部件的const char*
获取类名(作为meta-object),如下所示:
widget->metaObject()->className();
还有那建议使用C ++的类管理的另一个答案,但听起来少了很多wieldly(更笨重?)。
我会建议使用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
你可以写如下的效用函数:
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。
您可以使用QObject::className()
获得控件的类型。