C++ 如何确定qtable单元格中小部件的类型?
我已经创建了一个C++ 如何确定qtable单元格中小部件的类型?,c++,qt4,C++,Qt4,我已经创建了一个QTable,其中包含许多gui元素,如各种单元格中的组合框和复选框。我可以通过创建指向这些元素的指针来访问它们。我想知道的是,有没有办法知道一个单元格有什么类型的小部件(组合框或复选框) 您可以编写以下实用程序函数: bool IsCheckBox(const QWidget *widget) { return dynamic_cast<const QCheckBox*>(widget) != 0; } bool IsComboBox(const QWidge
QTable
,其中包含许多gui元素,如各种单元格中的组合框
和复选框
。我可以通过创建指向这些元素的指针来访问它们。我想知道的是,有没有办法知道一个单元格有什么类型的小部件
(组合框
或复选框
) 您可以编写以下实用程序函数:
bool IsCheckBox(const QWidget *widget)
{
return dynamic_cast<const QCheckBox*>(widget) != 0;
}
bool IsComboBox(const QWidget *widget)
{
return dynamic_cast<const QComboBox*>(widget) != 0;
}
bool-IsCheckBox(const-QWidget*widget)
{
返回动态_cast(小部件)!=0;
}
bool-IsComboBox(const-QWidget*widget)
{
返回动态_cast(小部件)!=0;
}
或者,您可以使用typeid
来确定单元格中对象的运行时类型
编辑:
正如@Evan在评论中所指出的,您还可以使用来强制转换对象,而不是dynamic\u cast
。请参阅示例。查看的答案。接受的答案从小部件中获取类名(作为const char*
),如下所示:
还有另一个答案建议使用C++的类型管理,但听起来不那么灵活(更难处理?)您可以使用
QObject::className()
来获取小部件的类型。我建议使用QObject\u cast
它的工作原理类似于dynamic\u cast
,但更好一些,因为它可以做出一些特定于Qt的假设(不依赖于RTTI)
您可以这样使用它:
if(QPushButton *pb = qobject_cast<QPushButton*>(widget)) {
// it's a "QPushButton", do something with pb here
}
// etc
if(QPushButton*pb=qobject\u cast(小部件)){
//这是一个“QPushButton”,在这里用pb做点什么
}
//等
问题是,由于遍历hirarchy,它很可能会慢得多。@Xeo-什么会使它变慢?智能编译器应该能够优化函数调用,只剩下两个指针的解引用。我指的是dynamic\u cast
或typeid
方法:最好使用qobject\u cast
。它更快,不依赖于RTTI,并且可以跨库工作。
if(QPushButton *pb = qobject_cast<QPushButton*>(widget)) {
// it's a "QPushButton", do something with pb here
}
// etc