Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:QGridLayout-小部件之间的空白_C++_Qt - Fatal编程技术网

C++ C++;:QGridLayout-小部件之间的空白

C++ C++;:QGridLayout-小部件之间的空白,c++,qt,C++,Qt,我目前有一个QGridLayout的问题 每个方块都是一个小部件,我有一个这样的循环 for(int i = 0; i < 100; i++;) { ui->layout->addWidget(new Square(this),rowNr,colNr); } 我的问题在哪里?我希望每个单元格之间没有任何空间。我不知道为什么它是垂直正确的。。我完全陌生的C++和Qt… 因为您有固定大小的小部件(30x30),所以每个小部件正好是30x30像素。如果布局在水平/垂直方向上

我目前有一个QGridLayout的问题

每个方块都是一个小部件,我有一个这样的循环

for(int i = 0; i < 100; i++;)
{
   ui->layout->addWidget(new Square(this),rowNr,colNr);
}

我的问题在哪里?我希望每个单元格之间没有任何空间。我不知道为什么它是垂直正确的。。我完全陌生的C++和Qt… 因为您有固定大小的小部件(30x30),所以每个小部件正好是30x30像素。如果布局在水平/垂直方向上更大,则会增加间距以允许均匀分布

示例: 假设您有一个宽度为100px的框架,其中3个正方形水平对齐。3乘以30等于90,剩下10像素。由于布局通常试图均匀分布其对齐的组件,因此每个正方形之间的间距约为3倍

您要么必须调整
QFrame
的大小(我猜它不是固定大小,调整大小时大小会增加/减少),要么避免在其中使用固定大小的小部件

一般来说,我建议您要么坚持所有组件的固定大小,要么让子组件(此处:正方形)正确调整大小


PS:对于手头的任务,很容易提供一个最小的工作示例

因为您有固定大小的小部件(30x30),所以每个小部件正好是30x30像素。如果布局在水平/垂直方向上更大,则会增加间距以允许均匀分布

示例: 假设您有一个宽度为100px的框架,其中3个正方形水平对齐。3乘以30等于90,剩下10像素。由于布局通常试图均匀分布其对齐的组件,因此每个正方形之间的间距约为3倍

您要么必须调整
QFrame
的大小(我猜它不是固定大小,调整大小时大小会增加/减少),要么避免在其中使用固定大小的小部件

一般来说,我建议您要么坚持所有组件的固定大小,要么让子组件(此处:正方形)正确调整大小

PS:对于手头的任务,很容易提供一个最小的工作示例

试试看:

#include "mainwindow.h"
#include <QGridLayout>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        resize(800, 800);

        auto widget = new QWidget(this);
        setCentralWidget(widget);

        auto gl = new QGridLayout(widget);
        gl->setSpacing(0);
        gl->setAlignment(Qt::AlignTop | Qt::AlignLeft);
        widget->setLayout(gl);

        for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++)
            gl->addWidget(new QPushButton(QString::number(i*10 + j), this), i, j);
    }
#包括“mainwindow.h”
#包括
#包括
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
{
调整大小(800800);
自动小部件=新的QWidget(本);
setCentralWidget(小部件);
auto gl=新的QGridLayout(小部件);
gl->setspace(0);
gl->setAlignment(Qt::AlignTop | Qt::AlignLeft);
小部件->设置布局(gl);
对于(int i=0;i<10;i++)
对于(int j=0;j<10;j++)
gl->addWidget(新的QPushButton(QString::number(i*10+j),this),i,j);
}
试试看:

#include "mainwindow.h"
#include <QGridLayout>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        resize(800, 800);

        auto widget = new QWidget(this);
        setCentralWidget(widget);

        auto gl = new QGridLayout(widget);
        gl->setSpacing(0);
        gl->setAlignment(Qt::AlignTop | Qt::AlignLeft);
        widget->setLayout(gl);

        for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++)
            gl->addWidget(new QPushButton(QString::number(i*10 + j), this), i, j);
    }
#包括“mainwindow.h”
#包括
#包括
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
{
调整大小(800800);
自动小部件=新的QWidget(本);
setCentralWidget(小部件);
auto gl=新的QGridLayout(小部件);
gl->setspace(0);
gl->setAlignment(Qt::AlignTop | Qt::AlignLeft);
小部件->设置布局(gl);
对于(int i=0;i<10;i++)
对于(int j=0;j<10;j++)
gl->addWidget(新的QPushButton(QString::number(i*10+j),this),i,j);
}

QGridLayout自动分割其父布局的空间,以正确地用单元格覆盖。有关更改此类间距的属性和方法,请参阅。如果有帮助,请告诉我。你需要在某个地方有空的空间。哪里恰到好处吗?还是各方面都平等?在任何情况下,都需要添加具有扩展大小策略的间隔符。如果你想集中这个,我会创建3x3qGrdDead,你的当前布局将被插入中间,然后在上面、下面、左边和右边添加适当的大小策略的4个空QWIDGET。有点像棋盘。但不是固定的(例如10x10字段),它应该是可变的,如5x5或25x25等。我如何才能做到这一点。QT文档。真正让人困惑的是,QGridLayout自动划分其父布局的空间,以正确地用单元格覆盖它。有关更改此类间距的属性和方法,请参阅。如果有帮助,请告诉我。你需要在某个地方有空的空间。哪里恰到好处吗?还是各方面都平等?在任何情况下,都需要添加具有扩展大小策略的间隔符。如果你想集中这个,我会创建3x3qGrdDead,你的当前布局将被插入中间,然后在上面、下面、左边和右边添加适当的大小策略的4个空QWIDGET。有点像棋盘。但不是固定的(例如10x10字段),它应该是可变的,如5x5或25x25等。我如何才能做到这一点。QT文档。我真的搞糊涂了,我明白你的意思了。那么QGridLayout会自动填充其父对象的整个空间(在我的例子中是框架)?我的任务是动态地实现这一点,以便用户可以更改显示的方块数量。它就像一个10x10场的游戏,或者20x20场的游戏,所以固定大小是我的解决方案?我怎样才能做到这一点?医生。从Qt开始我有点困惑如果你只是想要正方形为什么不让它们调整大小?因为它是一个小部件,所以可以使用大小策略来占用尽可能多的空间。对所有方块都这样做,你的格子将被填满,中间没有任何空白。好的,我明白你的意思了。那么QGridLayout会自动填充其父对象的整个空间(在我的例子中是框架)?我的任务是动态地实现这一点,以便用户可以更改显示的方块数量。它就像一个10x10场的游戏,或者20x20场的游戏,所以固定大小是我的解决方案?我怎样才能做到这一点?医生。从Qt开始我有点困惑如果你只是想要正方形为什么不让它们调整大小?s