2011-08-10 147 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