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

あなたのウィジェットを作成した後は、グリッドレイアウトに追加する必要があります。

QGridLayoutのaddWidget()メソッドを参照してください。

+0

の提案のためのおかげで、私はこれを試してみたが、結果は同じです。 (元の投稿を更新して新しいコードを追加しました)。 – James

+0

行と列の値を使用します。あなたはそれらを使用していません。レイアウト - > addWidget(deviceLBL、0,0);レイアウト - > addWidget(targetLBL、0,1); –

+0

提案していただきありがとうございます。私はこれを試しましたが、値は行と列の値ではありません。最初の値はストレッチ値で、2番目の値はアラインメント値です。行と列を設定する正しい方法は何ですか? – 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) 

したがって、私が下に追加したコードは、2行目のdeviceLBLとtargetLBLを1行目、deviceHeadingLBL、targetHeadingLBLに置き、3行目の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