問題タブ [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.
qt - QTableView セルをクリックしてもフォーカスされないのはなぜですか?
QTableView
スライダーを使用して列 2 のセルを編集するデリゲートを作成し、設定しました。openPersistentEditor
列 2 のすべてのセルを呼び出します。
これで、列 2 にスライダーが永続的に表示されたテーブルができました。
QStyledItemDelegate のサブクラスでスライダーを作成するために使用するコードは次のとおりです。
私の問題は、ユーザーがスライダーを使用して値を編集しているときを知る必要があることです (フォーカスが必要です)。テーブルのセルから左側のスライダーにタブで移動すると、スライダーが返された現在のアイテムになることがわかりましたが、スライダーtable->selectionModel()->currentIndex();
をクリックしても、現在のアイテムは変更されません。また、セルから左側のスライダーにタブで移動することはできますが、スライダーからタブで移動することはできません。
簡単なものが欠けていると確信していますが、助けていただければ幸いです。
重要な場合は、スライダーのコンストラクターで StrongFocus を設定しQModelView
ます。スライダーの列のフラグは次のとおりです。Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled;
qt - QStyleOptionButton をカスタム アイコン付きのチェックボックスのように設定する方法
Delegate
から継承するカスタムクラスがありQStyledItemDelegate
ます。そのpaint()
場合、チェック可能にする必要があるものを追加したいと思いQStyleOptionButton
ます。出来ますか?
たとえば、目のアイコンで可視性プロパティを示します。ボタンを押すと、目のアイコンが閉じた目のアイコンに変わります。
メソッド内でpaint()
、これはボタンを作成するための現在のコードです。
にロードするアイコンは、次の方法buttonVis
で作成されます。
プログラムを実行すると、ボタンには目を閉じたアイコンが表示されます。どのアイコンを表示するかを制御するコマンドはありますか? 初期のレイアウトを実装できない場合、どの方向に進むべきでしょうか?
編集:チェックボックスの外観をシミュレートするために使用するアイコンを選択する方法を見つけました。代わりに if 行buttonVis.state = QStyle::State_Enabled;
があるべきです:
ここでの問題は、その状態が何であるか、または から設定する方法を理解することeditorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
です。option
問題は、常に参照しているため、自分で実際に変更できないことです。それを行う方法、またはそれを回避する方法はありますか?
python - QStyledItemDelegate を使用した CustomWidget の QListView
データをより整理する方法を示すQListView
withを作成しようとしています。QStyledItemDelegate
私はこのサイトを調べましたが、そのすべてが C++ で書かれていますが、投稿で使用されている構文と呼び出しから推測して、それを達成する方法を試しましたが、運がありませんでした。誰かがこれで私を助けてくれますか?
qt - 複数の ProgressBars の進行状況データで TableView を更新する方法は?
接続できるように、 qGetDownloadManager
を拡張してaの進行状況を出力し始めましTransferItem
た。TableView
で表示するモデルのセルに進行状況データを挿入していDelegate
ます。最後にデリゲートが進行状況バーを描画します。それは理論的には機能しますが、私は次のことに遭遇しています
問題:複数のダウンロードが並行して行われている場合、両方のシグナルから両方のセルへの進行状況の更新を取得します。
QModelIndex index
どちらの進行状況バーにも進行状況データが表示されますが、シグナルは混合されており、現在のインデックス ( / )に固有のものではありませんindex.row()
。
(UserRoles 間の小さな遷移の問題は無視してください (ダウンロード ボタンをクリックした後、"ActionCell" が表示され、"ProgressBar" が表示される前に "Install" が表示されます)。それはここでの主な問題ではありません。私の質問はインデックスに関するものです。問題です。) テキスト "112" と "113" は intindex.row
です。
質問:
- 複数の ProgressBars の進行状況データで TableView を更新する方法は?
- ダウンロードごとに進行状況バーを表示するには、何を変更する必要がありますか?
ソース
ダウンロードの進行状況を出力する
クラスを介して信号を再発信するために、次のことを追加しました。信号が上部にバブルアップし、GUI から接続可能になります。
-から
/li>QNetworkReply
-downloadProgress(qint64,qint64)
への接続TransferItem
updateDownloadProgress(qint64,qint64)
SLOT 関数
/li>TransferItem
-updateDownloadProgress(qint64,qint64)
レシーバーが進行状況を計算し、progress
(QMap<QString, QVariant>
) に格納するため。計算後、downloadProgress(this)
シグナルが発行されます。新しいダウンロードがキューに入れられる と、発行さ
/li>downloadProgress(this)
れた を SlotDownloadManager
-に接続していdownloadProgress(TransferItem*)
ます。(dl
はDownloadItem
拡張するTransferItem
) です。最後に、ダウンロードの進行状況をもう一度再発行しています。
/li>
Delegate、doDownload(index)、および ProgressBarUpdater を含む TableView
QTableView
- を追加
QSortFilterProxyModel
(大文字と小文字を区別しないため) カスタムUserRoles
/li>ColumnDelegate
に基づいて DownloadButton と ProgressBar をレンダリングします。デリゲートはボタンのクリックを処理しますdownloadButtonClicked(index)
。SIGNAL はeditorEvent(event, model, option, index)
メソッドから発行されます。
/li>doDownload
メソッドは を受け取り、index
モデルからダウンロード URL を取得します。次に、URL が DownloadManager に追加され、ProgressBarUpdater オブジェクトを設定して、指定されたインデックスのモデルに進行状況データを設定しています。最後に、に接続downloadManager::signalProgress
しprogressBar::updateProgress
て呼び出しdownloadManager::checkForAllDone
、ダウンロード処理を開始します。モデルの更新部分: ProgressBarUpdater はインデックスと進行状況を取得し、指定されたインデックスでモデルを更新する必要があります。
/li>レンダリング部分: デリゲートから偽の ProgressBar をレンダリングしています。で進行状況データを取得し
/li>index.model()->data(index, DownloadProgressBarRole)
ます。
QString::number(index.row()
各 ProgressBar の行番号がレンダリングされるように、進行状況バーのテキストに追加しました。言い換えれば、レンダリングは行に固有ですが、入ってくる進行状況データは何らかの形で混合されています。
私はしばらくインデックスの問題で立ち往生しています。よろしくお願いいたします。
更新: 問題は解決しました!
ddriverさん、ありがとうございました!! 私はあなたの提案に従い、それを修正しました:
qt - QStyledItemDelegate:チェックボックスボタンをクリックしてその状態を変更する方法
MyDelegate
に使用されるデリゲートがありQListWidget
ます。デリゲートは から派生しQStyledItemDelegate
ます。の目標の 1 つは、 のMyDelegate
各行にチェックボックス ボタンを配置することですListWidget
。paint()
次のイベント内で実行されますMyDelegate
。
を指定したので、最初はチェックボックスをクリックすると自動的に状態が変わると思いましたQStyle::CE_CheckBox
。しかし、そうではありません。チェックボックスの視覚的な動作を手動で指定する必要があるようです。
データ的には、ユーザーがそのチェックボックスをクリックすると、特定の信号が発せられ、シーン データが変更されます。でこのアクションを実行しますeditorEvent()
:
バックエンド部分が機能します。ただし、チェックボックスボタンの視覚状態をチェックからチェック解除、およびその逆に変更する方法がわかりません。
paint()
から次のようなことを行うことで、チェックボックスの状態を手動で変更できることに気付きました。
QStyle::State_On/Off
チェックボックスの状態を手動で変更するトリックを行います。
しかし、それを設定する方法と、どこに設定すればよいかわかりませんsomeCondition
。bool
チェックボックス領域がクリックされたときに設定されるプライベート変数として導入しようとしましたeditorEvent()
が、目的の動作を生成しません。他のすべてのチェックボックスをListWidget
同じ視覚状態に設定します。そのため、すべてのチェックボックスのグローバル条件のように動作しました。
私の仕事を達成するには、ボタンを再実装し、クリック時にチェックボックスの状態を変更する必要があるように感じます。しかし、私はこの方法で迷子になり、問題へのアプローチ方法がわかりません。QStyleOptionButton
APIからは、clicked()
使用できるメソッドやその他のメソッドが表示されません。
問題は、チェックボックスを視覚的にチェックボックスのように動作させるにはどうすればよいかということです。チェックボックスを再実装する必要がある場合、どのクラスを継承すればよいでしょうか?
python - QCompleter のポップアップ リストのリスト項目を適切にフォーマットする方法は?
ユーザーが文字を入力し、特定のデータ ソース (リストはこちら) に基づいて検索を容易にする提案を取得できる小さなユーザー インターフェイスを作成する方法を調査したいと考えています。この目的のために、Qt のQCompleter
クラスを使用しています。
一致する要素では、入力された文字は、次のコードの例のように HTML で強調表示されますAu<b>st</b>ria
。最後に、いくつかの SO の回答 ( Qt でアイテム ビューをリッチ (html) テキストでレンダリングする方法を参照) とチュートリアルを小さなスタンドアロン モジュールにマージしました。
私の問題は、回答https://stackoverflow.com/a/5443112/1504082でのユーザー Timo の提案です。
行: 'doc.setHtml(options.text)' の後、doc.setTextWidth(option.rect.width()) も設定する必要があります。そうしないと、デリゲートはターゲット描画領域に関して長いコンテンツを正しくレンダリングしません。たとえば、QListView で単語をラップしません。
したがって、コンプリータのポップアップで長いテキストがトリミングされるのを避けるためにこれを行いました。しかし、次の出力が得られます。
この追加の垂直マージンはどこから来るのでしょうか?
これを少し調べたところ、属性を持つ四角形を含むパラメーターを使用して のsizeHint
メソッドがHTMLDelegate
呼び出されることがあることがわかりました。そして、 の呼び出し後に最終的に表示動作が変わります。しかし、このパラメーターを使用して誰がそれを呼び出しているのか、そしてこれを適切に修正する方法を最終的に見つけることができませんでした。options
(0, 0, 0, 0)
doc.setTextWidth(options.rect.width())
誰かがこれがどこから来たのか、どうすればこれを適切に修正できるのかを説明できますか?
qt - QTreeView に行の高さを再計算させる方法は?
QTreeView
サブクラスQAbstractItemModel
とカスタムがありますQStyledItemDelegate
。カスタム デリゲートがsizeHint
再実装され、テキストの折り返しを考慮して、計算された正しいセルの高さが返されます。
したがって、問題は、列のサイズ変更時にセルの高さが変化しないことです。QTreeView
彼のセルの高さを強制的に再計算する方法は? シグナルを使用QHeaderView::sectionResized
してセルのサイズ変更を検出できますが、QTreeView
セルの高さを変更するにはどうすればよいですか?