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を追加すると、チェックボックスが自動的に青色になります。

これは非常に奇妙に動作する methode へのリンクです: 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

テーブルビューの場合、関数を使用して指定されたテキストのモデルを検索できますQAbstractItemModel::match()。例えば:

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