問題タブ [qabstractitemmodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - QAbstractTableModel と QItemDelegate を 1 つの作業ソースに結合するには?
QTableView
UIファイルに定義があります。これが図です:
デリゲートを処理するウィジェット (赤い配列が指している場所) で月の変更を行いたいのQComboBox
ですが、私にとっては、カスタム デリゲートとモデルにとっては複雑すぎる問題であり、何が問題なのかわかりません。
問題: 私の意見では、カスタムのシンプルなウィジェットを QTableViewと組み合わせることができないため、 ではQAbstractTableModel
動作しません。え?QItemDelegate
ComboBoxDelegate
ここに私が持っているものがあります:
私のカスタム デリゲート ヘッダー/ソース データ:
モデルデータ:
その後、次のように init デリゲートを作成しました。
PS: 長い出力で申し訳ありませんが、すべてのソースがここに表示されれば、より良いものになると思います。
ありがとう!
c++ - QComboboxのモデルの使用方法
ののQCombobox
として使用したい 。だから私は 私のオブジェクトを保持するために使用する必要があります。オブジェクトをQComboboxに保持するにはどうすればよいですか。(MVCパターンに従って設計されているため、モデルにデータを保持する必要があると思います...)助けていただければ幸いです。Combobox
Swing
Java
Model
QCombobox
qt - pyqt: QAbstractDataModel と QTreeView の挿入行を理解しようとしています
QAbstractItemModel を使用してツリー ビューを管理するために PyQt を使用しています。これまでのところ、データの読み込み、展開と折りたたみ、値の編集ができるように実装できました。
ただし、私ができないことの 1 つは、行の挿入と削除に頭を悩ませることです。
私がやろうとしていることの短いバージョン:
ユーザーが特定のセルを編集するとき、実際にオブジェクト階層内の基礎となる項目を削除して、別の項目に置き換える必要があります。これをモデルの setData メソッドに実装します。私は自分が何をしているのか完全には理解していないので、セグメンテーション違反になるように設定したようです。
基本的に、データ モデルが QModelIndex とどのように相互作用するかをよりよく理解する必要があるだけですが、ドキュメントを読んだり読み直したりしても、私は啓発されないようです。任意のヘルプ (または適切なチュートリアルへのリンク (必ずしも必要ではありませんが、Python であることが望ましい) も大歓迎です)。
ここに私が使用しているコードのサンプルがあります:
c++ - QAbstractItemModel と QTreeView
QtreeView で独自のデータ モデルを表示する作業例 (c++) が必要です。
c++ - QSqlTableModel の列名を取得するにはどうすればよいですか?
QString QSqlTableModel::getColumnName(int col) のようなものが欲しいです。
c++ - Qtデリゲートエディタを「スティッキー」にする方法
アプリケーションを自家製のUIからQtに移行しています。最も重要なコントロールの1つは、プロパティパネルです。このパネルは、リフレクションAPIのインターフェイスを実装するオブジェクトを取得し、すべてのプロパティのエディターを含むダイアログボックスを表示します。
プロパティシステムの実装を作成QAbstractItemModel
し、内のさまざまなタイプのハンドラーをいくつか作成しましたQTableView
。QItemDelegate
プロパティのエディタを作成するためのも作成しました。
問題は、厳密にポップアップではなく、編集者にぶらぶらしてもらいたいということです。これは、プロパティのレンダリングを処理し、操作に必要なクリック数を減らし、カラーボタンなどの他の何かがフォーカスを取得してもすぐに消えないようにするためです-エディター(色の変更をリッスンするスロットがあります)が消えますカラーピッカーダイアログが表示されるとすぐに、これは何も変更をリッスンしていないことを意味します。
エディターを永続化するためのオプションが見つかりません。私はここで間違った木を吠えていますか、それともこれを行うためのより適切な方法がありますか?私は「Qt」の方法で物事をやろうとしましたが、すでにレンガの壁にぶつかっています。
ありがとう、
c++ - QAbstractModelItem のプロキシを作成する
非常に重いデータセットの視覚化を可能にする Qt アプリケーションを作成しています。
だから、私はSourceDataModel
クラスを持っており、それから継承するQAbstractItemModel
と正しく動作しているようです (現在、私は QTableView/QTreeView でのみ表示しますが、後でいくつかのカスタム ビューを作成します)。
さて、このデータをフィルタリングできるようにしたいと思います。
異なるデータ解像度を持つことができる (つまり、2 つのデータ項目のうち 1 つのデータ項目のみを公開する)
データにいくつかのフィルターを適用できる (つまり、UNIX タイムスタンプを dd/MM/yyyy hh:mm:ss として表示する)
そこでProxySourceDataModel
、my から継承してSourceDataModel
1 つのインスタンスを格納し、基本的にすべてをインスタンスに委譲するクラスの作成を開始しました。このことからProxySourceDataModel
、 で使用するとデータが表示されないことに気付きましたQTableView
。いくつかの調査の結果、基になる からシグナルとスロットを転送する必要があったためだと思われますSourceDataModel
。問題ありません。
しかし、まだ 2 つの問題が残っており、それらを処理する方法がわかりません。
ビューでデータを選択できません。
SourceDataModel
直接使用しても問題ありません。しかし、を使用すると、ProxySourceDataModel
何も選択できません。データはまったくフィルタリングされません。で data() をオーバーロード
ProxySourceDataModel
し、他のすべての呼び出しを基になる に転送しますSourceDataModel
。それでも、SourceDataModel::data()
呼び出されるだけです。
ここに私がやっていることを説明するためのいくつかのコードがあります:
ヘルプやアドバイスは大歓迎です。読んでくれてありがとう!
- - - - - - - - - - 編集 - - - - - - - - - - - -
見つけた!
問題は、ビューがQAbstractItemModel::data()
そのモデルから使用するのではなく、そのアイテムを呼び出し、そのアイテムの基になるモデルの をQModelIndex::data()
呼び出すことでした。QAbstractItemModel::data()
そして、私のプロキシは基になるモデルからモデル インデックスを返したので、常に!SourceDataModel::data()
の代わりに が呼び出されたのはそのためです。ProxySourceDataModel()
ローカル インデックスを返すように再実装したところProxySourceDataModel::index()
、魅力的に機能します。詳細については、QT ではモデルの連鎖が期待どおりに機能しないを参照してください。
ありがとう!
c++ - QAbstractTableModel をデータ ストアと同期させるにはどうすればよいですか?
私のアプリには、アイテムのリストを保持するためのクラスがあります。
アイテム操作関数 (追加、更新、削除) は、完了時に対応するシグナルを発行します (アイテムの追加、変更、削除)。そのようなデータベースのリストと、その内容を表示するための QTableView があります。また、カスタムの QAbstractTableModel 派生モデル クラスのオブジェクトが 1 つあります。これは、必要に応じて別のデータベースを指す (および表示する) ようにすることができます。
モデルに現在のデータベースへの変更を反映させることに問題があります。以前は、データベースで何かが変更されるたびに (データベースから DatabaseModel へのシグナルによってトリガーされて) モデルのリセットを発行することで動作させていましたが、それはやり過ぎだと判断しました。データベースとモデルを正しく接続する方法がわかりません。
データベース シグナルをモデルに接続し、モデルが dataChanged() を発行するようにしても、データベース内のアイテム数 (したがってモデルの行) が変化するため、機能しません。QAbstractTableModel には rowsInserted() および rowsRemoved() と呼ばれるシグナルがありますが、カスタム クラスでは使用できないとドキュメントに記載されています。removeRows() および insertRows() と呼ばれる再実装する仮想関数がありますが、ドキュメントでは、それらの内部で begin(Remove|Insert)Rows() および end(Remove|Insert)Rows() を呼び出す必要があると書かれており、2 つの問題が発生します。 :
begin...Rows() にはQModelIndex 'parent' パラメータが必要ですが、何を使用すればよいかわかりません 。これは QAbstractTreeModel によってツリー内の親ノードを識別するために使用され、明らかにテーブル モデルには必要ありません。- ドキュメントには、基礎となるデータストアを変更する前にこれらの関数を呼び出す必要があると書かれています
モデルをデータベースと同期させるにはどうすればよいですか? ありがとう!
sql - QTreeView と QSqlQueryModel -- SQL データベースから必要に応じて子をロードする
次の問題があります。
SQL テーブルから動的にデータをロードする QTreeView のモデルを実装しようとしています。
表は次のようになります。
id_parent には親レコードの ID が含まれているため、構造を形成します。
必要な場合にのみ、モデルがこのテーブルからデータをロードするようにしたいと考えています。言い換えれば、完全な構造をメモリにロードしたくありません。代わりに、ユーザーによって開かれたノードのみの子を読み取りたくありません。
QSqlQueryModel と QSqlTableModel は、フラット テーブルでのみ機能するようです。
この問題の解決策の 1 つは、カスタム QAbastractItemModel クラスを実装し、開いているノード (トップレベルの非表示の親を含む) ごとに個別の QSqlQueryModel インスタンスをストア内に実装することだと思います。そして、各メソッドを書き直し、リクエストを適切なモデルに転送します。
たぶん、もっと簡単な解決策がありますか?:-)
手伝ってくれてありがとう。
qt - QTableView列にQAbstractListModelアイテムを表示する
私はQtをいじっていて、小さな問題に遭遇しました。
写真の一覧をアイコンの表として表示したい。現在、私はQAbstractTableModel をサブクラス化し、それを QTableViewのサブクラスにプラグインすることでこれを行っています。
私の意見では、これはコード、モデル、およびビューを過度に複雑にします (特にアイテムを編集/追加しようとする場合)。モデルをQAbstractListModelとして実装しようとすると、項目がテーブルの行として表示されます。
代わりに QTableView にアイテムを列として表示させる方法はありますか?
編集:アイテムが左から右に 1 行でレンダリングされ、新しい行にラップされるようにします。
それとも、どのような場合でもテーブル ビューにテーブル モデルを使用し、問題を回避することが望ましいですか?
私は Qt Jambi に基づいて Qt の C# バインディングを使用していることに言及する価値があります。