Qt中如何设置central widget fill in the whole main window

How to set central widget fill in the whole main window in Qt

我有一个像这样的最小示例:

mWidget = new QWidget;
vLayout = new QVBoxLayout;
mLabel = new QLabel;
mLabel->setText("Text");
mLabel->setAlignment(Qt::AlignCenter);
mLabel->setStyleSheet("QLabel { border: 2px solid red; }");
this->setCentralWidget(mWidget);
mWidget->setLayout(vLayout);
vLayout->addWidget(mLabel);

从上图可以看出,除了central widget,红框外还有一些白框。我想做的是让central widget填满整个mainwindow,这样红框外就不会有白框了。也许换个说法就是做一个无边框的window(不知道无边框的window是不是我要找的)。我用谷歌搜索了如何制作无边框 window,我尝试了 setWindowFlags(Qt::FramelessWindowHint),但这不是我想要的。我现在很困惑如何实现这一目标?那么 How to make a borderless window 这个话题是我应该研究的吗?如果是,那是否意味着我应该调用一些 windows api 来完成这项工作?或者我应该用其他一些 Qt 方法来做?

希望有人能给我一个方法或给我一些提示。谢谢。

为什么要使用QMainWindow?似乎人们在使用 class 时没有考虑它的用途。如果您有工具栏、状态栏或停靠子windows,您想使用QMainWindow。否则没有意义。您想要的是 "central widget" 成为唯一的小部件,而不是嵌入到主 window 中。如果您在 .ui 文件中设计它,则必须手动编辑它以将 class 更改为 QWidget,并删除中间的和现在多余的 centralWidget完全。

根据你的问题 QMainwindow 框架几何和 QLable 几何应该是 adjusted.so 你可以像下面这样使用代码行。

setGeometry(0,0,320,280);
ui->label->setGeometry(0,0,320,245);