【问题标题】:How can I specify seperators using QDockWidget?如何使用 QDockWidget 指定分隔符?
【发布时间】:2018-06-27 07:54:30
【问题描述】:

我有以下示例代码:

from PyQt5 import QtWidgets, QtCore, QtGui
import sys

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent=parent)
        self.bgcolor = self.palette().color(self.backgroundRole()).name()

        self.central = QtWidgets.QTextEdit(self)
        self.central.setText('this is the central widget')
        self.setCentralWidget(self.central)
        self.setDockOptions(self.AnimatedDocks) #prevent tabbing

        self.rightDock = QtWidgets.QDockWidget('right dock', self)
        self.rightDock.setAllowedAreas(QtCore.Qt.RightDockWidgetArea)
        self.rightDock.setStyleSheet('QDockWidget::title{text-align:left;background:'+self.bgcolor+';}')

        self.everywhereDock = QtWidgets.QDockWidget('everywhere dock',self)
        self.everywhereDock.setAllowedAreas(QtCore.Qt.BottomDockWidgetArea | QtCore.Qt.TopDockWidgetArea | QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)
        self.everywhereDock.setFeatures(QtWidgets.QDockWidget.DockWidgetFloatable | QtWidgets.QDockWidget.DockWidgetMovable)
        self.everywhereDock.setStyleSheet('QDockWidget::title{text-align:left;background:'+self.bgcolor+';}')

        self.dockable = QtWidgets.QTextEdit(self.rightDock)
        self.dockable.setText('this is dockable only on the right')
        self.dockable2 = QtWidgets.QTextEdit(self.everywhereDock)
        self.dockable2.setText('this is dockable everywhere, also its not closable')

        self.rightDock.setWidget(self.dockable)
        self.everywhereDock.setWidget(self.dockable2)

        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.rightDock)
        self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, self.everywhereDock)
        self.setTabPosition(QtCore.Qt.AllDockWidgetAreas, QtWidgets.QTabWidget.North)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    m = MainWindow()
    m.show()
    sys.exit(app.exec_())

问题是如何插入图标,DockWidgetAreas之间的边界是可拖动的,让用户有提示,有这个功能。

澄清: 我想要黑色箭头之间的图标:

【问题讨论】:

    标签: qt pyqt qt5 pyqt5 qdockwidget


    【解决方案1】:

    QDockWidget 支持不是分隔符的“标题小部件”,但您可以使用 QDockWidget::setTitleBarWidget(QWidget *widget) 将其添加到每个 QDockWidget 中。

    因此,您可以创建一个通用的QWidget 来使用QHorizontalLayout 或其他东西来保存此图标,并将其放入标题栏中。 Qt 处理的默认鼠标事件(例如拖动事件)应该继续正常工作,并且您有一个可自定义的标题栏。

    self.rightDock = QtWidgets.QDockWidget('right dock', self)
    self.rightDock.setAllowedAreas(QtCore.Qt.RightDockWidgetArea)
    
    // add custom title widget
    self.rightDock.setTitleBarWidget(self.titleWidget)
    // add widget to dock widget
    self.rightDock.setWidget(self.dockable)
    
    self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.rightDock)
    

    【讨论】:

    • 我的问题是关于小部件之间的边界,它们也是可拖动的(就像在 QSplitter 中一样),而不是关于标题。 (见我的编辑)
    • @Jonas 要插入任何图标,您必须有一个 QWidget。我不确定这个“边界”是否有一个,我猜你不能直接做。如果我找到一些东西,我会编辑这个答案。但在此之前,我会尝试将QWidget 子类化,并且每当将QDockWidgets 插入到QWidget 中(我确定有一个signal)你手动插入这些图标。
    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2011-10-31
    • 2022-01-23
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多