首页 > 解决方案 > QT:QLabels 不尊重边界

问题描述

我正在创建一个非常基本的 QT 应用程序,但遇到了以下问题:

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

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

    setLayout(new QBoxLayout(QBoxLayout::TopToBottom));

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

void rasp4home::ui::MainWindow::paletteSetup()
{
    setAutoFillBackground(true);
    auto palette = QApplication::palette();
    palette.setColor(QPalette::All, QPalette::Background, backgroundColor);
    palette.setColor(QPalette::All, QPalette::WindowText, textColor);

    setPalette(palette);
}

现在我希望这两个标签都从上到下有序显示,但我让它们彼此重叠。我究竟做错了什么?

在此处输入图像描述

标签: c++qt5

解决方案


您需要在主窗口中创建一个小部件并将其设置为centralWidget,并在此小部件中设置您的布局。

注意:这个例子是在 macOS 上完成的,所以它没有相同的命名空间。

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

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

        QBoxLayout* layout = new QBoxLayout(QBoxLayout::TopToBottom);

        layout->addWidget(&mTime);
        layout->addWidget(&mTime2);

        QWidget* mainWidget = new QWidget();

        mainWidget->setLayout(layout);

        // QMainWindow will free mainWidget when appropriate
        setCentralWidget(mainWidget);
}

在此处输入图像描述


推荐阅读