Qt4 自定义QWidget布局问题

Qt4 自定义QWidget布局问题,qt4,qt-creator,qwidget,Qt4,Qt Creator,Qwidget,我对QT还很陌生,我已经创建了我的第一个自定义QWidget子类……在我尝试向它添加一些标签之前,一切都很好。他们都挤到了顶角 这是我的密码: ARView::ARView(QWidget *parent, const char *name) { deviceLBL = new QLabel(this); targetLBL = new QLabel(this); deviceHeadingLBL = new QLabel(this); targetHeadingLBL = new QLa

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

有人知道我做错了什么吗?为什么不是所有这些标签都放在一个网格中? 或者,如果是,为什么网格没有使用我的子类的所有可用空间

干杯


James

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


请参阅QGridLayout的方法。

可能名称有误,但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 )
这些应该允许您将小部件放在网格中任何您想要的地方

因此,我在下面添加的代码将DeviceBL和TargetBL放在第一行,deviceHeadingLBL和TargetHeadingBL放在第二行,为了好玩,distanceLBL放在第三行,但占用了两列空间

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);
应该是这样的:


谢谢你的建议,我已经尝试过了,但结果是一样的。(我已经更新了我的原始帖子,以包含新代码)。使用行和列值。你没有使用它们。布局->添加小部件(DeviceBL,0,0);布局->添加小部件(targetBL,0,1);谢谢你的建议。我尝试了这个方法,但是这些值不是行值和列值。第一个是拉伸值,第二个是对齐值。请问设置行和列的正确方法是什么?