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

Qt开发问题:QMainWindow内QLabel未按QBoxLayout垂直布局排列出现重叠

问题原因
  • QMainWindow 作为 Qt 框架的主窗口类,自带内置的布局结构,预留了中央控件区、菜单栏、状态栏、停靠栏等固定功能区域,不允许直接对 QMainWindow 本身调用 setLayout 方法设置顶层布局,你代码中编写的 setLayout(new QBoxLayout(QBoxLayout::TopToBottom)); 实际不会生效,两个 QLabel 没有被布局管理器正确管控位置,所以出现重叠。
  • 调用 layout() 方法获取到的也不是你自行创建的 QBoxLayout 实例,而是 QMainWindow 内置的专用布局,往该布局中添加控件自然不会按照你期望的纵向规则排列。
解决方案

正确的实现逻辑是先创建一个通用 QWidget 作为主窗口的中央控件,再把自定义布局设置给这个中央控件,最后将标签添加到该布局中即可,修改后的构造函数代码如下:

rasp4home::ui::MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    paletteSetup();

    mTime.setText("00.22");
    mTime2.setText("00.21232");

    // 创建中央控件并绑定到主窗口
    QWidget *centralWidget = new QWidget(this);
    setCentralWidget(centralWidget);
    // 布局设置给中央控件,而非主窗口本身
    QBoxLayout *mainLayout = new QBoxLayout(QBoxLayout::TopToBottom, centralWidget);

    mainLayout->addWidget(&mTime);
    mainLayout->addWidget(&mTime2);
}

paletteSetup 方法无需做任何改动,修改后运行程序两个标签就会按照纵向顺序依次排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:21:02