【问题标题】:How to set different text for a QDockWidget's tab and window title?如何为 QDockWidget 的选项卡和窗口标题设置不同的文本?
【发布时间】:2017-11-27 19:05:23
【问题描述】:

我已将QDockWidget 子类化,并通过myDockWidget.setWindowTitle("Some text") 设置标题栏文本。但是,当小部件停靠时,我想在选项卡中显示不同的文本。换句话说,当小部件停靠时,我想在标题栏中显示一个字符串,在选项卡中显示一个不同的字符串:

这可能吗?如果可以,怎么做?

【问题讨论】:

  • 你可以用图片来表明你想要得到什么。
  • 添加图片来说明。

标签: python pyqt4 titlebar qdockwidget


【解决方案1】:

这可以通过重新实现paintEvent 并覆盖默认的标题栏文本来实现。仍然必须使用窗口标题来设置选项卡文本:

class DockWidget(QtGui.QDockWidget):
    _title_text = None

    def titleText(self):
        if self._title_text is None:
            return self.windowTitle()
        return self._title_text

    def setTitleText(self, text):
        self._title_text = text
        self.repaint()

    def paintEvent(self, event):
        painter = QtGui.QStylePainter(self)
        if self.isFloating():
            options = QtGui.QStyleOptionFrame()
            options.initFrom(self)
            painter.drawPrimitive(QtGui.QStyle.PE_FrameDockWidget, options)
        options = QtGui.QStyleOptionDockWidgetV2()
        self.initStyleOption(options)
        options.title = self.titleText()
        painter.drawControl(QtGui.QStyle.CE_DockWidgetTitle, options)

dockWidget = DockWidget()
dockWidget.setWindowTitle('Tab Text')
dockWidget.setTitleText('Title Text')

PS:

请注意,另一种选择是使用setTitleBarWidget。但是,这样做的巨大缺点是您会丢失所有原生窗口装饰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多