QT 4.8 QMainWindow中的填充问题

5
我开始学习QT。当我创建一个MainWindow并在其中放置一些小部件时,窗口边缘和小部件之间存在间隙,如下图所示: enter image description here 我该如何关闭这些间隙?
我尝试使用layout()->setContentsMargins(0,0,0,0);和编辑窗口的样式表,但没有效果。我该怎么办?
1个回答

6
一个与或略有不同,它具有“中央小部件”的概念。窗口预定义了处理工具栏、菜单和停靠区域的区域,并将中央小部件定义为窗口的主要内容。窗口本身通常不会被赋予布局。但我认为您正在设置窗口布局上的值(这将没有任何效果)。
您设置为中央小部件的小部件很可能有自己的布局。默认情况下,中央小部件已经可以扩展到边缘。先考虑以下示例:
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QListWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMainWindow *window = new QMainWindow;
    window->resize(800,600);

    QListWidget *listWidget = new QListWidget;
    window->setCentralWidget(listWidget);

    window->show();

    return a.exec();
}

您将看到列表小部件完全展开到边缘。但在更现实的例子中:

#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QListWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMainWindow *window = new QMainWindow;
    window->resize(800,600);

    QWidget *central = new QWidget;
    QListWidget *listWidget = new QListWidget;

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(listWidget);

    //Uncomment this following line to remove margins
    //layout->setContentsMargins(0,0,0,0);

    central->setLayout(layout);

    window->setCentralWidget(central);

    window->show();

    return a.exec();
}

您有一个容器小部件,然后与布局和列表小部件组合。这个中央小部件的布局是引入边距的那一个。

那么我们如何去掉这些边距呢? - PTBG
@PTBG:只需取消注释设置布局内容边距为0的那一行。就在那里。 - jdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接