将QToolButton附加到父QWidget的右下角
我面临着这个问题,作为一个Qt noob,我无法解决它 基本上,我实例化了一个将QToolButton附加到父QWidget的右下角,qt,pyqt,Qt,Pyqt,我面临着这个问题,作为一个Qt noob,我无法解决它 基本上,我实例化了一个QToolButton,并将其作为QTreeWidget的父对象。QTreeWidget位于垂直布局内,当我尝试使用QTreeWidget.size()更改QTreeWidget内工具按钮的位置时,它会给出非常意外和错误的结果 有人能帮我吗?我将非常感谢您的帮助。谢谢 您还没有发布任何实际操作的示例,但下面是如何将按钮附加到树小部件的右下角: 编辑:在看到您想要在树上合成小部件后,我已经替换了我的答案 使用事件过滤器
QToolButton
,并将其作为QTreeWidget
的父对象。QTreeWidget
位于垂直布局内,当我尝试使用QTreeWidget.size()
更改QTreeWidget
内工具按钮的位置时,它会给出非常意外和错误的结果
有人能帮我吗?我将非常感谢您的帮助。谢谢 您还没有发布任何实际操作的示例,但下面是如何将按钮附加到树小部件的右下角: 编辑:在看到您想要在树上合成小部件后,我已经替换了我的答案 使用事件过滤器 该按钮只是树的父级,我们在树上安装事件过滤器以捕获调整大小事件。调整树的大小后,我们将取其大小,减去按钮的大小,然后移动按钮 使用构图 我认为更有效的方法是对QTreeWidget进行子类化,将QToolButton作为成员组合,然后在本地重载
resizeEvent()
来处理resize。首先,这会使行为处理成为TreeWidget的本地处理,这会更干净。此外,我相信它减少了EventFilter添加到主窗口的开销。eventFiler将是一个python可调用程序,它会被多次调用,因为它处理对象的每个事件。而TreeWidget的local 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())
你能描述一下结果应该是什么样的吗?按钮是否应始终位于QTreeWidget的左上角?首先,很抱歉标题错误。这不是一个QDockWidget,而是一个QToolButton。我希望一个按钮始终位于树小部件的右下角。在调整窗口大小后,我将应用事件过滤器对其进行相应的定位。但由于我的树小部件位于垂直布局内,因此查询树小部件的大小并不能给出正确的结果。所以我无法相应地移动我的按钮。谢谢:)很抱歉我自己没有这样做。但是,有没有办法把它放在那里呢?你能用
size()
发布你尝试过的代码吗?您是如何处理调整大小事件的?我知道的方法是对要处理并覆盖此事件的小部件进行子分类(resizeEvent(…)
),我认为OP希望树小部件上的按钮(位于右下角),而不是在下面。@Avaris:谢谢您指出这一点。将我的示例替换为在右下角的树小部件上放置按钮的示例。
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())