0

私は 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();

}

私が間違っていることを誰かが知っていますか?これらのラベルのすべてがグリッドに配置されていないのはなぜですか? または、そうである場合、グリッドがサブクラスの使用可能なスペースをすべて使用していないのはなぜですか?

乾杯、

ジェームズ

4

2 に答える 2

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 )

これらにより、グリッド内の好きな場所にウィジェットを配置できるようになります。

したがって、以下に追加したコードは、1行目にdeviceLBLとtargetLBL、2行目に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);

これは次のようになります。

ここに画像の説明を入力してください

于 2011-08-19T16:44:40.653 に答える
0

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

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

于 2011-08-10T11:49:29.257 に答える