2012-12-21 28 views
5

Tôi muốn có một QLabel để mở rộng đến toàn bộ chiều rộng của vùng chứa bất kể nội dung. (Tôi muốn điều này vì tôi tự động thiết lập các văn bản và thêm widget sau đó gây ra nó để cắt đứt một phần của văn bản)Làm cách nào để nhận được một nhãn hiệu để mở rộng đến toàn bộ chiều rộng?

Widget::Widget(QWidget *parent) 
    : QWidget(parent) 
{ 
    this->setFixedSize(100,100); 
    QHBoxLayout *layout = new QHBoxLayout; 
    this->setLayout(layout); 
    QLabel *label = new QLabel; 
    label->setStyleSheet("background-color:blue"); 
    label->setSizePolicy(QSizePolicy::MinimumExpanding, 
         QSizePolicy::MinimumExpanding); 
    label->setText(tr("test")); 
    layout->addWidget(label, 0, Qt::AlignTop | Qt::AlignLeft); 
}

Mã này cho thấy rằng các hộp màu xanh không mở rộng ra toàn bộ chiều rộng, tại sao?

Trả lời

8

Bạn phải thiết lập:

layout->setContentsMargins(0,0,0,0); 

Theo mặc định mỗi QWidget hoặc QFrame thêm 15 pixel của lề theo mọi hướng.

Vấn đề chính là cài đặt căn chỉnh khi bạn thêm tiện ích vào bố cục. Sử dụng label->setAlignment để thay thế.

layout->addWidget(label); 

Tôi đã biên soạn mã của bạn, mã này hoạt động với những thay đổi đó.

Dưới đây là ví dụ nhỏ:

#include <QApplication> 
#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QWidget* w = new QWidget; 
    w->setFixedSize(100,100); 
    QHBoxLayout* layout = new QHBoxLayout; 
    layout->setContentsMargins(0,0,0,0); 
    w->setLayout(layout); 
    QLabel* label = new QLabel; 
    label->setAlignment(Qt::AlignTop | Qt::AlignLeft); 
    label->setContentsMargins(0,0,0,0); 
    label->setStyleSheet("background-color:blue"); 
    label->setSizePolicy(QSizePolicy::MinimumExpanding, 
        QSizePolicy::MinimumExpanding); 
    label->setText("test"); 
    layout->addWidget(label); 
    w->show(); 
    return a.exec(); 
} 
+0

Tôi chỉ cố gắng nó và nó không khắc phục vấn đề :( – chacham15

+0

Sửa nên khắc phục vấn đề của bạn bây giờ – Kikohs

+0

Huh, bạn nói đúng Đó là class đã gây ra. – chacham15

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