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
相关产品推荐
相关产品推荐

