2014-10-06 192 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