QDockWidget隐藏标题栏

时间:2014-10-06 21:02:14

标签: python-3.x pyqt4

我找不到如何隐藏Qdockwidgets的标题栏:

我在参考文献中找到了这个:

QDockWidget.setTitleBarWidget (self, QWidget widget)

The widget argument has it's ownership transferred to Qt.

Sets an arbitrary widget as the dock widget's title bar. If widget is 0, any custom title bar widget previously set on the dock widget is removed, but not deleted, and the default title bar will be used instead.

这在很多地方都有:

dockWidget->setTitleBarWidget(new QWidget());

但如何实际使用它们?我根本找不到任何简单的代码示例,这些代码甚至在引用中都显示了这些代码,并且我的所有尝试都以各种错误结束。 在整个页面中:http://pyqt.sourceforge.net/Docs/PyQt4/qdockwidget.html#setTitleBarWidget根本没有什么可以告诉我如何使用它:

QDockWidget.setTitleBarWidget (self, QWidget widget)

如果我阅读文档,我应该将“小部件”替换为0,这样我就不会显示标题栏

self.dockWdg1.setTitleBarWidget(self, QtGui.QWidget(0))# If I don't add QtGui in front of QWidget it don't know what is QWidget 

给我这个错误:

TypeError: QWidget(QWidget parent=None, Qt.WindowFlags flags=0): argument 1 has unexpected type 'int'

另一个问题,是否有人使用此引用:? http://pyqt.sourceforge.net/Docs/PyQt4/qdockwidget.html#setTitleBarWidget

我的问题看起来很奇怪,但我发现这些参考文献如此不完整(没有代码示例)而且解释如此模糊我真的很想知道我是否正在寻找正确的解释,特别是在另一方面我们有这个:{{3与pySide似乎如此如此好得多。 PyQT引用成功甚至比MaxScript引用更糟糕,这不是一件小事。

我的完整代码:

import sys, random
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QPalette, QBrush, QPixmap





class MainWin(QtGui.QMainWindow):

     def __init__(self):
        super(MainWin, self).__init__()

        self.initUI()


     def initUI(self):


        #central widget
        self.theboard = Board(self)
        self.setCentralWidget(self.theboard)


          #dock1 Left Dock
        self.dockWdg1 = LeftDock(self)
        #Use SizeQWidget()  to define the initial size of QDockWidget
        self.content1 = SizeQWidget()
        self.dockWdg1.setWidget(self.content1)
        self.dockWdg1.setFeatures(self.dockWdg1.NoDockWidgetFeatures)
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dockWdg1)
        self.dockWdg1.setTitleBarWidget(self, QtGui.QWidget(0))# If I don't add QtGui in front of QWidget it don't know what is QWidget

        self.resize(360, 760)
        self.setWindowTitle('Test')
        self.show()



class LeftDock(QtGui.QDockWidget):

    def __init__(self, parent):
        super(LeftDock, self).__init__(parent)
        self.initLeftDock()


    def initLeftDock(self):

        self.setGeometry(300, 300, 200, 120)
        #self.setWindowTitle('LeftDock')




class Board(QtGui.QFrame):


    def __init__(self, parent):
        super(Board, self).__init__(parent)

        self.initBoard()

    def initBoard(self):

        print("ddd")


#Dummy QWidget used by QDockWidget for defining initial size.
class SizeQWidget(QtGui.QWidget):
       def sizeHint(self):
        return QtCore.QSize(100, 75)



def main():

    app = QtGui.QApplication([])
    mw = MainWin()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:3)

PyQt文档是从C ++文档自动创建的。我总是只使用C ++文档。

因此,文档的整体质量不是很好。

现在回到你的主要问题。

请注意,QtGui.QWidgetQObject*作为第一个参数(新创建的对象的父级)。另请注意,空指针在Python中由None表示,而不是0

然后我们需要知道self通常是通过在实例上调用方法来隐式传递的。 (PyQt上下文中的self就像你在Python中遇到的其他self一样。)

因此,这有效:

        self.dockWdg1.setTitleBarWidget(QtGui.QWidget(None))

我个人会这样做有点不同:

        self.dockWdg1.setTitleBarWidget(QtGui.QWidget(self.dockWdg1))

也就是说,将标题栏小部件的父级设置为停靠小部件本身,保留一个漂亮的对象层次结构。

我可能也会注意到"删除"停靠小部件的标题栏小部件,将其替换为不可见(大小为零)小部件,无法浮动停靠小部件

答案 1 :(得分:0)

我用它来将它们全部隐藏在c ++中

for (auto &dock:findChildren<QDockWidget*>())
  dock->setTitleBarWidget(new QWidget);