如何确定qtable单元格中的小部件类型?

时间:2011-06-01 18:19:00

标签: c++ qt4

我在各个单元格中创建了一个QTable,其中包含许多gui元素,如comboBoxescheckBoxes。我可以通过创建指向它们的指针来访问这些元素。我想知道的是,有没有办法知道一个单元格的widgetcomboBoxcheckBox)的类型?

4 个答案:

答案 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()来获取窗口小部件的类型。