我有一个程序,它将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
答案 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");
}