C ++: QGridLayout - пробел между виджетами - PullRequest
0 голосов
/ 10 ноября 2019

У меня в настоящее время есть проблема с QGridLayout.

enter image description here

Каждый квадрат является виджетом, и у меня есть такой цикл

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

QGridLayout является частью QFrame.

Мой вопрос: почему между каждым квадратом (по горизонтали) так много пробелов

Это код для квадрата

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush("#c56c00"));
painter.drawRect(0, 0, 30, 30);

Где моя проблема? Я хочу, чтобы каждая ячейка 1 на 1 без пробела между ними. Я не знаю, почему это правильно по вертикали. Я совершенно новичок в C ++ и Qt ..

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Попробуйте это:

#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);
    }
1 голос
/ 10 ноября 2019

Поскольку у вас есть фиксированные размеры виджетов (30x30), каждый виджет имеет размер 30x30 пикселей. Если ваш макет больше по горизонтали / вертикали, интервал увеличивается, чтобы обеспечить равномерное распределение.

Пример: Допустим, у вас есть кадр шириной 100 пикселей с 3 квадратами, выровненными по горизонтали. 3 раза 30 равняется 90, так что у вас осталось 10px. Так как макеты в целом стараются равномерно распределить выровненные компоненты, вы получите прибл. Интервал в 3 пикселя между каждым квадратом.

Вы должны либо поиграть с размером вашего QFrame (я полагаю, что это не фиксированный размер и увеличивается / уменьшается в размере при изменении его размера), либо избегать использования фиксированного размеравиджеты размера внутри него.

В общем, я бы рекомендовал либо придерживаться фиксированного размера для всех ваших компонентов, либо сделать дочерние элементы (здесь: квадраты) для правильного изменения размера.

PS: для задачипод рукой довольно легко привести минимальный рабочий пример. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...