Qt label wymiary

0

jak pobrać obecne wymiary labela ?
próbowałem

 int h = labelFoto1P->height();
int h = labelFoto1P->width;

ale bez skutku

0

A skąd Ci się wzięło "height()" skoro to nie funkcja tylko zmienna?
Poza tym 2 właściwości chcesz zapisać do jednej zmiennej.
Nie znam Qt ale zakładając, że schrzaniłeś tylko te dwie rzeczy powinno by:

int h = labelFoto1P->height;
int g = labelFoto1P->width; 
0

Zaraz po konstrukcji label nie ma jeszcze wymiaru.

  • albo musisz mu go nadać
  • albo wstawić do QLayout, który będzie zarządzał jego rozmiarem

Jeśli chcesz poznać optymalny rozmiar widget-a, to potrzebujesz użyć sizeHint http://doc.qt.io/qt-5/qwidget.html#sizeHint-prop

0

Oj mój błąd przy pisaniu posta ... druga zmienna była" w" chodzi o to że wymiary labela ustalone w qteditor w kreatorze gui czy jakoś tak się on nazywa. A pobrać jego wymiary chce dlatego że po rozciągnięciu okna label zmienia wymiar rozciągając się z oknem

0
ozi_ns napisał(a):

Oj mój błąd przy pisaniu posta ... druga zmienna była" w" chodzi o to że wymiary labela ustalone w qteditor w kreatorze gui czy jakoś tak się on nazywa. A pobrać jego wymiary chce dlatego że po rozciągnięciu okna label zmienia wymiar rozciągając się z oknem

wywal go zatem z layoutu MainWindow to przestanie się rozciągać

0

To wiem tylko że to rozciąganie mi odpowiada bo wstawiam w niego obraz a czym wiecej miejsca tym większy obraz. Wymiary potrzebne mi do skalowania obrazów będących znacznie wiekszymi aby zmieścić je w obecnym rozmiarze labela

0

no niby działa jakieś to rozwiązanie jest ale jeden minus... nie zachowuje wówczas proporcji. a chce wyświetlać obraz maksymalnie wielki ale zachować proporcje. dodam dalszą cześć kodu by wiadomo było o co mi chodziło

        int w = labelFoto1P->height();
        int h = labelFoto1P->width();
        QPixmap img1("1.bmp");
        QPixmap img2("2.bmp");

        ui->labelFoto1P->setPixmap(img1.scaled(w,h,Qt::KeepAspectRatio));
        ui->labelFoto1P->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui->labelFoto2L->setPixmap(img2.scaled(w,h,Qt::KeepAspectRatio));
        ui->labelFoto2L->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); 
0

kiedyś napisałem layout, który utrzymuje aspect ratio dowolnego widget'a. Jak znajdę do pokaże (nie chce mi się pisać od nowa).
Pytanie, który kierunek ma być dominujący? Czy wysokość ma być dostosowana do szerokości (łatwe od zrobienia bo Qt w tym pomaga), czy na odwrót (trudniejsze)?

0

to drobny dodatkowy problem;/ zależy od obrazu otóż chce stworzyć coś takiego..
1)ktoś ze swoich zasobów wybiera sobie dowolne zdjęcie.
2)jest ono wczytywane i wyświetlane w tym labelu(znajduje się on w rogu okna) oraz dopasowuje się do wymiarów labela(maksymalny rozmiar zachowując proporcje)

chciałem pobierać wymiar labela by z KeepAspectRatio wyświetlać co raczej rozwiązało by problem

0

ale jeden minus... nie zachowuje wówczas proporcji. a chce wyświetlać obraz maksymalnie wielki ale zachować proporcje

No to wylicz te proporcje, skoro KeepAspectRatio nie robi tego czego się spodziewasz.

0
ozi_ns napisał(a):

2)jest ono wczytywane i wyświetlane w tym labelu(znajduje się on w rogu okna) oraz dopasowuje się do wymiarów labela(maksymalny rozmiar zachowując proporcje)

MarekR22 napisał(a):

który kierunek ma być dominujący? Czy wysokość ma być dostosowana do szerokości (łatwe od zrobienia bo Qt w tym pomaga), czy na odwrót (trudniejsze)?

Jeśli nie rozumiesz pytania to wstaw rysunek layout-a jaki zaprojektowałeś.

Tu wskazówka ze SO:
http://stackoverflow.com/a/24264774/1387438

0

jesli dobrze zrozumiałem to będzie szerokość ale na wszelki wypadek w załączniku
a tak na marginesie jeszcze jedno pytanko...

  QPixmap img1("1.jpg");
    if(img1.isNull())
        img1=img1("brak.jpg");

jak osiągnąć coś tego typu? słownie:

  1. wczytuje obraz/plik
  2. jesli go nie ma to wczytuje się inny.
    nie bardzo wiem jak mam deklarować przy drugim wczytaniu innego pliku..
    próbowałem
  QPixmap img1("1.jpg");
    if(img1.isNull())
        QPixmap img1("brak.jpg");

oraz

  QPixmap img1("1.jpg");
    if(img1.isNull())
        img1("brak.jpg");

nie wiem jak zadeklarować ponownie by zmienić zawartość img1.

1

Jakoś tak.

QPixmap img1;
if (!img1.load("1.jpg"))
    img1.load("brak.jpg");

Nie sprawdzane.

0

haha fakt działa miałem przed nosem ale przeoczyłem :)

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