【发布时间】:2017-09-22 16:56:08
【问题描述】:
我正在通过 AddressBook 示例学习 Qt 中的模型视图。 https://doc.qt.io/qt-5/qtwidgets-itemviews-addressbook-example.html 我发现了一些有趣的东西。该代码构建了一个基于 QAbstractTableModel 的 TableModel 类。在覆盖 setData 函数中,它发出 dataChanged 信号。但是,在 removeRows/insertRows 中没有发出信号。那么,这些函数如何更新视图呢。
bool TableModel::removeRows(int position, int rows, const QModelIndex &index)
{
Q_UNUSED(index);
beginRemoveRows(QModelIndex(), position, position + rows - 1);
for (int row = 0; row < rows; ++row) {
listOfPairs.removeAt(position);
}
endRemoveRows();
return true;
}
bool TableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (index.isValid() && role == Qt::EditRole) {
int row = index.row();
QPair<QString, QString> p = listOfPairs.value(row);
if (index.column() == 0)
p.first = value.toString();
else if (index.column() == 1)
p.second = value.toString();
else
return false;
listOfPairs.replace(row, p);
emit(dataChanged(index, index));
return true;
}
return false;
}
【问题讨论】: