QTableView проверяет, существует ли строка

У меня есть программа, которая помещает строки в 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, флажки автоматически становятся синими.

Вот ссылка на метод, который работает очень странно: Посмотреть :: PushButtonClicked

0

Решение

Для табличного представления вы можете искать его модель для данного текста с помощью QAbstractItemModel::match() функция. Например:

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

Другие решения

Я полагаю, у вас есть подкласс QAbstractItemModel (или QAbstractTableModel), из которого вы получаете данные.
Вы можете проверить поиск String в вашей модели, вызвав вашу реализацию

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
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");
}
0
По вопросам рекламы [email protected]