我有一个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}
}
}
但是,我不知道如何检查模型中项目的类型。如何实现这一目标?
根据要求,我提供了更多关于这个问题的背景信息:
在此发布Custom Model for TableView or 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
}
}
这样你会这样做吗?此外,我很高兴有关谁可以编辑模型的提示。
答案 0 :(得分:2)
如果android:windowSoftInputMode="stateHidden|adjustPan"
适用于您的用例,那么您可以使用它。
我个人喜欢做的是使用整数成员来表示特定类型。这有一系列优点,这里有一些:
SoftInuptKeyboard
的数组,并且在加载器中只需使用typeof()