Qt中的一个小部件被嵌套在另一个小部件中

5
我想要实现这种布局:enter image description here,其中Widget1是某个小部件(QMainWindow的中央小部件),我希望在其上添加第二个小部件Widget2,但它应该位于Widget1的左下角。
编辑: 我之前的描述不太有用,所以我将尝试更详细地描述它。
我继承QWidget类(class MyClass : public QWidget)并创建自己的小部件,在void MyClass ::paintEvent(QPaintEvent *event)中绘制屏幕上的内容。 MyClass 然后是我的 QMainWindow centralWidget
现在在此基础上,我想添加一个较小的小部件(图中的Widget2),我会在其中显示一些视频(我不是在问如何显示视频,而是如何将Widget2添加到我的视图中)。最重要的事情是Widget2在Widget1的内部(浮动)。 编辑2:我之前发布的代码是错误的。

1
“它似乎不起作用”并不是一个很好的问题描述。同时,我们需要更多的信息,最好提供更多的代码。您正在使用哪种布局?布局中还有什么其他内容?根据其他内容,您可能需要使用QGridLayout,尽管您也可以通过许多其他方式实现您想要的效果。您是在使用设计师还是在自己的代码中创建小部件? - hyde
你应该根据需求首先创建布局对象,参考此链接:http://doc.qt.io/qt-4.8/layout.html - Atul N
你能帮我检查一下我的编辑吗?我尽量更加精确了。 - carobnodrvo
1个回答

7
使用 QGridLayout 来设置小部件的位置:
QGridLayout* layout = new QGridLayout(this);
// 2x2 layout
QWidget* green = new QWidget(this);
green->setStyleSheet("background:green;");
QWidget* yellow = new QWidget(this);
yellow->setStyleSheet("background:yellow;");
QWidget* red = new QWidget(this);
red->setStyleSheet("background:red;");
QWidget* blue = new QWidget(this);
blue->setStyleSheet("background:blue;");
layout->addWidget(green, 0, 0); // Top-Left
layout->addWidget(yellow, 0, 1); // Top-Right
layout->addWidget(red, 1, 0); // Bottom-Left
layout->addWidget(blue, 1, 1); // Bottom-Right
ui->centralWidget->setLayout(layout);

将会得到如下的东西:

在这里输入图片描述

因此,使用QGridLayout自定义自己的小部件并设置其在其中的位置。

将另一个小部件设置为具有黑色背景的父级:

QGridLayout* layout = new QGridLayout(this);
// 2x2 layout
QWidget* green = new QWidget(this);
green->setStyleSheet("background:green;");
QWidget* yellow = new QWidget(this);
yellow->setStyleSheet("background:yellow;");
QWidget* red = new QWidget(this);
red->setStyleSheet("background:red;");
QWidget* blue = new QWidget(this);
blue->setStyleSheet("background:blue;");
layout->addWidget(green, 0, 0); // Top-Left
layout->addWidget(yellow, 0, 1); // Top-Right
layout->addWidget(red, 1, 0); // Bottom-Left
layout->addWidget(blue, 1, 1); // Bottom-Right

QWidget* mainWidget = new QWidget(this);
mainWidget->setStyleSheet("background:black;");
mainWidget->setLayout(layout);

QHBoxLayout* centralLayout = new QHBoxLayout(this);
centralLayout->addWidget(mainWidget);
ui->centralWidget->setLayout(centralLayout);

enter image description here


我试图实现的主要目标是,我有一个小部件(图像中的Widget1)和另一个小部件覆盖它(图像中的Widget2)。 - carobnodrvo
ui->centralWidget是您的主要小部件,其余部分在其上方。我添加了一个新示例,其中包含具有黑色背景的父小部件和其他小部件置于其上方。 - mohabouje
谢谢,这很有帮助。现在唯一的问题是我只有一个窗口小部件(例如左下角),它被拉伸到整个屏幕的宽度/高度,而且好像无法调整大小。您知道我该如何解决这个问题吗? - carobnodrvo
1
请查看 QSplitter 以使布局可调整大小 http://doc.qt.io/qt-5/qsplitter.html - mohabouje
4
同胞们,小心了!这篇文章是微软的宣传! - Mr. Developerdude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接