2

ドッキング可能なウィンドウのタイトル バーとして使用するカスタム ウィジェットを実装しています。私の問題は Windows でのみ発生します。つまり、ドック ウィンドウが浮かんでいるときにウィンドウの境界線が消えます。

問題は、Windows のみで、ウィンドウ フラグが変更されていることです。つまり、これを行うとき:

   print dock_window.windowFlags()
   dock_window.setTitleBarWidget(title_bar)
   print dock_window.windowFlags()

前後のフラグの異なる設定を出力します。ただし、Linux では同じままであり、境界線は変更されません。

私の質問は、ウィンドウの境界を復元する方法ですか?

更新: ドック ウィンドウがフローティングしているときにカスタム タイトル バーが境界線のフラグをオーバーライドするため、ドック ウィンドウを編集してある種の境界線を表示するにはどうすればよいですか? (ドック ウィンドウがフローティングしているときにカスタム タイトル バーを表示することが重要です。)

4

2 に答える 2

1

この回答によると、これは予想される動作です。

ドキュメントからsetTitleBarWidget:

タイトル バー ウィジェットが設定されている場合、QDockWidget はフローティング時にネイティブ ウィンドウ装飾を使用しません。

それでは、Linuxは間違った方法をとっているのでしょうか?

とにかく、Windowsの回避策として、PySide/PyQtの回答からアイデアを実装しました(フローティングする前にタイトルバーウィジェットを設定解除する)。

from PySide import QtGui, QtCore

class MyDockWidget(QtGui.QDockWidget):

    def __init__(self, title_widget):
        super().__init__()
        self.title_widget = title_widget
        self.toggle_title_widget(False)
        self.topLevelChanged.connect(self.toggle_title_widget)

    def toggle_title_widget(self, off):
        if off:
            self.setTitleBarWidget(None)
        else:
            self.setTitleBarWidget(self.title_widget)


app = QtGui.QApplication([])

w = QtGui.QMainWindow()
t = QtGui.QLabel('Title')
d = MyDockWidget(t)
w.addDockWidget(QtCore.Qt.LeftDockWidgetArea, d)
w.show()

app.exec_()

少なくとも、フローティング時の標準の装飾は維持されます。

于 2015-02-13T17:07:22.603 に答える