2012-12-21 27 views
5

Ich möchte eine QLabel auf die volle Breite des Containers unabhängig von den Inhalten erweitern. (Ich will das, weil ich dynamisch den Text und fügen Sie Widgets später, die sie verursachen einen Teil des Textes abgeschnitten)Wie kann ich ein QLabel auf die volle Breite erweitern?

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

Dieser Code zeigt, dass die blaue Box nicht auf die gesamte Breite dehnt, warum?

Antwort

8

Sie müssen gesetzt:

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

standardmäßig alle QWidget oder QFrame in jeder Richtung 15 Pixel Rand hinzuzufügen.

Das Hauptproblem besteht darin, die Ausrichtung festzulegen, wenn Sie das Widget dem Layout hinzufügen. Verwenden Sie stattdessen label->setAlignment.

layout->addWidget(label); 

Ich kompilierte Ihren Code, es funktioniert mit diesen Änderungen. Hier

ist die minimale Beispiel:

#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

Ich habe gerade versucht es und es funktioniert nicht, das Problem zu beheben :( – chacham15

+0

bearbeiten sollte Ihr Problem jetzt – Kikohs

+0

Huh beheben, du hast Recht Es war die align, die verursacht wurde. das Problem – chacham15