Nie wiem jak to nazwać, ustawianie uniwersalnych wymiarów przycisków/okienek/pól tekstowych
-
Dzień dobry!
Nie wiem jak to się nazywa w slangu profesjonalistów, ale chwiałbym, żeby to co ustawie sobie w okienku mojego programu miało uniwersalny rozmiar, żeby np. guzik zajmował 10 % szerokości i 10 % wysokości okienka; podobnie chwiałbym zrobić z resztą rzeczy w okienku.
Chcę zrobić aplikację na Androida, a jak wiadomo urządzenia z Androidem mają ekrany różnych rozmiarów dla tego muszę opracować ten temat.
Czy jest jakiś łatwy sposób na to ?
Póki co ustawiałem ręcznie rozmiary wszystkich graficznych obiektów w interfejsie mojego programu i w momencie kiedy rozmiar okienka się zmieniał, ponownie przeliczałem rozmiary i ustawiałem je obiektom. Czy można to jakoś uniknąć ? -
Jeden ze sposobów to poustawianie odpowiednich wartości anchors, np. dwa prostokąty o szerokości/wysokości 10% rodzica i odstępach też po 10%:
Rectangle { color: "red" anchors.fill: parent Rectangle { color: "blue" anchors.fill: parent anchors.leftMargin: parent.width * 0.1 anchors.rightMargin: parent.width * 0.8 anchors.topMargin: parent.height * 0.1 anchors.bottomMargin: parent.height * 0.8 } Rectangle { color: "blue" anchors.fill: parent anchors.leftMargin: parent.width * 0.3 anchors.rightMargin: parent.width * 0.6 anchors.topMargin: parent.height * 0.1 anchors.bottomMargin: parent.height * 0.8 } }
-
To jest CSS? Czy Qt Quick ?
-
Nie napisałeś czego używasz więc, skoro to projekt na Androida, założyłem, że chodzi Ci o QML (QtQuick).
Jeśli używasz widgetów to wrzucasz elementy w layout i szerokości możesz sobie ustawić za pomocą size policy, np. dwa przyciski 20% i 80% szerokości:auto btn1 = new QPushButton("Hello"); auto btn2 = new QPushButton("World"); QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Fixed); policy.setHorizontalStretch(20); btn1->setSizePolicy(policy); policy.setHorizontalStretch(80); btn2->setSizePolicy(policy); auto widget = new QWidget; widget->setLayout(new QHBoxLayout); widget->layout()->addWidget(btn1); widget->layout()->addWidget(btn2);
-
O, łał, fajne rozwiązanie. :)