QWidget, добавленные в макет сетки, размещаются так, как если бы это был вертикальный макет. - PullRequest
0 голосов
/ 06 февраля 2020

Я создаю приложение, которое включает в себя область прокрутки, которая начинается пустой. Затем неограниченное количество различных виджетов может быть включено по запросу пользователя. Поскольку виджеты не большие, я бы хотел, чтобы они были размещены в сетке, организованной в строки и столбцы. В идеале, строки должны быть заполнены справа налево, сверху вниз.

Я бы хотел, чтобы они были размещены, как на изображении ниже, где цифры указывают порядок, в котором они добавляются:

enter image description here

Однако я получаю следующее:

enter image description here

Я делаю следующее:

  1. В файле пользовательского интерфейса у меня есть область прокрутки, которая включает в себя макет сетки, с этой настройкой: enter image description here

  2. В коде я добавляю виджеты. Я на самом деле использую свои собственные классы виджетов, но процедура следующая:

    QWidget *w1 = new QWidget(this);
    ui->layout_output_grid->addWidget(w1);
    QWidget *w2 = new QWidget(this);
    ui->layout_output_grid->addWidget(w2);
    QWidget *w3 = new QWidget(this);
    ui->layout_output_grid->addWidget(w3);
    QWidget *w4 = new QWidget(this);
    ui->layout_output_grid->addWidget(w4);
    QWidget *w5 = new QWidget(this);
    ui->layout_output_grid->addWidget(w5);
    

Вопрос

Есть ли способ сделать это ? В качестве обходного пути я предполагаю, что мог бы вести подсчет добавленных виджетов и реализовывать строки как различные горизонтальные макеты, но я хотел бы знать, есть ли решение, позволяющее Qt размещать виджеты так, как я хочу? *

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете указать, какую строку, столбец и строку / столбец строки должен занимать виджет, который вы хотите добавить (1,2,3,4,5).

Искать эту перегруженную функцию: https://doc.qt.io/archives/qt-4.8/qgridlayout.html#addWidget -2

В этом случае вы должны сделать что-то вроде этого:

QWidget *w1 = new QWidget(this);
ui->layout_output_grid->addWidget(w1, 0, 0, 1, 1);
QWidget *w2 = new QWidget(this);
ui->layout_output_grid->addWidget(w2, 0, 1, 1, 2);
QWidget *w3 = new QWidget(this);
ui->layout_output_grid->addWidget(w3, 1, 0, 1, 1);
QWidget *w4 = new QWidget(this);
ui->layout_output_grid->addWidget(w4, 1, 1, 1, 1);
QWidget *w5 = new QWidget(this);
ui->layout_output_grid->addWidget(w5, 1, 2, 1, 1);
...