Lis 27 2009
Kurs Qt - Część 5 - Layout
Kolejna część kursu Qt. Tym razem zajmiemy się layoutami, które pozwolą nam uporządkować widgety w oknach naszych aplikacji. Przy okazji załatwią nam sprawę "ładnego" wyglądu okna w przypadku jego rozciągania.
Używanie layoutów w Qt nie jest jakoś szalenie trudne. Ot tworzymy widget, dodajemy do niego layout, na layout dodajemy kolejne widgety i zależnie od typu layoutu nam się ładnie rozkładają po całej powierzchni. Do wyboru mamy:
- QVBoxLayout - layout pionowy,
- QHBoxLayout - poziomy,
- QGridLayout - siatka,
- QFormLayout - dwukolumnowy, do dodawania etykiety wraz z odpowiadającą jej kontrolką.
Zajmijmy się najpierw QHBoxLayout. Da nam to obraz czego można się spodziewać (pominę plik main.cpp, chyba już każdy potrafi go sam zrobić? ;)):
window.hpp:
- #ifndef WINDOW_HPP
- #define WINDOW_HPP
- #include <QWidget>
- #include <QHBoxLayout>
- #include <QPushButton>
- #include <QLabel>
- #include <QSpacerItem>
- {
- public:
- Window();
- };
- #endif // WINDOW_HPP
window.cpp:
- #include "window.hpp"
- #include <QTextCodec>
- Window::Window()
- {
- setLayout(layout);
- layout->addWidget(label);
- layout->addSpacerItem(spacer);
- layout->addWidget(label2);
- layout->addWidget(button);
- }
Pewną niewiadomą może być QSpacerItem. Służy on jako puste miejsce rozdzielające poszczególne elementy (lub jak wypełniacz komórek dla grida). Polecam poeksperymentować z wartościami QSpacerItema żeby uzyskać różne efekty rozłożenia widgetów. W linijkach od 17. do 20. mamy dodawanie kolejnych kontrolek do layoutu. Jak widać - żadna filozofia.
Trochę ciekawej wygląda zabawa z QGridLayout. Ponieważ kod nagłówka różni się niewiele (QGridLayout zamiast QHBoxLayout), więc pozwolę sobie na pokazanie tylko pliku z definicją klasy Window:
- #include "window.hpp"
- #include <QTextCodec>
- Window::Window()
- {
- setLayout(layout);
- layout->addItem(spacer, 0, 0);
- layout->addWidget(label, 1, 0, Qt::AlignCenter);
- layout->addWidget(button, 1, 1, Qt::AlignCenter);
- layout->addWidget(label2, 0, 1);
- }
Różnica polega na sposobie dodawania elementów. Możemy dodatkowo ustalić w której kolumnie i wierszu ma się znaleźć dany widget czy spacer (nie musimy podawać wcześniej liczby kolumn i wierszy, Qt samo odpowiednio dostosuje QtGridLayout) oraz wyrównanie elementu w komórce.
To tyle tym razem. Z okazji nadchodzących Mikołajek postaram się przygotować coś z nadchodzącego Qt 4.6. Jak znajdę odpowiednie ilości motywacji to może nawet zrobię 3 części kursu o ciekawych zastosowaniach Qt 4.6. ;]



28 Lis 2009, 08:36:25
A screeny ;> Wreszcie nowa część ;)
30 Lis 2009, 07:54:01
Fajne, szkoda że troszkę późno, zdążyłem nauczyć się sam :D
To może teraz coś co tygryski lubią najbardziej - bazy danych - temat na kilka tutków :)
Potrafię już pracować w Qt z bazami danych mimo to z chęcią bym poczytał taki tekst :)
04 Gru 2009, 17:22:45
@ith Popieram, dosyć ciekawy temat.
13 Gru 2009, 19:54:08
@ith A z czego się po lekcjach uczyło? :> Też bym coś więcej poczytał...