0

我对 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();

}

有谁知道我做错了什么?为什么不是所有这些标签都被布置在一个网格中?或者,如果它们是 - 为什么网格不使用我所有子类的可用空间?

干杯,

詹姆士

4

2 回答 2

1

也许这个名字是骗人的,但 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);

应该是这样的:

在此处输入图像描述

于 2011-08-19T16:44:40.653 回答
0

创建小部件后,您需要将它们添加到网格布局中。

请参阅QGridLayout 的addWidget()方法。

于 2011-08-10T11:49:29.257 回答