gpt4 book ai didi

layout - Qt4:隐藏次要小部件,同时保持中央小部件的大小

转载 作者:行者123 更新时间:2023-12-01 05:28:21 25 4
gpt4 key购买 nike

我有一个带有主要“显示”小部件的 QMainWindow 和几个小部件。我希望能够在鼠标进入或离开窗口时打开/关闭小部件。

我可以通过实现 enterEvent 来实现这个基本功能。和 leaveEvent调用显示/隐藏不必要的小部件。然而,Qt4 的默认行为是保持 QMainWindow 几何形状固定,并调整重要小部件的大小。我宁愿保持这个小部件的几何形状,并根据需要移动/调整 QMainWindow 的大小。这可能吗?

这是 PyQt4 中的一个简化示例

from PyQt4.QtGui import *
from PyQt4.QtCore import *

app = QApplication([''])

class MyWidget(QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)

layout = QVBoxLayout()
self.setLayout(layout)
self.main = QPushButton("major")
self.main.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.minor = QPushButton("minor")
layout.addWidget(self.main)
layout.addWidget(self.minor)

def enterEvent(self, event):
self.minor.show()

def leaveEvent(self, event):
self.minor.hide()

mw = QMainWindow()
mw.setCentralWidget(MyWidget())
mw.show()

app.exec_()

我希望 MyWidget 的边界更改为环绕此按钮,而不是“主要”按钮的增长/缩小。

最佳答案

我在 Mac OS X 上用 PySide 破解了你的例子。
经过一段时间的尝试,我找到了以下解决方案:

from PySide.QtGui import *
from PySide.QtCore import *

app = QApplication([''])

class MyWidget(QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)

layout = QVBoxLayout()
self.setLayout(layout)
self.main = QPushButton("major")
self.main.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.minor = QPushButton("minor")
layout.addWidget(self.main)
layout.addWidget(self.minor)

def resizeEvent(self, event):
self.appendix = self.minor.frameGeometry().height() + 2
if self.minor.isVisible():
self.varheight = mw.height() - self.appendix
else:
self.varheight = mw.height()

def enterEvent(self, event):
self.minor.show()
mw.resize(mw.width(), self.varheight + self.appendix)

def leaveEvent(self, event):
self.minor.hide()
mw.resize(mw.width(), self.varheight)

mw = QMainWindow()
mw.setCentralWidget(MyWidget())
mw.show()

app.exec_()

这并不完美,因为初始状态不检查鼠标位置。
此外,神奇的“+ 2”应该可以从其他一些指标中计算出来
小部件几何。但是对于示例来说应该没问题。

这个实现需要几个小时才能正确。确保
所有计算都处于固定状态。否则布局引擎会产生
难以理解结果甚至无限循环。
resizeEvent从小部件大小中获取正确的值,但仅此而已。 enterEventleaveEvent然后使用这些值并调整大小。

我的变量没有初始化。你可以这样做,但第一次调整大小比我们的其他事件来得更早。

关于layout - Qt4:隐藏次要小部件,同时保持中央小部件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12752566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com