2012-12-21 51 views
5

我想要一個QLabel擴展到容器的全寬,而不管內容如何。 (我想這是因爲我動態設置文本,並添加小部件以後這導致其切斷部分文字)如何獲得QLabel以擴展至全寬?

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

此代碼顯示的藍色框不會擴展到整個寬度,爲什麼呢?

回答

8

您必須設置:

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

默認情況下,每一個QWidget的或QFrame補充保證金的15個像素在每一個方向。

主要問題是在將小部件添加到佈局時設置對齊方式。改爲使用label->setAlignment

layout->addWidget(label); 

我編譯了你的代碼,它適用於這些改變。

下面是小例子:

#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

我只是嘗試它,它不解決問題:( – chacham15

+0

編輯應該解決您的問題,現在 – Kikohs

+0

咦,你說得這是這是造成對齊。問題。 – chacham15