在Qml中获取QStandardItem的类型

时间:2018-03-28 06:18:27

标签: qt qml

我有一个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

    }
}

这样你会这样做吗?此外,我很高兴有关谁可以编辑模型的提示。

1 个答案:

答案 0 :(得分:2)

如果android:windowSoftInputMode="stateHidden|adjustPan" 适用于您的用例,那么您可以使用它。

我个人喜欢做的是使用整数成员来表示特定类型。这有一系列优点,这里有一些:

  • 您可以使用相同的基础数据类型来驱动不同的gui类型,例如,字符串可能是名称或信息,一个可能是可编辑的,另一个是只读的
  • 适用于您可能拥有根本不同的具有根本不同数据集的模型项目的情况
  • 你可以将它用作索引,并且有一个SoftInuptKeyboard的数组,并且在加载器中只需使用typeof()