You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中如何让Central Widget填满整个主窗口

解决Qt主窗口Central Widget白色边距问题

嘿,这个问题我之前也碰到过,其实根本不用折腾无边框窗口或者Windows API,Qt本身就有很简单的解决办法!

你看到的红色边框外的白色边距,本质是两个地方的默认设置导致的:

  • QMainWindow本身会给central widget预留一圈内容边距
  • 你用的QVBoxLayout默认也有内部边距

直接调整这两个地方的参数就能完美解决,给你修改后的代码示例:

mWidget = new QWidget;
vLayout = new QVBoxLayout;
mLabel = new QLabel;

mLabel->setText("Text");
mLabel->setAlignment(Qt::AlignCenter);
mLabel->setStyleSheet("QLabel { border: 2px solid red; }");

// 关键1:消除主窗口与central widget之间的边距
this->setContentsMargins(0, 0, 0, 0);

this->setCentralWidget(mWidget);

// 关键2:消除布局的内部边距和控件间距
vLayout->setContentsMargins(0, 0, 0, 0);
vLayout->setSpacing(0);

mWidget->setLayout(vLayout);
vLayout->addWidget(mLabel);

具体说明:

  • setContentsMargins(0,0,0,0):这是给QMainWindow设置的,它控制着窗口内容区域(也就是central widget所在的区域)和窗口边框、标题栏之间的距离,默认值是几个像素,设为0就能让central widget完全填满窗口的内容区域。
  • 布局的setContentsMargins和setSpacing:前者消除布局内部的边距,后者消除布局内控件之间的空隙,这里因为只有一个Label,主要是消除布局和mWidget之间的边距。

这样修改后,你的红色边框Label就会紧贴窗口的内容区域边缘,完全消除那些白色边距,而且还能保留正常的窗口标题栏和边框,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Theodore Tang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:36:18