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

rwi*_*wik 9 c++ qt4

我创建了一个QTable包含许多gui元素的单元格comboBoxescheckBoxes各种单元格.我可以通过创建指向它们的指针来访问这些元素.我想知道的是,有什么办法可以知道一个细胞的类型widget(comboBoxcheckBox)吗?

Xav*_*olt 14

看看这个问题的答案.接受的答案const char*从小部件的元对象中获取类名(作为a ),如下所示:

widget->metaObject()->className();
Run Code Online (Sandbox Code Playgroud)

还有另一个答案表明使用C++的类型管理,但听起来要少得多(更笨拙?).


Eva*_*ran 6

我建议使用qobject_cast http://doc.qt.nokia.com/latest/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
Run Code Online (Sandbox Code Playgroud)


Naw*_*waz 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;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以用来typeid确定单元格中对象的运行时类型。

编辑:

正如 @Evan 在评论中指出的,您还可以使用qobject_cast来转换对象,而不是dynamic_cast. 请参阅此处的示例。