在 Qml 中获取 QStandardItem 的类型

numberCruncher

我有一个 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()适用于您的用例,那么您可以使用它。

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

  • 您可以使用相同的底层数据类型来驱动不同的 gui 类型,例如,字符串可能是名称或信息,一个可能是可编辑的,另一个是只读的
  • 它适用于您可能拥有完全不同的模型项和完全不同的数据集的情况
  • 您可以将其用作索引,并拥有一个Components数组,并且在加载程序中只需使用sourceComponent: guitypes[type]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章