0

我有一个程序将字符串放入带有模型/视图的 TableView 中。我的模型来自 QAbstractTableModel,我的视图来自 QTableView。它在我的模型中按名称排序setData()

beginInsertRows(QModelIndex(), names.size(), names.size());
names.push_back(name);
values.push_back(value);
endInsertRows();

现在我会检查我要添加的字符串是否已经存在于我的表中,当它存在时我不会添加它。我QTableWidget可以it这样做:

QList<QTableWidgetItem *> ItemList = table->findItems(strname, Qt::MatchExactly);
if ( ItemList.count() == false )
{/*add*/}
else {/*QMessageBox */}

但是对于 QTableView 我不知道。我应该怎么办 ?

然后我的表中总是有复选框,但我从未添加它们。当我添加 1 时,它会使复选框自动变为蓝色。

这是一个指向方法的链接,它的工作方式非常奇怪:View::PushButtonClicked

4

3 回答 3

1

我想您有一个 QAbstractItemModel(或 QAbstractTableModel)的子类,您可以从中获取数据。您可以检查模型中的字符串搜索调用您的实现

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;

或者您可以在该成员返回 QVariant 的源中进行搜索;

或者你可以使用

QModelIndexList QAbstractItemModel::match ( const QModelIndex & start, int role, const QVariant & value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags( Qt::MatchStartsWith | Qt::MatchWrap ) ) const
于 2014-08-07T10:22:38.160 回答
0

您可以使用QSortFilterProxyModel在模型中搜索:

QSortFilterProxyModel proxy;
proxy.setSourceModel(myTableModel);
proxy.setFilterFixedString(searchString);

QModelIndex matchingIndex = proxy.mapToSource(proxy.index(0,0))

 if(matchingIndex.isValid())
 {
     QMessageBox::information(this, "Find", "Found");
 }
 else
 {
     QMessageBox::information(this, "Find", "Not Found");
 }
于 2014-08-07T10:34:21.747 回答
0

QAbstractItemModel::match()对于表格视图,您可以使用 using函数在其模型中搜索给定的文本。例如:

QModelIndexList indexes = model->match(QModelIndex(), Qt::DisplayRole, "text");
if (indexes.size() > 0) {
    // Add new item...
}
于 2014-08-07T10:26:07.780 回答