2014-10-06 382 views
0

我找不到如何隐藏我的Qdockwidgets的标题栏:在不少地方QDockWidget隐藏标题栏

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取代“widget”的一个,所以我得到显示没有标题栏

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

我的问题似乎很奇怪,但我发现放入系统引用,以便不完整(无代码示例),并解释这样掩盖我真的不知道,如果我找对正确的,尤其是当在另一侧,我们有这样的:http://srinikom.github.io/pyside-docs/PySide/QtGui/QDockWidget.html#PySide.QtGui.QDockWidget与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() 

回答

3

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

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

现在到您的主要问题。

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

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

因此,这个工程:

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

个人而言,我会做一点点不同:

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

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

我也可能会说,通过用“不可见”(大小为零)小部件替换它来“移除”小部件的标题栏小部件无法浮动小部件

+0

我明白了,所以你使用原始的C++文档...为python ...?你有C++背景吗?我承认我还没有认真对待C++,我没有认为它足够接近python的用处,下次我肯定会看看! 我对python很陌生,因为你可能已经看到了,所以如果文档说“在这里放一个0”,这正是我正在做的,现在我将通过“0”知道文档想要说“null”这意味着在Python中“无”......谢谢! 我不想浮动dockwidgets我只是使用一个mainWindow组织不同的静态面板彼此相邻:)非常感谢! – 2014-10-06 21:42:43

+0

虽然我收到警告消息:QWidget :: setMinimumSize:(/ QDockWidget)负值(0,-1)是不可能的。除了这个警告之外,这一切都运行良好。 – 2014-10-06 21:47:33

+0

是的,但知道写C++是没有必要的。由于API约为99.9%,因此它主要是查找函数名称及其参数,而这些函数名称和参数通常不会深入了解C++。 – dom0 2014-10-07 08:30:23