пользовательские проблемы с макетом QWidget - PullRequest
0 голосов
/ 10 августа 2011

Я довольно новичок в QT, и я создал свой первый подкласс QWidget ... все это работает хорошо, пока я не попытаюсь добавить к нему несколько меток. Все они раздавлены в верхнем углу.

Вот мой код:

   ARView::ARView(QWidget *parent, const char *name) {
deviceLBL = new QLabel(this);
targetLBL = new QLabel(this);
deviceHeadingLBL = new QLabel(this);
targetHeadingLBL = new QLabel(this);
distanceLBL = new QLabel(this);

QVBoxLayout *layout = new QVBoxLayout();

layout->addWidget(deviceLBL);
layout->addWidget(targetLBL);
layout->addWidget(deviceHeadingLBL);
layout->addWidget(targetHeadingLBL);
layout->addWidget(distanceLBL);

this->setLayout(layout);

this->setupLocationUpdates();

}

Кто-нибудь знает, что я делаю не так? Почему не все эти ярлыки размещены в сетке? Или, если они - почему сетка не использует все доступное пространство моего подкласса?

Приветствия

Джеймс

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Возможно, имя обманчиво, но QVBoxLayout - это не сетка. Это вертикальный макет коробки. Это означает, что предполагается размещать ваши элементы сверху вниз в порядке их добавления.

Так что вы на самом деле хотите QGridLayout. Если вы посмотрите документацию для этого типа макета, вы увидите следующие функции:

void    addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )
void    addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )

Это должно позволить вам размещать ваши виджеты в любом месте в сетке.

Таким образом, код, который я добавил ниже, поместит deviceLBL и targetLBL в первой строке, deviceHeadingLBL и targetHeadingLBL во второй строке, и просто для удовольствия, distanceLBL в третьей строке, но занимая 2 столбца места.

QGridLayout *layout = new QGridLayout ();

layout->addWidget(deviceLBL, 0, 0);
layout->addWidget(targetLBL, 0, 1);
layout->addWidget(deviceHeadingLBL, 1, 0);
layout->addWidget(targetHeadingLBL, 1, 1);
layout->addWidget(distanceLBL, 2, 0, 1, 2);

Что должно выглядеть так:

enter image description here

0 голосов
/ 10 августа 2011

После того, как вы создадите свои виджеты, вам нужно добавить их в сетку.

См. addWidget () метод QGridLayout.

...