我是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();
}
有谁知道我做错了什么?为什么不是所有这些标签都放在网格中? 或者,如果它们是 - 为什么网格不使用我所有的子类的可用空间?
干杯,
詹姆斯
答案 0 :(得分: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);
这应该是这样的:
答案 1 :(得分:0)
创建窗口小部件后,需要将它们添加到网格布局中。
请参阅QGridLayout的addWidget()方法。