我正在使用 QAbstractItemModelbeginInsertRows()
并将endInsertRows()
行插入到我的基础数据存储中。我在 begin 和 end 方法之间调用数据插入函数。但是,我的数据中的插入函数返回一个 bool 参数,表明插入可能由于数据限制而失败。如果插入失败,模型及其关联视图不应更改。如果发生这种情况,如何让模型知道不插入行或停止插入行?
问问题
2128 次
1 回答
3
我假设,您使用的是自定义模型,它继承了QAbstractItemModel
. 在这种情况下,您可以编写插入方法:
bool CustomModel::insertMyItem(const MyItemStruct &i)
{
if (alredyHave(i))
return false;
beginInsertRow();
m_ItemList.insert(i);
endInsertRow();
}
您的数据方法将是这样的:
QVariant CustomModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole || role == Qt::ToolTipRole)
switch (index.column())
{
case INDEX_ID:
return m_ItemList[index.row()].id;
case INDEX_NAME:
return m_ItemList[index.row()].name;
...
}
return QVariant();
}
最后,您的输入法将是:
void MainWindow::input()
{
MyInputDialog dialog(this);
if (dialog.exec() == QDialog::Rejected)
return;
myModel->insertMyItem(dialog.item());
}
于 2013-04-06T16:54:45.177 回答