Dlaczego QSizePolicy::Maximum zmniejsza wysokość?

0

Trzy QLablel i środkowy ma ustawione verticalPolicy = QSizePolicy::Maximum

label1: QSizePolicy(horizontalPolicy = QSizePolicy::Preferred, verticalPolicy = QSizePolicy::Preferred)
label2:QSizePolicy(horizontalPolicy = QSizePolicy::Preferred, verticalPolicy = QSizePolicy::Maximum)
label3:QSizePolicy(horizontalPolicy = QSizePolicy::Preferred, verticalPolicy = QSizePolicy::Preferred)

Dlaczego środkowy QLablel ma minimalną wysokość ?
Z jakiej perspektywy spojrzeć na sizePolicy aby zobaczyć Maximum ?
Bo umysł przyzwyczajony do rozwiązań Vcl.Controls.TAlign ;)

#include <QApplication>
#include <QVBoxLayout>
#include <QLabel>
#include <QSizePolicy>
#include <QDebug>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;
    
    // troche koloru aby było wiadomo gdzie sie kończy i zaczyna QLabel
    QString s = "";
    s += "QWidget {  font: bold 20px;  background-color: red; border-style: outset; border-width: 2px; border-radius: 10px;  border-color: beige;     }" ; // background-color: #00FF00;  font-size: 26px;
    s += "QLabel {  font: bold 20px;   background-color: blue; }" ;
    
    w.setStyleSheet(s);


    QVBoxLayout *verticalLayout = new QVBoxLayout(&w);

    QLabel *label1 = new QLabel;
    label1->setText("label1");
    qDebug()<< label1->sizePolicy();

    QLabel *label2 = new QLabel;
    label2->setText("label2 Vertical:QSizePolicy::Maximum");
    QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
    label2->setSizePolicy(sizePolicy);
    qDebug()<< label2->sizePolicy();

    QLabel *label3 = new QLabel;
    label3->setText("label3");
    qDebug()<< label3->sizePolicy();

    verticalLayout->addWidget(label1);
    verticalLayout->addWidget(label2);
    verticalLayout->addWidget(label3);

    w.setLayout(verticalLayout);
    w.resize(500,500);
    w.show();
    return a.exec();
}
0
Adamek Adam napisał(a):

Dlaczego środkowy QLablel ma minimalną wysokość ?

ja często korzystam z Expanding to klasa Layout narzuca swoje rozmieszczenie widgetów

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;

// troche koloru aby było wiadomo gdzie sie kończy i zaczyna QLabel
QString s = "";
s += "QWidget {  font: bold 20px;  background-color: red; border-style: outset; border-width: 2px; border-radius: 10px;  border-color: beige;     }" ; // background-color: #00FF00;  font-size: 26px;
s += "QLabel {  font: bold 20px;   background-color: blue; }" ;

w.setStyleSheet(s);


QVBoxLayout *verticalLayout = new QVBoxLayout(&w);

QLabel *label1 = new QLabel;
label1->setText("label1");
QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
qDebug()<< label1->sizePolicy();
label1->setSizePolicy(sizePolicy1);

QLabel *label2 = new QLabel;
label2->setText("label2 Vertical:QSizePolicy::Maximum");
QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Expanding);
label2->setSizePolicy(sizePolicy2);
qDebug()<< label2->sizePolicy();

QLabel *label3 = new QLabel;
label3->setText("label3");
QSizePolicy sizePolicy3(QSizePolicy::Expanding, QSizePolicy::Expanding);
label3->setSizePolicy(sizePolicy3);
qDebug()<< label3->sizePolicy();

verticalLayout->addWidget(label1);
verticalLayout->addWidget(label2);
verticalLayout->addWidget(label3);

w.setLayout(verticalLayout);
w.resize(500,500);
w.show();
return a.exec();
}

PS. Czemu stosujesz taką porąbaną kolorystykę ?

0
Adamek Adam napisał(a):

Trzy QLablel i środkowy ma ustawione verticalPolicy = QSizePolicy::Maximum

label1: QSizePolicy(horizontalPolicy = QSizePolicy::Preferred, verticalPolicy = QSizePolicy::Preferred)
label2:QSizePolicy(horizontalPolicy = QSizePolicy::Preferred, verticalPolicy = QSizePolicy::Maximum)
label3:QSizePolicy(horizontalPolicy = QSizePolicy::Preferred, verticalPolicy = QSizePolicy::Preferred)

Dlaczego środkowy QLablel ma minimalną wysokość ?

Disclaimer: nie używałem Qt od +7 lat, więc mogę coś kłamać

Size policy mówi jak bezie traktowana wartość sizeHint w wybranym kierunku.
Dla QLabel sizeHint domyślnie zwraca rozmiar optymalny dla danego tekstu (lub wielkość obrazka).
Ustawiajac verticalPolicy = QSizePolicy::Maximum mówisz, że sizeHint().height() zwraca maksymalną wysokość tego widget-a.

1 użytkowników online, w tym zalogowanych: 0, gości: 1