2012-12-21 13 views
5

Chcę, aby QLabel rozwinął się na pełną szerokość kontenera, niezależnie od zawartości. (Chcę tego, bo dynamicznie ustawić tekst i później dodać widgety, które powodują to, aby odciąć część tekstu)Jak uzyskać rozszerzenie QLabel do pełnej szerokości?

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

Ten kod wskazuje, że blue box nie rozszerza się na całą szerokość, dlaczego?

Odpowiedz

8

Musisz ustawić:

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

Domyślnie każdy QWidget lub QFrame dodać 15 pikseli marginesu w każdym kierunku.

Głównym problemem jest ustawienie wyrównania po dodaniu widżetu do układu. Zamiast tego użyj label->setAlignment.

layout->addWidget(label); 

Skompilowałem twój kod, działa z tymi zmianami.

Oto minimalne przykład:

#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

Właśnie spróbowałem i nie robi rozwiązać problem :( – chacham15

+0

Edit powinno rozwiązać problem teraz – Kikohs

+0

Huh, masz rację To był align, który był przyczyną. problem: – chacham15

Powiązane problemy