如何确定在qtable电池部件的类型?

问题描述 投票:8回答:4

我已创建了许多像各种细胞QTablecomboBoxes GUI元素的checkBoxes。我能够通过创建指向它们的指针来访问这些内容。我想知道的是,有没有办法知道什么类型的widget的(comboBoxcheckBox)细胞是有?

c++ qt4
4个回答
14
投票

退房的答案this question。该接受的答案从窗口小部件的const char*获取类名(作为meta-object),如下所示:

widget->metaObject()->className();

还有那建议使用C ++的类管理的另一个答案,但听起来少了很多wieldly(更笨重?)。


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

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


0
投票

您可以使用QObject::className()获得控件的类型。

© www.soinside.com 2019 - 2024. All rights reserved.