我有一个 QStandardItemModel,我在 qml 中使用 TableView 显示它。它使用 QVariant 来存储数据。我想根据存储数据的类型来自定义委托,例如像这样
Component {
id: myDelegate
Loader {
property var roleTwo: model.two
sourceComponent: if( CODE_FOR_MY_ITEM_HAS_BOOL_TYPE) {
checkBoxDelegate}
else { stringDelegate}
}
}
但是,我不知道如何检查模型中项目的类型。如何做到这一点?
根据要求,我提供了有关此问题的更多背景信息:
正如此处发布的 TableView 或 QStandardItemModel 的自定义模型我想要一个包含两列、一个参数名称和一个参数值的 TableView。目标是拥有控制算法行为的可编辑参数列表。为此,我使用了一个 QStandardItemModel 定义如下:
class mystandardmodel: public QStandardItemModel
{
public:
mystandardmodel();
enum Role {
role1=Qt::UserRole,
role2
};
explicit mystandardmodel(QObject * parent = 0): QStandardItemModel(parent){}
//explicit mystandardmodel( int rows, int columns, QObject * parent = 0 )
// : QStandardItemModel(rows, columns, parent){}
QHash<int, QByteArray> roleNames() const{
QHash<int, QByteArray> roles;
roles[role1] = "one";
roles[role2] = "two";
return roles;
}
};
这个模型现在显示如下:
TableView {
id: tableView2
x: 69
y: 316
width: 318
height: 150
TableViewColumn {
title: "Parameter Name"
role: "one"
}
TableViewColumn {
title: "Value"
role: "two"
delegate: myDelegate
}
model: myTestModel
}
Component {
id: myDelegate
Loader {
property var roleTwo: model.two
sourceComponent: if(typeof(roleTwo)=='boolean') {
checkBoxDelegate}
else { stringDelegate}
}
}
Component {
id: checkBoxDelegate
CheckBox{text: roleTwo}
}
Component {
id: stringDelegate
Text {text: roleTwo
}
}
所以这是你会做的方式吗?此外,我很高兴获得有关谁使模型可编辑的提示。
如果typeof()
适用于您的用例,那么您可以使用它。
我个人喜欢做的是有一个整数成员来表示特定类型。这有很多优点,这里有一些:
Component
s数组,并且在加载程序中只需使用sourceComponent: guitypes[type]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句