問題タブ [qstyleditemdelegate]
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.
c++ - QStyledItemDelegate は、デフォルトの QLineEdit エディターのテキストを部分的に選択します
QStyledItemDelegate
現時点では関数を再実装していないサブクラスがあります(質問を簡単にするため)。
デフォルトQStyledItemDelegate
の実装では、ユーザーが でテキストの編集を開始するQTableView
と、デリゲートQLineEdit
はモデルからのテキストを使用して を描画し、そのすべてを選択します (編集のためにすべてを強調表示します)。
テキストは「document.pdf」などのファイル名を表します。ユーザーはこのテキスト全体を編集できますが、最初はベース名部分 (「ドキュメント」) のみを強調表示し、接尾辞 (「pdf」) は強調表示したくありません。これどうやってするの?QStyledItemDelegate
(これを行う方法のロジックは必要ありません。テキストの一部を強調表示する方法を知る必要があります)
私はもう試した:
一部のテキストを強調表示するために
setEditorData()
使用されます。QLineEdit::setSelection()
これは効果がありません。paint()
他の回答者が同様の質問に推奨したものに基づいてペイントしようとしましたが、成功しませんでした。の経験はほとんどありませんQPainter
。以下に例を示します: QStyledItemDelegate を使用して QStandardItem の選択動作を調整する
助けてください、そして前もって感謝します。テキストの最初の 3 文字を選択するなどのコード スニペットをいただければ幸いです。
python - QStyledItemDelegate のペイント更新の問題
私は現在、モデル ビュー アプローチに頭を悩ませ、サムネイル ビューア アプリケーションを作成しようとしています。
この例では、単純に 20 個のボックスを描画しようとしていますが、マウスの動きで更新されるランダムな選択のように見えます。スクロールすると事態がさらに悪化し、描画にボックスなどしか表示されないことがあります。また、テキストがまったくレンダリングされないようです。
私には、ペイント メソッドの更新/更新の問題のように見えます。ここで何か不足していますか?
最終的には、たくさんのアイテムを表示する必要があります。すべてには、いくつかのラベルと、実行時に更新する必要があるピックスマップが含まれています。だから私はそれらを描くことが最速の解決策になると思いました. 別の方法として、次のようにペイント メソッドでウィジェットをレンダリングしてみました。
これは遅いようですが、少なくとも機能しています。
私の問題を説明するための最小限の実例を次に示します。
前もって感謝します。次に探すべきヘルプやポインタは大歓迎です!
c++ - QAbstractItemModel の dataChanged シグナルのスロットで送信者オブジェクトを取得できません
QAbstractItemModel をサブクラス化し、dataChanged シグナルのスロットでウィジェットを取得しようとしています。
ここでは、毎回 null ウィジェットを取得していますが、qobject_cast と同じ結果です。
テーブルビューでQStyledItemDelegateを派生させるデリゲートクラスにコンボボックスウィジェットを設定しています。
この場合、送信者オブジェクトを取得するにはどうすればよいですか? ありがとう。
c++ - カスタム QStyledItemDelegate - モデルへの編集の適用
私のプロジェクトでは、関数QStyledItemDelegate
からカスタム エディターをサブクラス化して返しました。createEditor
編集が終わったら、新しいデータをモデルに書き戻したいです。だから私はオーバーライドしsetModelData
ました。
これは機能しますが、問題はsetModelData
、エディターがどのように閉じられても呼び出されることです。EndEditHint
、を使用してエディターを閉じた場合にのみ、新しいデータを書き込みたいですQAbstractItemDelegate::SubmitModelCache
。そこで、closeEditor
信号を という名前のスロットに接続しましたeditFinished
。
これで、エディターを介してエディターがどのように閉じられたEndEditHint
か、およびデータをモデルに書き戻す必要があるかどうかを確認できるようになりました。Buuuuut、setModelData
get はcloseEditor
シグナルの前に呼び出されます。closeEditor
シグナルが最後に呼び出されたときに、どのようにデータをモデルに書き戻すのでしょうか? ここで何か不足していますか?
qt - スクロール時にQStyledItemDelegateカスタムウィジェットが正しく描画されない
私の以前の質問QWidget
の 1 つは、 2 つQLabel
の s を並べて含むカスタマイズされた QStyledItemDelegate を扱います。
ジョセフ・アイルランドが提供した簡単な解決策に本当に満足しました. 残念ながら、与えられた解決策は壊れていますが、すぐには気づきませんでした。含まれるQTableWidget
myQStyledItemDelegate
が小さくなりすぎると、スクロールバーがアクティブになります。
スクロールすると、セル要素の正しい描画が破壊されます。これは、ある種の更新の問題のようです。のビューポート領域の周りに長方形を描いた後、これに気付きましたQAbstractScollArea
。
激しくスクロールすると、私のテーブルは次のようになります。
セルの内容が適切な場所に描画されないか、結局描画されないように見えます。2 行ごとに奇妙に発生します。さらに、私のビューポート領域の周りに描かれた四角形QAbstractScrollArea
がめちゃくちゃです。ウィンドウが再描画された場合 (ウィンドウを非表示/表示)、すべて問題ありません。
この種の更新/再描画の問題に対する解決策は何ですか? スクロールが終わったら再描画する必要があるのでしょうか?
ジョセフ・アイルランドが投稿した私の適応ソリューションは次のとおりです。
ヘッダー ファイル: TwoNumbersDelegate.h
ソース ファイル: TwoNumbersDelegate.cpp
次のプログラムがテスト ランナーとして機能しました。