0

QRowWidget私が定義したカスタムウィジェットである複数のを含むウィンドウがあります。これらには、およびその他の標準ウィジェットQRowWidgetが含まれています。QLineEditの特定の部分を表示または非表示にするために、その中のすべてのウィジェットのQRowWidgetメソッドを過剰に定義しました。focusInEvent()完全に機能します。をクリックするQRowWidgetと、非表示の要素が表示されます。

QLineEdit奇妙なことに、点滅するカーソルラインホバーがカスタムウィジェット内のに表示されません。マウスクリックまたはタブの両方で選択できます。グロー効果は、QLineEditが選択されていること、テキストを選択できること、またはクリックした場所から入力を開始できることを示しますが、カーソルは表示されず、かなり迷惑です。

私の最初の考えは、これはMacのバグだと思っていましたが、SuSeLinuxでも同じ経験があります。

私はPython2.7とPyQt4を使用しています。

これは:の__init__()にありQRowWidgetます

   for i in self.findChildren(QWidget):
        i.focusInEvent = self.focusInEvent

そして、これは独自のものfocusInEvent()です:

def focusInEvent(self, event):
    if self.pself.focusedLine:
        self.pself.focusedLine.setStyleSheet("color: #666;")
        self.pself.focusedLine.desc.hide()
        self.pself.focusedLine.closebutton.hide()
    self.setStyleSheet("color: #000;")
    self.desc.show()
    self.closebutton.show()
    self.pself.focusedLine = self
4

1 に答える 1

1

focusInEvent()オーバーライドするときに、オリジナルを呼び出さないように思われます。関数は次のようになります。

 def focusInEvent(self,...):
     QParent.focusInEvent(self,...)
     # the rest of your code

ウィジェットの最も近い基本クラスはどこQParentですか。

それか、関数の一部としてウィジェットを呼び出すようfocusInEvent()にしてください。QLineEdit

focusInEventコメントを考えると、カスタムウィジェットのインスタンス化で関数を動的に再割り当てしているようです。使用するウィジェットごとに、focusInEvent上記のようにオーバーライドする派生クラスを作成するか、次のような行を含めます。

type(self).focusInEvent(self,..)

あなたの中で機能します。

于 2013-01-02T14:29:24.107 に答える