Checkbox QML如何使QAbstractTableModel与QML tableview可检查
我是新来的。我想使qml tableview的每一行都可检查,但它不起作用 包含数据的tableview已成功显示,但不可检查 似乎flags()和setData()函数永远不会运行,role==Qt::CheckStateRole永远不会为true 请帮忙 C++代码 我修改了如下代码,但它不起作用:Checkbox QML如何使QAbstractTableModel与QML tableview可检查,checkbox,tableview,qml,qtquick2,Checkbox,Tableview,Qml,Qtquick2,我是新来的。我想使qml tableview的每一行都可检查,但它不起作用 包含数据的tableview已成功显示,但不可检查 似乎flags()和setData()函数永远不会运行,role==Qt::CheckStateRole永远不会为true 请帮忙 C++代码 我修改了如下代码,但它不起作用: QVariant TableModel::data(const QModelIndex & index, int role) const { if (index.row
QVariant TableModel::data(const QModelIndex & index, int role) const {
if (index.row() < 0 || index.row() >= _fields->size())
return QVariant();
if(role == Qt::CheckStateRole) {
return rowsChk.contains(index.row()) ? Qt::Checked : Qt::Unchecked;
}
switch(role) {
case NameRole:
return model.name();
case DescriptionRole:
return model.description();
case TypeRole:
return model.type();
}
return QVariant();
}
bool TableModel::setData(const QModelIndex & index, const QVariant & value, int role){
rowsChecked(index.row(), value) ;
emit dataChanged(index, index);
return true;
}
未调用setData()方法,因为您可能尚未重新实现该方法:
QHash<int, QByteArray> roleNames() const;
方法未调用-存在相同的问题。但您可以通过在QML中定义TableViewColumn的委托来解决此问题:
Component {
id: checkBoxDelegate
Item {
CheckBox {
anchors.fill: parent
checked: styleData.value
}
}
}
然后将此委托分配给您的列:
TableViewColumn {
role: "name"
title: "Name"
width: 200
delegate: checkBoxDelegate
}
然后该列包含一个复选框控件,该控件的值由方法指定
QVariant FieldModel::data(const QModelIndex & index, int role) const;
对于未选中状态,只返回值0或QString(“false”),对于选中状态,返回值1或QString(“true”)。我使用“checked:styleData.value”进行了此操作,但当我单击时,复选框从未更新。我认为没有像可检查行这样的事情,可检查行只能是列。如果您需要可检查的行行为,而不需要定义带有复选框的垂直表标题,那么请定义TableView行委托,并在发出其onClicked(int row)信号时设置这些复选框。很抱歉,我不能说得更具体了——我从未实现过这样的表。请参阅我的第一篇文章。我按照你的建议修改了代码,但仍然不起作用。。。
Component {
id: checkBoxDelegate
Item {
CheckBox {
anchors.fill: parent
checked: styleData.value
}
}
}
TableViewColumn {
role: "name"
title: "Name"
width: 200
delegate: checkBoxDelegate
}
QVariant FieldModel::data(const QModelIndex & index, int role) const;