我面临这个问题,作为一个 Qt 菜鸟我无法解决它。
基本上,我实例化了 aQToolButton
并将其作为QTreeWidget
. 这QTreeWidget
是在垂直布局中,当我尝试更改使用中工具按钮的位置时,QTreeWidget
它QTreeWidget.size()
给了我非常意想不到和错误的结果。
谁能帮我这个?将深深感谢您的帮助。谢谢!
您还没有发布任何实际操作的示例,但这里是如何将按钮附加到树小部件的右下角:
编辑:看到你想在树上合成小部件后,我已经替换了我的答案
from PyQt4 import QtCore, QtGui
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.resize(640,480)
self.layout = QtGui.QVBoxLayout(self)
self.layout.setSpacing(0)
self.tree = QtGui.QTreeWidget(self)
self.tree.installEventFilter(self)
self.layout.addWidget(self.tree)
self.button = QtGui.QToolButton(self.tree)
self.button.setText("FOO")
self.button.setMinimumSize(100, 30)
def eventFilter(self, obj, event):
if obj is self.tree and event.type() == event.Resize:
self.alignTreeButton()
return False
def alignTreeButton(self):
padding = QtCore.QSize(5,5) # optional
newSize = self.tree.size() - self.button.size() - padding
self.button.move(newSize.width(), newSize.height())
if __name__ == "__main__":
app = QtGui.QApplication([])
w = Widget()
w.show()
w.raise_()
app.exec_()
该按钮只是树的父级,我们在树上安装事件过滤器以捕获调整大小事件。调整树的大小后,我们获取它的大小,减去按钮的大小,然后移动按钮。
我相信实际上将 QTreeWidget 子类化,将其与 QToolButton 作为成员组合,然后在resizeEvent()
本地重载以处理调整大小会更有效。首先,这使得 TreeWidget 的行为处理本地化,这样更干净。此外,我相信它可以减少 EventFilter 将添加到您的主窗口的开销。eventFiler 将是一个可调用多次的 python 可调用对象,因为它处理对象的每个事件。而 TreeWidget 的本地 resizeEvent() 仅在调整大小期间调用。
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.resize(640,480)
self.layout = QtGui.QVBoxLayout(self)
self.layout.setSpacing(0)
self.tree = TreeWidget(self)
self.layout.addWidget(self.tree)
class TreeWidget(QtGui.QTreeWidget):
def __init__(self, *args, **kwargs):
super(TreeWidget, self).__init__(*args, **kwargs)
self.button = QtGui.QToolButton(self)
self.button.setText("FOO")
self.button.setMinimumSize(100, 30)
def resizeEvent(self, event):
super(TreeWidget, self).resizeEvent(event)
self.alignTreeButton()
def alignTreeButton(self):
padding = QtCore.QSize(5,5) # optional
newSize = self.size() - self.button.size() - padding
self.button.move(newSize.width(), newSize.height())