Qt 当窗口最大化时,QLayout中的QWidget被移动和剪切
有一个简单的GUI:主窗口和一个默认的中心小部件。将布局添加到其中,然后将感兴趣的小部件放置到布局中Qt 当窗口最大化时,QLayout中的QWidget被移动和剪切,qt,pyqt,qt5,pyqt5,Qt,Pyqt,Qt5,Pyqt5,有一个简单的GUI:主窗口和一个默认的中心小部件。将布局添加到其中,然后将感兴趣的小部件放置到布局中 import sys from matplotlib.backends.backend_qt5agg import FigureCanvas from matplotlib.figure import Figure from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.uic import loadUiType F
import sys
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.uic import loadUiType
FormClass, QtBaseClass = loadUiType('main_window.ui')
class MainWindow(FormClass, QtBaseClass):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.fig = Figure(facecolor='yellow', edgecolor='red', linewidth=0.1)
self.canvas = FigureCanvas(self.fig)
hbox_layout = QtWidgets.QHBoxLayout(self.centralwidget)
hbox_layout.addWidget(self.canvas, stretch=2)
app = QtWidgets.QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
main_window.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1024</width>
<height>768</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1024</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
主窗口
0
0
1024
768
主窗口
0
0
1024
21
当主窗口未最大化时,一切看起来都很好:
整个小部件是可见的(注意一个红色边框,它是用来监视小部件的边缘的)
但如果我们最大化主窗口,就会发生以下情况:
看起来小部件向上移动,小部件的上边框消失,而在底部边缘下出现一条黑线
我用HBox/VBox/Grid布局对它进行了测试,结果总是一样的。如果列中只有一个小部件,就会发生这种情况。如果我们在列中再添加一个小部件,两个小部件都将完全可见
为什么会发生这种情况以及如何修复这种行为?我们不应该在布局中的列中有一个小部件吗
操作系统:Windows 10Qt:5.6.2
PyQt:5.6.0我刚刚通过创建一个新的QtWidgets应用程序对其进行了检查,但问题并不存在。为了绘制小部件,我使用Qt样式表,如下所示:
QWidget {
border: 1px solid red;
background-color: yellow;
}
当应用程序运行时,它甚至显示最大化(见下文)。重新评估用于绘制小部件的方法。可以使用设计器中的“样式表”属性更改样式表。
另见:
谢谢你的回答,但我不确定这是一个相关的比较。你在Linux上,我在Windows上。平台差异应发挥重要作用。不管怎样,您使用的是什么确切的Qt版本?我的行为可能是特定于版本的。@wombatonfire我已经在Windows中用这个答案中提到的样式表测试了一个最小的示例,并且它工作正常。Qt5.10.0,VS 2017,32位。我使用Qt5.11.0在Windows 10上进行了测试。看起来和Linux一样好。您应该升级到最新的Qt版本。如果两个都是QT5,它们兼容,不管怎样,你应该能够重新编译你的应用程序而不需要对源代码进行修改。这可能是个bug,但是你需要一个完整的复制案例,在C++中,提交一个bug报告。你也需要一个这样的问题才能成为一个有效的问题(当然可能是在PyQt中)。同意,在这里回答一个没有代码的问题可能很奇怪,但它是如此的基本和地狱般的世界,以至于我很难想象代码本身会如何影响巴哈维奥。无论如何,我已经更新了问题。有人能复制吗?@wombatonfire我认为这是一个bug,报告它,但另一方面,您使用的是一个旧版本的Qt和PyQt,两个库的当前版本都是5.11,最新的LTS版本是5.9。我目前与Anaconda发行版绑定。Qt5.6是那里支持的最新版本,它似乎也是一个活动的LTS版本。谢谢大家的评论,我报告了一个bug。