2011-08-10 159 views
0

我对QT非常陌生,我做了我的第一个自定义QWidget子类......它一切正常,直到我尝试向它添加一些标签为止。他们都被压在了角落里。自定义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(); 

}

有谁知道我做错了吗?为什么不是所有这些标签都放在网格中? 或者,如果他们是 - 为什么不是网格使用我的所有可用空间?

干杯,

詹姆斯

回答

0

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

请参阅addWidget() QGridLayout的方法。

+0

感谢您的建议,我已经试过,但结果是一样的。 (我已更新我的原始帖子以包含新代码)。 – James

+0

使用行和列值。你没有使用它们。布图设计> addWidget(deviceLBL,0,0);布图设计> addWidget(targetLBL,0,1);等等。 –

+0

感谢您的建议。我试过这个,但是这些值不是行和列的值。第一个是拉伸值,第二个是对齐值。请设置行和列的正确方法是什么? – James

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) 

这些应该让你把你的小工具,无论你在网格中想要的。

所以我在下面添加的代码会将d​​eviceLBL和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