Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 当窗口最大化时,QLayout中的QWidget被移动和剪切_Qt_Pyqt_Qt5_Pyqt5 - Fatal编程技术网

Qt 当窗口最大化时,QLayout中的QWidget被移动和剪切

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

有一个简单的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

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 10
Qt: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。