2013-05-01 45 views
5

Tôi đã chèn QLabel với một câu nhỏ, QLineEdit và một số QPushButton, theo thứ tự này, vào một số QVBoxLayout. Cửa sổ chính của tôi là 70% máy tính để bàn của người dùng.Nhãn mở rộng theo chiều dọc trong một QVBoxLayout

Vấn đề của tôi là nhãn của tôi mở rộng đến gần 80% chiều cao của cửa sổ mẹ và QLineEdit và `QButton \ được ép ở dưới cùng.

Tôi đã tìm ra cách để giải quyết vấn đề này: Tôi đã chèn thêm nhãn không có nội dung nhưng đây không phải là giải pháp vàng. Tôi có thể làm gì?

Tôi cũng đã thử QFormLayout nhưng không phù hợp với nhu cầu của tôi. Tôi thích các vật dụng được theo thứ tự thẳng đứng. Tôi đã thử nhiều cách với QSizePolicy nhưng nó không hoạt động.

Trả lời

7

Tôi nghĩ rằng những gì bạn đang tìm kiếm là thêm một mục đệm. Hãy thử sử dụng addStretch trên bố cục của bạn sau khi bạn đã thêm tất cả tiện ích con vào nó.

Ví dụ:

#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); 
     } 
}; 

Renders:

enter image description here

(Không căng từ cánh trái, căng ở bên phải.)

+0

cảm ơn bạn thats chính xác những gì tôi đang tìm kiếm:) Tôi sẽ cố gắng này;) nhưng những gì doas nếu (spacer) có nghĩa là? – dadod2

+0

Nó chỉ là một tham số trong hàm tạo mà tôi đặt ở đó để có thể hiển thị hai thông số một cách dễ dàng. (ví dụ, cửa sổ bên trái được tạo ra với sth như 'new W (false);', cái ở bên phải với 'new W (true);'.) Nó chỉ dành cho bản demo này. – Mat

+0

ah okay yea và nó hoạt động tốt cảm ơn bạn – dadod2

Các vấn đề liên quan