У меня есть программа, которая помещает строки в 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
Для табличного представления вы можете искать его модель для данного текста с помощью QAbstractItemModel::match()
функция. Например:
QModelIndexList indexes = model->match(QModelIndex(), Qt::DisplayRole, "text");
if (indexes.size() > 0) {
// Add new item...
}
Я полагаю, у вас есть подкласс 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
Вы можете искать в вашей модели, используя 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");
}