QTableView检查String是否已存在

时间:2014-08-07 09:20:05

标签: c++ qt qtableview model-view qabstracttablemodel

我有一个程序,它将Strings放入带有Model / View的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

3 个答案:

答案 0 :(得分:0)

我想你有一个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

答案 1 :(得分:0)

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

QModelIndexList indexes = model->match(QModelIndex(), Qt::DisplayRole, "text");
if (indexes.size() > 0) {
    // Add new item...
}

答案 2 :(得分: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");
 }