2013-05-01 10 views
5

QPushButtonという小さな文をQVBoxLayoutのように挿入しました。私のメインウィンドウは、ユーザーのデスクトップの70%です。ラベルがQVBoxLayout内で垂直方向に拡大されます

私の問題は、私のラベルが親ウィンドウの高さの約80%に拡大し、QLineEditと `QButton \は底部に絞り込まれています。

私はこれを解決する方法を考え出しました:コンテンツを持たないラベルをさらに挿入しましたが、これは金色の解決策ではありません。私に何ができる?

私もQFormLayoutを試しましたが、私のニーズに合っていません。私はウィジェットが垂直な順序であるのが好きです。私はQSizePolicyで多くの方法を試しましたが、うまくいきませんでした。

答えて

7

あなたが探しているのは、スペーサーアイテムを追加することだと思います。すべてのウィジェットを追加したら、レイアウトにaddStretchを使ってみてください。

例:

#include <QtGui> 

class W: public QWidget 
{ 
    Q_OBJECT 

    public: 
     W(bool spacer, QWidget *parent = 0) 
      : QWidget(parent) 
     { 
      QLabel *l = new QLabel("Hello!"); 
      QLineEdit *e = new QLineEdit; 
      QPushButton *p = new QPushButton("Go"); 

      QVBoxLayout *vl = new QVBoxLayout; 
      vl->addWidget(l); 
      vl->addWidget(e); 
      vl->addWidget(p); 

      if (spacer) 
       vl->addStretch(); 

      setLayout(vl); 

      resize(200, 400); 
     } 
}; 

はレンダリング:

enter image description here

(。左側にはストレッチ、右側にストレッチ)

+0

はあなたに感謝し、私が探していたまさに厥: )私はこれを試します;)しかし、(スペーサー)が意味する場合は何ですか? – dadod2

+0

それは私がそこに2つを簡単に表示できるようにするコンストラクタの単なるパラメータです。 (つまり、左側のウィンドウは 'new W(false);'のようにsthで作成され、 'new W(true);'で右側に作成されたウィンドウです)このデモ用です。 – Mat

+0

ああ大丈夫よ、それはうまく動作しますありがとう – dadod2

関連する問題