我找不到如何隐藏 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.
Run Code Online (Sandbox Code Playgroud)
这在很多地方:
dockWidget->setTitleBarWidget(new QWidget());
Run Code Online (Sandbox Code Playgroud)
但如何实际使用它们?我根本找不到任何简单的代码示例,即使在参考文献中也没有显示那些正在运行的代码,而且我所有的尝试都以各种错误告终。在整个页面中:http : //pyqt.sourceforge.net/Docs/PyQt4/qdockwidget.html#setTitleBarWidget没有什么可以告诉我如何使用它:
QDockWidget.setTitleBarWidget (self, QWidget widget)
Run Code Online (Sandbox Code Playgroud)
如果我阅读文档,我应该用 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
Run Code Online (Sandbox Code Playgroud)
给我这个错误:
TypeError: QWidget(QWidget parent=None, Qt.WindowFlags flags=0): argument 1 has unexpected type 'int'
Run Code Online (Sandbox Code Playgroud)
另一个问题,实际上是否有人使用此引用:?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()
Run Code Online (Sandbox Code Playgroud)
PyQt 文档是从 C++ 文档自动创建的。我总是只使用 C++ 文档。
因此,这些文档的整体质量不是很好。
现在到你手头的主要问题。
请注意,QtGui.QWidget将 aQObject*作为第一个参数(新创建对象的父对象)。另请注意,空指针在 Python 中表示为None,而不是0。
然后我们需要知道,self通常是通过在实例上调用方法来隐式传递的。(self在 PyQt 的上下文中,就像self您在 Python 中遇到的所有其他上下文一样)。
因此,这有效:
self.dockWdg1.setTitleBarWidget(QtGui.QWidget(None))
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我会这样做有点不同:
self.dockWdg1.setTitleBarWidget(QtGui.QWidget(self.dockWdg1))
Run Code Online (Sandbox Code Playgroud)
也就是说,将标题栏小部件的父级设置为停靠小部件本身,从而保留了良好的对象层次结构。
我还可能会说,通过用不可见的(大小为零)小部件替换它来“删除”停靠小部件的标题栏小部件,浮动停靠小部件变得不可能。
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |