問題タブ [qitemdelegate]
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.
qtableview - ペイントはqtableviewのデータをクリアします
QTableView にデータを表示する必要があります。データを持つモデルがありますが、QAbstractProxyModel をサブクラス化してモデルのデータを転置しました。さらに、QItemDelegate をサブクラス化することで実現できる QTableView のボタンは 1 つだけ必要です。問題は次の場合です。 view->setItemDelegate(MyItemDelegate)(プッシュボタン用); を設定します。view->setModel(myModel); 表示->表示(); ... QItemDelegate の委譲時に、paint メソッドでペイントしたプッシュボタンしか見つかりません。検索したところ、myModel から値を設定するには setModelData() と setEditorData() が必要であることがわかりました。
PS:- view->setModel(MyModel); を試すと、表示->表示(); setItemDelegateなし... QTableViewでデータを見ることができました...しかし、委任後にデータが表示されません... QTableViewのQPushButtonのためだけにこのすべての痛み
windows - QItemDelegate のカスタム エディターから getOpenFileName を呼び出すとクラッシュする
前提条件:
ツリービュー項目のカスタム エディターを作成するカスタム QItemDelegate があります。エディターは、QLineEdit と QToolButton で構成されます。このボタンを使用して、ファイルを選択し、そのパスを行編集に配置するためのファイル ダイアログを開きます。QFileDialog::getOpenFileName への呼び出しを使用して、ファイル ダイアログを開きます。ダイアログはネイティブの Windows ファイル ダイアログです (これは重要です)。
エディターが初めて作成されたときは、そのボタンを何度押してもすべて正常に機能します。しかし、エディターを閉じて再度開いた後、ボタンを最初に押すとクラッシュします。クラッシュの理由は、私のカスタム エディターが最終的に削除されることです。
ここにいくつかのコードがあります:
python - QFileSystemModel に接続された QListView 内のファイルの色を条件付きで変更する
私は と を持ってQListView
いQFileSystemModel
ます。での選択に基づいてQTreeView
、QListView
フォルダの内容が表示されます。
ここで、条件に応じてファイル名の色を変更する必要があります。
最初のアイデアは、QListView 内のアイテムを反復処理し、条件が満たされているかどうかに応じて各アイテムの色を設定することです。ただし、これは不可能のようです。setData()
メソッドはQFileSystemModel
への変更のみを受け入れ、次のEditRole
ようなものを無視するためです [これを参照]
これはここでも指摘されて
おり、後者の提案はQItemDelegate
、QListView の項目を色付けする目的でサブクラス化することでした。
したがって、条件が満たされた場合にファイル名を緑色で表示するメソッドをサブクラス化QStyledItemDelegate
して再実装しました-これは正常に機能します。paint()
しかし、今は見栄えが悪いです。ファイル アイコンが失われ、"mouse_over" 効果が機能しなくなりました。
このサブクラス化はとにかく厄介な回避策ですが、私のトップレベルの質問は
- 条件に基づいて
QListView
接続されたアイテムに色を付ける方法はありますか?QFileSystemModel
これが当てはまらない可能性があり、QItemDelegate のサブクラス化に固執する場合、
- 素敵な選択とアイコンを元の動作に戻す方法はありますか?
- QListView で QFileSystemModel に最初に使用された ItemDelegate とその使用方法を知っている人はいますか?
- ソースコードを入手して、そこから paint メソッドをコピーすることは可能ですか?
以下は、サブクラス化を使用し、記述された動作を示す最小限のコードです。QLineEdit
その文字列を含むすべてのファイルが緑色で強調表示されるように、文字列を入力できる場所を使用します。
これは、QItemDelegate をサブクラス化した場合としない場合の比較です。
言及しておくと、このコードのもう 1 つの問題は、条件が変更されると、マウスを QFileView に移動して再描画を開始する必要があることです。LineEdit.textChange
信号に直接接続するためにどのスロットを使用できるのだろうか。
c++ - Qt QItemDelegate データをコミットし、マウスでエディターを閉じる ビュー ウィジェット (listView) を離れる
マウスを離したときに、listView のエディターを呼び出す際に問題がありました。私は自分の問題を解決することができました。私には明らかではなかったので、解決策を投稿することにしました:
デリゲート ヘッダー ファイルでエディター ウィジェット ポインターを作成し、コンストラクターで値 Q_NULLPTR を指定しました。
次にcreateEditorで:
MyListView ヘッダー ファイルで、シグナル saveToModelFromEditor(); を作成しました。そして信号を発しました
commitData をモデルにコミットし、誰かがエディターを閉じたい場合にエディターを閉じる関数:
最後に、シグナルとスロットのメカニズムを使用して、シグナルを listView からエディターのスロットに接続しました。
別のコミュニティ (VoidRealms facebook グループ) から助けてもらいました。
これが誰かに役立つことを願っています。
python - コンボボックス QItemDelegate の作り方
QTableView でコンボボックスを提供するために、次のデリゲートを実装しました。使用例は、一般にユーザーにとって意味のない列 (キー) (数値 ID など) を同等のテキストに置き換えることです。
以下のスニペットは (適切な値を保存するためにも) 機能しますが、3 つの問題があります。
- 同等のテキストではなく、元の値が表示されます。
- QTableView で行を選択すると、すべての列が提供されますが、このデリゲートを含む列は提供されません。
- 理想的には、ユーザーがクリックしてコンボボックスであることを確認しなくても、コンボボックスがそのように表示されるようにしたいと考えています。
注:キーは任意の文字列にすることができます (整数である必要はありません)。典型的な例は国です (値 "France" はキー "FR" に対応します)。