我创建了一个QTable包含许多gui元素的单元格comboBoxes和checkBoxes各种单元格.我可以通过创建指向它们的指针来访问这些元素.我想知道的是,有什么办法可以知道一个细胞的类型widget(comboBox或checkBox)吗?
Xav*_*olt 14
看看这个问题的答案.接受的答案const char*从小部件的元对象中获取类名(作为a ),如下所示:
widget->metaObject()->className();
Run Code Online (Sandbox Code Playgroud)
还有另一个答案表明使用C++的类型管理,但听起来要少得多(更笨拙?).
我建议使用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)
您可以编写以下实用函数:
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. 请参阅此处的示例。
| 归档时间: |
|
| 查看次数: |
9134 次 |
| 最近记录: |