Windows PyQtでNoFocusを設定せずに点線の境界線を削除する質問

Windows PyQtでNoFocusを設定せずに点線の境界線を削除する質問

これについてはSOにいくつかの質問がありますが、そのすべてにおいて、点線の境界線を削除する唯一の方法は問題のウィジェット/アイテムの focusPolicy を NoFocus に設定するこれは一時的な修正としては機能しますが、他の必要な focusEvents の領域で、当該ウィジェット/アイテムとのさらなるやり取りができなくなります。

問題の国境は次の通りです。

点線フォーカス?境界線

これが機能しない理由の例を次に示します。

  • 非モーダル ウィジェット ポップアップがあります。画像用のライトボックスと考えてください。
  • ウィジェットの外でmousePressEventを検出し、結果としてウィジェットを閉じたい。これを行うには、focusOutEventをキャッチする
  • ただし、プログラム内のウィジェットの大部分が NoFocus に設定されている場合 (境界の問題を解消するため)、フォーカス ポリシーがないため focusOutEvent をキャッチできません。

もう一つの例を挙げます。

  • さまざまな理由で keyPressEvents をキャッチできるようにサブクラス化された QTreeWidget があります。
  • QTreeWidget も、境界を防ぐために NoFocus に設定されています。ただし、このため、ウィジェットにフォーカスが当たらないため、keyPressEvents をキャッチできません。
  • これを回避するには(不格好ではありますが)、ウィジェットのgrabKeyboardクラスを使用する後でキーボードを解放するのを忘れると危険です。これは最適ではありません。

それで質問ですが、アプリ内のすべてのフォーカスをオフにせずに、この奇妙な(主に醜い)点線の境界線を削除する方法はあるでしょうか? よろしくお願いします!

ベストアンサー1

outline: 0目的のオブジェクトを設定します。 に設定する次の例を参照してくださいQTableView

QTableView
{
    outline: 0;
}

継承されたクラスで動作しますQAbstractItemView。(QTreeWidget, QTableWidgetなど)。驚いたことに、このCSSプロパティはQTドキュメントには記載されていません。QT スタイルシートリファレンスドキュメント。

おすすめ記事