我正在开发一个
为了实现这一点,我使用了布局。但是,在将第二个小部件放入布局并将此布局应用于第一个小部件之后,第二个小部件仍然不会改变其大小,尽管第一个小部件会(调整主窗口大小时)。
我将第一个小部件的背景颜色设置为绿色,第二个小部件的背景颜色设置为红色,因此我希望得到的窗口完全是红色的,但实际上输出结果如下所示:
QMainWindow
应用程序,遇到了以下问题:我有一个QMainWindow
,它有一个centralWidget
作为QWidget
,而这个小部件又有另一个QWidget
作为子元素,应该完全填充第一个小部件(请参见下面的代码)。为了实现这一点,我使用了布局。但是,在将第二个小部件放入布局并将此布局应用于第一个小部件之后,第二个小部件仍然不会改变其大小,尽管第一个小部件会(调整主窗口大小时)。
我将第一个小部件的背景颜色设置为绿色,第二个小部件的背景颜色设置为红色,因此我希望得到的窗口完全是红色的,但实际上输出结果如下所示:
为了使第二个小部件填满第一个小部件并相应地调整大小,我需要做什么?
主窗口:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QGridLayout>
#include <QMainWindow>
#include <QWidget>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0) : QMainWindow(parent) {
QWidget *p = new QWidget(this); // first widget
p->setStyleSheet("QWidget { background: green; }");
this->setCentralWidget(p);
QWidget *c = new QWidget(p); // second widget
c->setStyleSheet("QWidget { background: red; }");
QGridLayout l;
l.addWidget(c, 0, 0, 1, 1);
p->setLayout(&l);
}
};
#endif // MAINWINDOW_H
GridLayout
本地变量并不会消失:毫不奇怪,小部件保留了对其自己布局的引用。如果使用C++,我会感到惊讶,这里是否有所不同。最重要的是addWidget
方法:子窗口只是其父窗口的子窗口是不够的,如果它要被此布局对象正确处理,它还必须添加到其父布局中。因此,我对这个解决方案感到困惑:对于从PyQt5角度来看的任何人来说,它都不适用... - mike rodent