このページでは

QRangeModelAdapter Class

QRangeModelAdapter は、QAbstractItemModel に準拠し、任意の C++ レンジへのアクセスを提供します。詳細...

ヘッダー #include <QRangeModelAdapter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
以来:Qt 6.11
ステータス暫定版

このクラスは開発中であり、変更される可能性があります。

このクラスは等価比較可能です。

このクラスは Range と等価比較可能です。

パブリック関数

QRangeModelAdapter(Range &&range)
QRangeModelAdapter(Range &&range, Protocol &&protocol)
void assign(NewRange &&newRange)
void assign(std::initializer_list<Row> newRange)
void assign(InputIterator first, Sentinel last)
auto at(QSpan<const int> path)
auto at(int row)
auto at(int row)
auto at(int row)
decltype(auto) at(QSpan<const int> path) const
auto at(int row) const
decltype(auto) at(int row) const
auto at(QSpan<const int> path, int column)
auto at(int row, int column)
auto at(QSpan<const int> path, int column) const
auto at(int row, int column) const
int columnCount() const
QVariant data(int row) const
QVariant data(QSpan<const int> path, int column) const
QVariant data(int row, int role) const
QVariant data(int row, int column) const
QVariant data(QSpan<const int> path, int column, int role) const
QVariant data(int row, int column, int role) const
bool hasChildren(QSpan<const int> row) const
bool hasChildren(int row) const
QModelIndex index(int row) const
QModelIndex index(QSpan<const int> path, int column) const
QModelIndex index(int row, int column) const
bool insertColumn(int before)
bool insertColumn(int before, D &&data)
bool insertColumns(int before, C &&data)
bool insertRow(QSpan<const int> before)
bool insertRow(int before)
bool insertRow(QSpan<const int> before, D &&data)
bool insertRow(int before, D &&data)
bool insertRows(QSpan<const int> before, C &&data)
bool insertRows(int before, C &&data)
Model *model() const
bool moveColumn(int from, int to)
bool moveColumns(int from, int count, int to)
bool moveRow(QSpan<const int> source, QSpan<const int> destination)
bool moveRow(int source, int destination)
bool moveRows(QSpan<const int> source, int count, QSpan<const int> destination)
bool moveRows(int source, int count, int destination)
const QRangeModelAdapter<Range, Protocol, Model>::range_type &range() const
bool removeColumn(int column)
bool removeColumns(int column, int count)
bool removeRow(QSpan<const int> path)
bool removeRow(int row)
bool removeRows(QSpan<const int> path, int count)
bool removeRows(int row, int count)
int rowCount() const
int rowCount(QSpan<const int> row) const
int rowCount(int row) const
bool setData(int row, const QVariant &value, int role = Qt::EditRole)
bool setData(QSpan<const int> path, int column, const QVariant &value, int role = Qt::EditRole)
bool setData(int row, int column, const QVariant &value, int role = Qt::EditRole)
QRangeModelAdapter<Range, Protocol, Model> &operator=(NewRange &&newRange)
QRangeModelAdapter<Range, Protocol, Model> &operator=(std::initializer_list<Row> newRange)
auto operator[](QSpan<const int> path)
auto operator[](int row)
auto operator[](int row)
auto operator[](int row)
decltype(auto) operator[](QSpan<const int> path) const
auto operator[](int row) const
decltype(auto) operator[](int row) const

プライベート型

bool operator!=(const QRangeModelAdapter<Range, Protocol, Model> &lhs, const QRangeModelAdapter<Range, Protocol, Model> &rhs)
bool operator==(const QRangeModelAdapter<Range, Protocol, Model> &lhs, const QRangeModelAdapter<Range, Protocol, Model> &rhs)

詳細説明

QRangeModelAdapter は、C++ の範囲とQRangeModel を対象とした、型安全で構造を意識した C++ API を提供します。アダプタを使用して C++ の範囲に加えられた変更は、QRangeModel のクライアントに通知されます。これにより、アイテム・ビューが更新され、キャッシュが削除され、永続アイテム・インデックスが無効化され、正しく適応されるようになります。

構築とモデルの所有権

QRangeModelAdapter は、C++ の範囲から構築する必要があります。QRangeModel と同様に、範囲は lvalue または rvalue 参照、参照ラッパー、未加工ポインタまたはスマート・ポインタとして提供できます。

std::vector<int> data = {1, 2, 3, 4, 5};
QRangeModelAdapter adapter(&data);

構築される正確な型は、コンストラクタの引数に基づいてコンパイラが決定します。したがって、テンプレート・パラメータを明示的に指定すべきではありません。ただし、C++ では、非静的クラス・データ・メンバに対するクラス・テンプレート引数の推論を許可していません。QRangeModelAdapter をクラスのデータ・メンバにするには、以下のパターンを使用します:

class Backend
{
    using Adapter = decltype(QRangeModelAdapter(std::vector<Book>{}));
    Adapter adapter = Adapter(std::vector<Book>{});

これは、Books の無名(つまり r 値参照)ベクトルで動作する QRangeModelAdapter を作成します。アダプタを Books のリストへの参照ラッパーで動作させるには、 代わりにこれを使用します:

    QList<Book> books = { /* ... */ };
    using Adapter = decltype(QRangeModelAdapter(std::ref(books)));
    Adapter adapter = Adapter(std::ref(books));
};

範囲からアダプタを作成すると、暗黙的に同じ範囲からQRangeModel インスタンスを作成します。それを取得するにはmodel() を使用し、Qt WidgetsQt Quick のアイテムビューに渡します。

QListView listView;
listView.setModel(adapter.model());

アダプタはモデルを所有します。QRangeModelAdapter は値型なので、コピーや移動が可能です。すべてのコピーは同じQRangeModel を共有します。この は、アダプタの最後のコピーが破棄されたときに破棄されます。

アダプタが lvalue または rvalue の参照から作成された場合、アダプタとモデルは元のレンジオブ ジェクトのコピーを操作します。そうでない場合は、アダプタやモデルによる変更は元の範囲オブジェクトに書き込まれます。更新された範囲にアクセスするには、range() を使用します:

QList<Book> books = {
    // ...
};
QRangeModelAdapter adapter(books);
tableView.setModel(adapter.model());

// show UI and where the user can modify the list

QList<Book> modifiedBooks = adapter.range();

範囲データ全体を別の(互換性のある)範囲のデータに置き換えるには、assign() 関数または代入演算子を使用します。

// reset to the original
adapter = books;
// or
adapter.assign(books);

項目データへのアクセス

QRangeModelAdapter API は、モデルが操作する範囲への型安全な読み取り/書き込みアクセスを提供します。このアダプタ API は、イテレータを含む C++ のコンテナや範囲の典型的な API に基づいています。個々の行や項目にアクセスするには、at() や対応する添え字operator[] 、あるいはdata() を使用します。これらの関数のどのオーバーロードが使用可能かは、アダプタが構築された範囲によって異なります。

QVariant としての項目データの読み取り

data() 関数は、常に、指定された位置とロールに値が格納されたQVariant を返します。リストでは、行を指定する 1 つの整数値で項目にアクセスできます:

QVariant listItem = listAdapter.data(row);

範囲がテーブルの場合、項目は行と列で指定されます:

QVariant tableItem = tableAdapter.data(row, column);

範囲がツリーの場合、項目は行のパスと単一の列値で指定されます:

QVariant treeItem = treeAdapter.data({path, to, branch}, column);

行として単一の整数を使用すると、トップレベル・ツリーの項目にアクセスできます。

QRangeModelAdapter listOfBooks(QList<Book>{
    // ~~~
});
QString bookTitle = listOfBooks.data(0, Book::TitleRole).toString();
Book multiRoleItem = listOfBooks.data(0).value<Book>();

ロールが指定されていない場合、QVariant はその位置の項目全体を保持します。項目のコピーを取得するには、QVariant::fromValue() テンプレート関数を使用します。

at() を使用した読み取りと書き込み

data() 関数はQVariant を返すので、柔軟性がありますが、型の安全性はなくなります。すべての項目が同じ型である範囲の場合、at ()関数を使用すると、通常の C++ コンテナと互換性のある、型安全な代替手段が提供されます。data ()と同様に、at ()のオーバーロードは、リストの場合は行、テーブルの場合は行/列のペア、ツリーの場合はパス/列のペアで項目にアクセスするために存在する。しかし、at ()は常に、指定された位置の項目全体を返します。項目の個々のロール値を読み取ることはできません。

C++ コンテナ API から予想されるように、at() の const オーバーロード(および対応する添え字operator[] )は値への不変アクセスを提供し、mutable オーバーロードは新しい値を代入できる参照オブジェクトを返します。この点で、const 範囲で動作する QRangeModelAdapter は、const QRangeModelAdapter と同じように動作することに注意してください。変更可能なオーバーロードはオーバーロード・セットから削除されるので、コンパイラは常に const バージョンを選択します。範囲を変更する関数を呼び出そうとすると、たとえアダプタ自体がミュータブルであってもコンパイラエラーになります:

const QStringList strings = {"On", "Off"};
QRangeModelAdapter adapter(strings);
adapter.at(0) = "Undecided"; // compile error: return value of 'at' is const
adapter.insertRow(0); // compiler error: requirements not satisfied

返される参照オブジェクトは、暗黙のうちに基礎となる型に変換され、基礎となる値 に明示的にアクセスするためのget() 関数と、const メンバ関数への直接アクセスを提供するoperator->() を持つラッパーです。しかし、QAbstractItemModel 通知プロトコルを迂回するような偶発的なデータ変更を防ぐため、これらの参照オブジェクトは項目の直接変更を防ぐ。

注: 参照オブジェクトへのアクセスは、常に値のコピーを取得するためにモデルを呼び出します。これは高価になる可能性があります。データへのパフォーマンス・クリティカルなアクセスには、コピーを保存してください。

項目アクセス

範囲がリストとして表現される場合、行を取るオーバーロードのみが利用可能です。

QRangeModelAdapter list(std::vector<int>{1, 2, 3, 4, 5});
listView.setModel(list.model());

int firstValue = list.at(0); // == 1
list.at(0) = -1;
list.at(1) = list.at(4);

constオーバーロードはその行のアイテムを返し、mutableオーバーロードはリストの値型に暗黙的に変換するラッパーを返します。

QRangeModelAdapter books(QList<Book>{
    // ~~~
});
Book firstBook = books.at(0);
Book newBook = {};
books.at(0) = newBook; // dataChanged() emitted

リストのデータを変更するために、ラッパーに値を代入します。モデルは全てのロールに対してdataChanged() を発行します。

mutable オーバーロードを使用する場合、オーバーロードされた矢印演算子を使用して、項目型の const メンバにアクセスすることもできます。

QString title = books.at(0)->title();

アイテムの const 以外のメンバにアクセスすることはできません。このような変更はアダプタをバイパスし、モデルに対して変更を通知することができません。モデルに格納された値を変更するには、コピーを作成し、コピーのプロパティを変更し、そのコピーを書き戻します。

// books.at(0)->setRating(5); - not possible even though 'books' is not const
firstBook = books.at(0);
firstBook.setRating(5);
books.at(0) = firstBook; // dataChanged() emitted

これにより、モデルはこの項目とすべてのロールに対してdataChanged() を発行します。

範囲がテーブルとして表現されている場合、at(row, column)オーバーロードを使用すると、行と列によって個々の項目にアクセスできます。ツリーの場合、このオーバーロードはトップレベルの項目へのアクセスを提供し、at(path, column)オーバーロードはツリー内に入れ子になった項目へのアクセスを提供します。

テーブルやツリー内の個々のアイテムへのアクセスは、リスト内のアイテムへのアクセスと同じです。

QRangeModelAdapter table(std::vector<std::vector<double>>{
    {1.0, 2.0, 3.0, 4.0, 5.0},
    {6.0, 7.0, 8.0, 9.0, 10.0},
});
tableView.setModel(table.model());

double value = table.at(0, 2); // value == 3.0
table.at(0, 2) = value * 2; // table[0, 2] == 6.0

範囲が同じデータ型を使ってすべてのカラムを格納していない場合、at(row,column) は、アイテムを保持する(を持つ参照ラッパー)QVariant を返します。

QRangeModelAdapter table(std::vector<std::tuple<int, QString>>{
    // ~~~
});
int number = table.at(0, 0)->toInt();
QString text = table.at(0, 1)->toString();

テーブルとツリーの行へのアクセス

テーブルとツリーでは、at() のオーバーロードと、column パラメータなしの添え字operator[] は、行全体へのアクセスを提供します。constオーバーロードによって返される値は、行データにアクセスできる参照型になります。行がポインタを保持している場合、その参照型は行のビューとなり、const項目へのポインタにアクセスできるようになります。

テーブル行へのアクセス

at(int)オーバーロードはまだ使用可能ですが、これはテーブル全体のワードを返します。これにより、行のすべての値を一度に扱うことができます。

const auto &constTable = table;
const std::vector<double> &topRow = constTable.at(0);

アイテムの場合と同様に、constオーバーロードは行型への直接アクセスを提供しますが、 mutableオーバーロードは行への参照として動作するラッパーを返します。ラッパーは、オーバーロードされた矢印演算子を使用して、constメンバ関数へのアクセスを提供します。値を変更するには、変更された行型を書き戻します。

auto lastRow = table.at(table.rowCount() - 1);
lastRow = { 6.5, 7.5, 8.0, 9.0, 10 }; // emits dataChanged() for entire row

新しい値を行に代入する場合、モデルは行の全ての項目と全てのロールに対してdataChanged() シグナルを発行します。

注意: std::vectorQList のように、実行時のサイズを持つ行型を使用する場合、新しい行のサイズが正しいことを確認してください。

ツリー行へのアクセス

ツリー内の行は、ツリー内の各レベルに対して1つのエントリを持つ、整数のシーケンスで指定されます。以下のスニペットでは、ツリーは生の行ポインタを保持する範囲であり、アダプタはその範囲の rvalue 参照で作成されることに注意してください。これにより、QRangeModel が行データの所有権を持つことになります。

QRangeModelAdapter tree = QRangeModelAdapter(Tree{
    new TreeRow{"Germany", 357002, Tree{
            new TreeRow("Bavaria", 70550)
        },
    },
    new TreeRow{"France", 632702},
});
treeView.setModel(tree.model());

auto germanyData = tree.at(0);
auto bavariaData = tree.at({0, 0});

at() のオーバーロードは、単一の行値を取り、トップレベルの行、またはトップレベルの行の項目へのアクセスを提供します。

auto germanyName = tree.at(0, 0);
auto bavariaSize = tree.at({0, 0}, 1);

ツリー内の行や項目へのアクセスの基本パターンは、 テーブル内の行や項目へのアクセスと同じです。しかし、アダプタは行全体を変更する際にもツリー構造が維持されるようにします。

// deletes the old row - tree was moved in
tree.at({0, 0}) = new TreeRow{"Berlin", 892};

この例では、新しい行オブジェクトを作成し、最初のトップレベル項目の最初の子に代入します。

イテレータ API

モデルの行に対するイテレータを取得するには begin() と end() を使用します。範囲がアイテムのリストである場合、イテレータを再参照することで、アイテムのデータにアクセスすることができます。

for(const auto &book: std::as_const(books)) { { {(const auto &book: std::as_const(books))    qDebug() << "The book" << book.title()
            << "written by"<<book.author()<< "has"<<book.rating()<< "stars"; }

at()のconstおよびmutableオーバーロードと同様に、mutableイテレータはラッパーを非参照とする。

for(autobook : books) { {{ (autobook : books)    qDebug() << "The book" << book->title()
            << "written by"<<  book->author()<< "has"<<  book->rating()<< "stars"; Book copy=book; copy.setRating(copy.rating()+ 1); book=copy; }

オーバーロードされた矢印演算子を使って、アイテム・タイプのconstメンバにアクセスし、ラッパーに代入して値を置き換えます。

範囲がテーブルまたはツリーの場合、モデルを反復処理することで行にアクセスできます。

QRangeModelAdaptertable(std::vector<std::pair<intQString>>{ // ~~~});for(const auto &row: std::as_const(table)) {以下のようになりますqDebug() << "Number is" << row->first << "and string is" << row->second;
}

constイテレータもmutableイテレータも、行のラッパータイプを参照します。これにより、行の基礎となる型が範囲でなくても(例えば、タプルやガジェットであっても)、各列を一貫して繰り返し処理できるようになります。

for(const auto &row: std::as_const(table)) {for(const auto &item: row) {for(const auto &item: row)        qDebug() << item; // item is a QVariant
    } }

変更可能なテーブルを反復処理する場合、行全体を上書きすることができる。

for(自動行 : テーブル) { { 行全体を上書きすることができます。    qDebug() << "Number is" << row->first << "and string is" << row->second;
    row=std::make_pair(42,u"forty-two"_s); }

モデルは、すべての行のすべての項目とすべてのロールに対してdataChanged() シグナルを発行します。

for (auto row : table) {
    for (auto item : row) {
        item = 42;
    }
}

変更可能な行を繰り返し処理することで、個々の項目を変更することができます。

ツリー上で反復処理を行う場合、行ラッパーには、hasChildren() と children() という2つの追加メンバ関数があり、イテレータを使用してツリー全体を走査することができます。

for (auto row : tree) {
    if (row.hasChildren()) {
        for (auto child : row.children()) {
            // ~~~
        }
    }
}

children() が返すオブジェクトは、コール元と同じモデルで動作する QRangeModelAdapter ですが、すべての操作はソース行のインデックスを親インデックスとして使用します。

QRangeModelも参照ください

メンバ型のドキュメント

[alias] QRangeModelAdapter::range_type

メンバー関数ドキュメント

[default] QRangeModelAdapter::QRangeModelAdapter(Range &&range, Protocol &&protocol)

[default] QRangeModelAdapter::QRangeModelAdapter(Range &&range)

range を操作するQRangeModelAdapter を構築する。ツリー範囲の場合、オプションのprotocol がツリーの走査に使用されます。

Range の要件や、range の値カテゴリによってアダプタ、モデル、範囲の相互作用がどのように変わるかについての詳細は、QRangeModel コンストラクタのドキュメントを参照してください。

QRangeModelも参照してください

template <typename NewRange = QRangeModelAdapter<Range, Protocol, Model>::range_type, QRangeModelAdapter<Range, Protocol, Model>::if_assignable_range<NewRange> = true> void QRangeModelAdapter::assign(NewRange &&newRange)

template < typename NewRange = QRangeModelAdapter<Range, Protocol, Model>::range_type, QRangeModelAdapter<Range, Protocol, Model>::if_assignable_range<NewRange> = true, QRangeModelAdapter<Range, Protocol, Model>::unless_adapter<NewRange> = true > QRangeModelAdapter<Range, Protocol, Model> &QRangeModelAdapter::operator=(NewRange &&newRange)

モデルの内容をnewRange の行に置き換える。

この関数はmodel() にmodelAboutToBeReset() とmodelReset() シグナルを発行させる。

制約

Range が変更可能で、newRangeRange に代入可能な型であり、QRangeModelAdapter には代入できない場合にのみ、オーバーロード解決に参加する。

range()、at()、model()、assign()も参照のこと

template <typename Row, QRangeModelAdapter<Range, Protocol, Model>::if_assignable_range<std::initializer_list<Row>> = true> void QRangeModelAdapter::assign(std::initializer_list<Row> newRange)

template <typename Row, QRangeModelAdapter<Range, Protocol, Model>::if_assignable_range<std::initializer_list<Row>> = true> QRangeModelAdapter<Range, Protocol, Model> &QRangeModelAdapter::operator=(std::initializer_list<Row> newRange)

モデルの内容をnewRange の行で置き換える。

制約

オーバーロードの解決に参加するのは、Range が変更可能で、newRangeRange に代入できる場合のみです。

range()、at 、およびmodel()も参照してください

template < typename InputIterator, typename Sentinel, typename I, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > void QRangeModelAdapter::assign(InputIterator first, Sentinel last)

モデルの内容を [first,last] の範囲の行で置き換えます。

range()、at 、およびmodel()も参照して ください。

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::at(QSpan<const int> path)

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::operator[](QSpan<const int> path)

path で指定されたツリー行への参照を保持する、変更可能なラッパーを返します。

ツリー行を変更するには、新しい値を代入します。新しいツリー行を代入すると、新しいツリー行の親が古いツリー行の親に設定されます。ただし、古いツリー行も新しいツリー行も、子行を持ってはいけません。ツリー行にアクセスするには、operator*() を使用してラッパーを再参照するか、operator->() を使用してツリー行のメンバにアクセスします。

注意: 範囲を変更すると、ラッパーは無効になります。

制約

Range がツリーの場合のみ、オーバーロード解決に参加します。

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::at(int row)

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::operator[](int row)

Range に格納された型へのミュータブルな参照にラップされたrow の値を返します。

注意: 範囲を変更すると、その参照は無効になる。参照を変更するには、その参照に新しい値を代入する。Range に格納されている値がポインタでない限り、格納されている値の個々のメンバにアクセスすることはできない。

制約

Range がミュータブル・リストである場合にのみ、オーバーロード解決に参加する。

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_table<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::at(int row)

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_table<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::operator[](int row)

Range に格納されている、row にある行への変更可能な参照を返す。

制約

Range がツリーではなく、ミュータブルテーブルである場合にのみ、オーバーロード解決に参加します。

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::at(int row)

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::operator[](int row)

row で指定されたツリー行への参照を保持する、変更可能なラッパーを返します。

ツリー行を変更するには、新しい値を代入します。新しいツリー行を代入すると、新しいツリー行の親が古いツリー行の親に設定されます。ただし、古いツリー行も新しいツリー行も、子行を持ってはいけません。ツリー行にアクセスするには、operator*() を使用してラッパーを再参照するか、operator->() を使用してツリー行のメンバにアクセスします。

注意: 範囲を変更すると、ラッパーは無効になります。

制約

Range がツリーの場合のみ、オーバーロード解決に参加します。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> decltype(auto) QRangeModelAdapter::at(QSpan<const int> path) const

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> decltype(auto) QRangeModelAdapter::operator[](QSpan<const int> path) const

Range に格納されている、path で指定された行への定数参照を返す。

制約

Range がツリーの場合のみ、オーバーロード解決に参加する。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true> auto QRangeModelAdapter::at(int row) const

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true> auto QRangeModelAdapter::operator[](int row) const

Range に格納されている型としてrow の値を返す。

制約

Range がリストの場合のみ、オーバーロード解決に参加する。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true> decltype(auto) QRangeModelAdapter::at(int row) const

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true> decltype(auto) QRangeModelAdapter::operator[](int row) const

Range に格納されている、row の行への定数参照を返す。

制約

Range がテーブルまたはツリーの場合のみ、オーバーロード解決に参加します。

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::at(QSpan<const int> path, int column)

pathcolumn で指定された項目として格納されている値への変更可能な参照を返す。 項目がマルチロール項目の場合、これは項目全体への参照となる。Range の行が異なる列に異なる型を格納する場合、戻り値の型はQVariant になります。

注: 範囲を変更すると、その参照は無効になる。参照を変更するには、その参照に新しい値を代入する。Range に格納されている値がポインタでない限り、格納されている値の個々のメンバにアクセスすることはできない。

制約

Range がミュータブル・ツリーの場合のみ、オーバーロード解決に参加する。

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > auto QRangeModelAdapter::at(int row, int column)

rowcolumn で指定されたアイテムとして格納されている値への変更可能な参照を返します。 アイテムがマルチロールアイテムの場合、これはアイテム全体への参照になります。

注意: 範囲を変更すると、その参照は無効になります。参照を修正するには、その参照に新しい値を代入する。Range に格納されている値がポインタでない限り、格納されている値の個々のメンバにアクセスすることはできない。

制約

Range がミュータブル・テーブルである場合にのみ、オーバーロード解決に参加する。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> auto QRangeModelAdapter::at(QSpan<const int> path, int column) const

pathcolumn で指定された項目として格納されている値のコピーを返す。 項目がマルチロール項目の場合、項目全体のコピーを返す。Range の行が異なる列に異なる型を格納する場合、戻り値の型はQVariant になります。

制約

Range がツリーの場合のみ、オーバーロード解決に参加する。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true> auto QRangeModelAdapter::at(int row, int column) const

rowcolumn で指定された項目として格納されている値のコピーを返す。 項目がマルチロール項目の場合、項目全体のコピーを返す。Range の行が異なる列に異なる型を格納する場合、戻り値の型はQVariant になります。

制約

Range がテーブルまたはツリーの場合のみ、オーバーロード解決に参加します。

int QRangeModelAdapter::columnCount() const

列の数を返す。Range がリストを表している場合は 1 となり、そうでない場合は各行の要素数を返します。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true> QVariant QRangeModelAdapter::data(int row) const

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true> QVariant QRangeModelAdapter::data(int row, int role) const

row にあるアイテムについて、与えられたrole の下に格納されているデータを保持するQVariant を返すか、アイテムがない場合は無効なQVariant を返す。role が指定されていない場合は、完全な項目を保持するQVariant を返します。

制約

Range がリストの場合のみ、オーバーロードの解決に参加する。

setData() およびat()も参照

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> QVariant QRangeModelAdapter::data(QSpan<const int> path, int column) const

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> QVariant QRangeModelAdapter::data(QSpan<const int> path, int column, int role) const

pathcolumn によって参照されるアイテムについて、与えられたrole の下に格納されているデータを保持するQVariant を返すか、そのポジションまたはロールに格納されているデータがない場合は無効なQVariant を返す。role が指定されていない場合は、完全な項目を保持するQVariant を返します。

制約

Range がツリーの場合のみ、オーバーロード解決に参加する。

setData() およびat()も参照してください

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true> QVariant QRangeModelAdapter::data(int row, int column) const

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true> QVariant QRangeModelAdapter::data(int row, int column, int role) const

rowcolumn によって参照されたアイテムについて、与えられたrole の下に格納されたデータを保持するQVariant を返すか、そのポジションまたはロールに格納されたデータがない場合は無効なQVariant を返す。role が指定されていない場合は、完全な項目を保持するQVariant を返します。

制約

Range がテーブルまたはツリーの場合のみ、オーバーロード解決に参加します。

setData() およびat()も参照して ください。

[constexpr] template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> bool QRangeModelAdapter::hasChildren(int row) const

[constexpr] template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> bool QRangeModelAdapter::hasChildren(QSpan<const int> row) const

row 以下の行があるかどうかを返す。

制約

Range がツリーの場合のみ、オーバーロードの解決に参加します。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true> QModelIndex QRangeModelAdapter::index(int row) const

rowQModelIndex を返す。

制約

Range が一次元リストの場合のみ、オーバーロード解決に参加する。

これはオーバーロードされた関数です。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> QModelIndex QRangeModelAdapter::index(QSpan<const int> path, int column) const

path で指定されたツリーの行の、column にある項目のQModelIndex を返します。

制約

Range がツリーの場合のみ、オーバーロード解決に参加します。

これはオーバーロードされた関数です。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true> QModelIndex QRangeModelAdapter::index(int row, int column) const

row,column にあるアイテムのQModelIndex を返す。

制約

Range がテーブルまたはツリーの場合のみ、オーバーロード解決に参加します。

これはオーバーロードされた関数です。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertColumns<I> = true> bool QRangeModelAdapter::insertColumn(int before)

全ての行にbefore で指定された列の前に空の列を1つ挿入し、挿入が成功したかどうかを返す。beforecolumnCount() と同じ値の場合、その列は各行に追加されます。

制約

Range に要素の挿入をサポートする行がある場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

removeColumn()、insertColumns()、insertRow()も参照

template < typename D, typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertColumns<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_compatible_column_data<D> = true > bool QRangeModelAdapter::insertColumn(int before, D &&data)

before で指定されたカラムの前に、data から構築された単一のカラムをすべての行に挿入し、挿入が成功したかどうかを返す。beforecolumnCount() と同じ値の場合、その列が各行に追加されます。

data が単一の値の場合、すべての行の新しい項目はその単一の値から構築される。

data がコンテナである場合、そのコンテナ内の要素は、後続の各行の列を構築するために順次使用される。data に含まれる要素の数が行の数より少ない場合、関数は折り返し、最初の要素からやり直す。

制約

Range に要素の挿入をサポートする行があり、data のエントリから要素を構築できる場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

removeColumn()、insertColumns()、insertRow()も参照のこと

template < typename C, typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertColumns<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_compatible_column_range<C> = true > bool QRangeModelAdapter::insertColumns(int before, C &&data)

before で指定された列の前に、data の要素から構築された列をすべての行に挿入し、挿入が成功したかどうかを返す。beforecolumnCount() と同じ値の場合、その列が各行に追加される。

data の要素が値である場合、すべての行の新しい項目はそれらの値から構築される。

data の要素がコンテナである場合、外側のコンテナのエントリは、それに続く各行の新しいエントリを構築するために順次使用される。data の要素の数が行の数より少ない場合、関数は折り返し、最初の要素からやり直す。

制約

Range に要素の挿入をサポートする行があり、data のエントリから要素を構築できる場合にのみ、オーバーロード解決に参加する。

removeColumns()、insertColumn()、insertRows()も参照のこと

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertRows<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true > bool QRangeModelAdapter::insertRow(QSpan<const int> before)

before で指定されたパスの行の前に空の行を1行挿入し、挿入が成功したかどうかを返す。beforerowCount() と同じ値の場合、新しい行が追加されます。

制約

Range が要素の挿入をサポートするツリーである場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

insertRows()、removeRow()、insertColumn()も参照

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertRows<I> = true> bool QRangeModelAdapter::insertRow(int before)

before の行の前に空の行を1行挿入し、挿入が成功したかどうかを返す。beforerowCount() と同じ値の場合、新しい行が追加されます。

制約

Range が要素の挿入をサポートしている場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

insertRows()、removeRow()、insertColumn()も参照

template < typename D, typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertRows<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_compatible_row<D> = true, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true > bool QRangeModelAdapter::insertRow(QSpan<const int> before, D &&data)

before の行の前にdata から構築された1行を挿入し、挿入が成功したかどうかを返す。beforerowCount() と同じ値の場合、新しい行が追加されます。

制約

Range が要素の挿入をサポートするツリーであり、data から行を構築できる場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

insertRows()、removeRow()、insertColumn()も参照のこと

template < typename D, typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertRows<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_compatible_row<D> = true > bool QRangeModelAdapter::insertRow(int before, D &&data)

before の行の前にdata から構築された1行を挿入し、挿入が成功したかどうかを返す。beforerowCount() と同じ値の場合、新しい行が追加されます。

制約

Range が要素の挿入をサポートし、data から行を構築できる場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

insertRows()、removeRow()、insertColumn()も参照

template < typename C, typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertRows<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_compatible_row_range<C> = true, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true > bool QRangeModelAdapter::insertRows(QSpan<const int> before, C &&data)

before の行の前にdata の要素から構築された行を挿入し、挿入が成功したかどうかを返す。beforerowCount() と同じ値の場合、新しい行が追加される。

制約

Range が要素の挿入をサポートするツリーであり、data の要素から行を構築できる場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

insertRow()、removeRows()、insertColumns()も参照のこと

template < typename C, typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canInsertRows<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_compatible_row_range<C> = true > bool QRangeModelAdapter::insertRows(int before, C &&data)

before の行の前にdata の要素から構築された行を挿入し、挿入が成功したかどうかを返す。beforerowCount() と同じ値の場合、新しい行が追加される。

制約

Range が要素の挿入をサポートし、data の要素から行を構築できる場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

insertRow()、removeRows()、insertColumns()も参照のこと

Model *QRangeModelAdapter::model() const

このアダプタが作成したQRangeModel インスタンスを返します。

range() およびat()も参照ください

template <typename F, QRangeModelAdapter<Range, Protocol, Model>::if_canMoveItems<F> = true> bool QRangeModelAdapter::moveColumn(int from, int to)

from のカラムをto のカラムに移動し、カラムの移動が成功したかどうかを返します。

制約

Range に要素の移動をサポートする行がある場合にのみ、オーバーロードの解決に参加する。

insertColumn()、removeColumn()、moveColumns()、moveRow()も参照

template <typename F, QRangeModelAdapter<Range, Protocol, Model>::if_canMoveItems<F> = true> bool QRangeModelAdapter::moveColumns(int from, int count, int to)

from から始まるcount 列をto の位置に移動し、列の移動が成功したかどうかを返す。

制約

Range に要素の移動をサポートする行がある場合にのみ、オーバーロードの解決に参加する。

insertColumns()、removeColumns()、moveColumn() およびmoveRows()も参照

template < typename I, typename F, QRangeModelAdapter<Range, Protocol, Model>::if_canMoveItems<F> = true, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true > bool QRangeModelAdapter::moveRow(QSpan<const int> source, QSpan<const int> destination)

source にある木の枝をdestination の位置に移動し、枝の移動に成功したかどうかを返します。

制約

Range が要素の移動をサポートするツリーである場合にのみ、オーバーロード解決に参加します。

これはオーバーロードされた関数です。

insertRow()、removeRow()、moveColumn()も参照

template <typename F, QRangeModelAdapter<Range, Protocol, Model>::if_canMoveItems<F> = true> bool QRangeModelAdapter::moveRow(int source, int destination)

source の行をdestination の位置に移動し、行の移動が成功したかどうかを返す。

制約

Range が要素の移動をサポートしている場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数です。

insertRow()、removeRow()、moveColumn()も参照

template < typename I, typename F, QRangeModelAdapter<Range, Protocol, Model>::if_canMoveItems<F> = true, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true > bool QRangeModelAdapter::moveRows(QSpan<const int> source, int count, QSpan<const int> destination)

source から始まるcount 木の枝をdestination の位置に移動し、行の移動が成功したかどうかを返す。

制約

Range が要素の移動をサポートするツリーである場合にのみ、オーバーロード解決に参加します。

これはオーバーロードされた関数です。

insertRows()、removeRows()、moveColumns()も参照

template <typename F, QRangeModelAdapter<Range, Protocol, Model>::if_canMoveItems<F> = true> bool QRangeModelAdapter::moveRows(int source, int count, int destination)

source から始まるcount 行をdestination の位置に移動し、行の移動が成功したかどうかを返す。

制約

Range が要素の移動をサポートしている場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数である。

insertRows()、removeRows()、moveColumns()も参照

const QRangeModelAdapter<Range, Protocol, Model>::range_type &QRangeModelAdapter::range() const

モデルアダプタが操作する範囲への const リファレンスを返します。

assign()、at() およびmodel()も参照ください

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canRemoveColumns<I> = true> bool QRangeModelAdapter::removeColumn(int column)

各行から指定されたcolumn を削除し、削除が成功したかどうかを返します。

制約

Range に要素の削除をサポートする行がある場合にのみ、オーバーロードの解決に参加します。

insertColumn()、removeColumns()、removeRow()も参照

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canRemoveColumns<I> = true> bool QRangeModelAdapter::removeColumns(int column, int count)

各行から、与えられたcolumn で始まるcount 列を削除し、削除が成功したかどうかを返す。

制約

Range に要素の削除をサポートする行がある場合にのみ、オーバーロードの解決に参加します。

insertColumns()、removeColumn()、removeRow()も参照

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canRemoveRows<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true > bool QRangeModelAdapter::removeRow(QSpan<const int> path)

与えられたpath にある行を、その行のすべての子を含めて削除し、削除が成功したかどうかを返します。

制約

Range が要素の削除をサポートするツリーである場合にのみ、オーバーロード解決に参加します。

これはオーバーロードされた関数です。

removeRows()、removeColumn()、insertRow()も参照してください

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canRemoveRows<I> = true> bool QRangeModelAdapter::removeRow(int row)

与えられたrow を削除し、削除が成功したかどうかを返します。

制約

Range が要素の削除をサポートしている場合にのみ、オーバーロード解決に参加します。

これはオーバーロードされた関数です。

removeRows()、removeColumn()、insertRow()も参照

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canRemoveRows<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true > bool QRangeModelAdapter::removeRows(QSpan<const int> path, int count)

path で指定された行からcount 行を削除し、削除が成功したかどうかを返します。

制約

Range が要素の削除をサポートするツリーである場合にのみ、オーバーロード解決に参加します。

これはオーバーロードされた関数です。

removeRow()、removeColumns()、insertRows()も参照

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_canRemoveRows<I> = true> bool QRangeModelAdapter::removeRows(int row, int count)

row から始まるcount 行を削除し、削除が成功したかどうかを返す。

制約

Range が要素の削除をサポートしている場合にのみ、オーバーロード解決に参加する。

これはオーバーロードされた関数です。

removeRow()、removeColumns()、insertRows()も参照

int QRangeModelAdapter::rowCount() const

行数を返す。Range がリストまたはテーブルの場合、これは行数である。ツリーの場合は、これはトップレベルの行数である。

これはオーバーロードされた関数です。

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> int QRangeModelAdapter::rowCount(int row) const

template <typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true> int QRangeModelAdapter::rowCount(QSpan<const int> row) const

row 以下の行数を返す。

制約

Range がツリーの場合のみ、オーバーロードの解決に参加する。

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_list<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > bool QRangeModelAdapter::setData(int row, const QVariant &value, int role = Qt::EditRole)

row にある項目のrole データをvalue に設定する。

成功すればtrue を返し、そうでなければfalse を返す。

制約

Range が変更可能なリストの場合のみ、オーバーロードの解決に参加します。

data() およびat()も参照してください

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::if_tree<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > bool QRangeModelAdapter::setData(QSpan<const int> path, int column, const QVariant &value, int role = Qt::EditRole)

pathcolumn が参照する項目のrole データをvalue に設定する。

成功すればtrue を返し、そうでなければfalse を返す。

制約

Range が変更可能なツリーである場合にのみ、オーバーロード解決に参加します。

data() およびat()も参照

template < typename I, QRangeModelAdapter<Range, Protocol, Model>::unless_list<I> = true, QRangeModelAdapter<Range, Protocol, Model>::if_writable<I> = true > bool QRangeModelAdapter::setData(int row, int column, const QVariant &value, int role = Qt::EditRole)

rowcolumn が参照する項目のrole データをvalue に設定する。

成功すればtrue を返し、そうでなければfalse を返す。

制約

オーバーロードの解決に参加するのは、Range がリストではなく、ミュータブルである場合のみです。

data() およびat()も参照

関連する非メンバー

[noexcept] bool operator!=(const QRangeModelAdapter<Range, Protocol, Model> &lhs, const QRangeModelAdapter<Range, Protocol, Model> &rhs)

lhsrhs と等しくないかどうかを返す。2つのアダプタが同じmodel インスタンスを保持していれば等しい。

[noexcept] bool operator==(const QRangeModelAdapter<Range, Protocol, Model> &lhs, const QRangeModelAdapter<Range, Protocol, Model> &rhs)

lhsrhs と等しいかどうかを返す。2つのアダプタが同じmodel インスタンスを保持していれば等しい。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.