[解決済み] QML ListViewからQAbstractListModelのデータを操作する
2022-02-27 11:15:10
質問
QAbstractListModelのサブクラスをモデルとして使用するQML ListViewを持っています。
ListView {
id: myListView
x: 208
y: 19
width: 110
height: 160
delegate: myListDelegate {}
model: MyListModel
opacity: 0
}
モデルは
MyListItem
s.
class MyListModel : public QAbstractListModel
{
Q_OBJECT
public:
enum MyRoles {
HeadingRole = Qt::UserRole + 1,
DescriptionRole,
QuantityRole
};
explicit MyListModel(QObject *parent = 0);
void addMyListItem(const MyListItem &item);
int rowCount(const QModelIndex & parent = QModelIndex()) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
void dropList();
private:
QList<MyListItem> m_list;
};
デリゲートには、mouseareaがあります。
どのようにしたら、mouseareaのクリックをインターセプトし、ピックすることができますか?
あれ
MyListItem
QListモデルから、アプリケーションのC++部分のどこかに送信するのですか?
どのように解決するのですか?
を使用することもできます。
index
プロパティを使用して、データを操作することができます。ただ、QML のインデックスを
QModelIndex
をモデル上のindexメソッドで使用します。ここでは、リストアイテムがクリックされるたびに、表示値を文字列 "3" に変更する簡単な例を示します。
ListView {
id: listView
anchors.fill: parent
model: my_model
delegate: Rectangle {
height: 50
width: listView.width
MouseArea {
anchors.fill: parent
onClicked: {
// Column is always zero as it's a list
var column_number = 0;
// get `QModelIndex`
var q_model_index = my_model.index(index, column_number);
// see for list of roles:
// http://doc.qt.io/qt-5/qabstractitemmodel.html#roleNames
var role = 1
var data_changed = my_model.setData(q_model_index, "3", role);
console.log("data change successful?", data_changed);
}
}
}
}
に加えて
index
プロパティをデリゲートで使用すると、デフォルトのロール名をすべて使用することができます。そのため、例えば
decoration
ロールを設定することで
color
プロパティを設定します。
Rectangle
デリゲートの前に を参照してください。
このリスト
をご覧ください。
ListView {
delegate: Rectangle {
// list items have access to all default `roleNames`
// in addition to the `index` property.
// For example, using the decoration role, demo'd below
color: decoration
}
}
もご覧ください。 このリンク Mitch Curtis は、ユーザー列挙型を登録するために qmlRegisterUncreatableType を使用することを推奨しています。
関連
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】'std::cout'への未定義の参照