Staly kształt buttona

0

hej

tworze sobie tablice buttonow, zrobilem ze ladnie mi sie one powiekszaja wraa ze zmiana okna, ale w jaki sposob w kodzie zrobic, aby przy zmianie (zwiekszanie/zmniejszanie) okna, przyciski zawsze byly kwadratowe ?

z gory dzieki, (bardzo to pilne dla mnie)

0

metody setFixedWidth() i setFixedHeight()

0

ok, ale wtedy nie bedzie sie plansza tych przyciskow powiekszac wraz z oknem, tylko bedize miala staly rozmiar

0

Nie o planszę mi Bracie chodziło.Wywołaj to dla każdego z buttonów,a naprościej będzie jak sobie przeimplementujesz buttona i zapodasz ustalanie jego rozmiaru w konstruktorze.
Poza tym możesz to zrobić od razu przy użyciu setFixedSize()

0

no ustawilem to dla poszczegolnych Buttonow w tej tablicy i dalej to nie dziala tak jak chcialem (nie powieksza sie wraz z oknem)

ale zrobilem sobie spinboxa ktory zwieksz rozmiar tych buttonow, wiec w pewien sposob mogre to sztucznie modyfikwac

1

Moim zdaniem trzeba by było zdefiniować własny layout.
Najprościej to należy rozszerzyć QStackedLayout i nadpisać metodę void setGeometry (const QRect & rect).
Jest to w sumie bardzo proste:

void MySquareLayout::setGeometry(const QRect &rect)
{
     QRect squareRect(rect);
     if (squareRect.width()<squareRect.height()) {
          squareRect.setHeight(squareRect.width());
     } else {
          squareRect.setWidth(squareRect.height());
     }
     // tu można jeszcze dodać jeszcze justowanie zawartości w prawo do środka do dołu itp.
     QStackedLayout::setGeometry(squareRect);
}

Potem wsadzasz w ten layout grid layout z swoimi buttonami i wszystko zadziała jak należy

0

Nie do końca cię zrozumiałem korineX-cóż,jeśli Twoją intencją jest mieć guziki reagujące na zmianę wielkości okna ale zawsze kwadratowe,to poczytaj w Assistancie o QSizePolicy::horizontal/verticalStretch.

0

qpushbutton dziedziczy po qwidget resizeEvent więc tam możesz spokojnie kontrolować wymiary twojego buttona. Pobierasz jeden wymiar, a drugi sobie dostosowujesz do niego.

0

nie za bardzo czaje o co chodzi z tym dodatkowym layoutem

tak wyglada u mnie ta klasa:

lass MySquareLayout : public QStackedLayout
{
public:

    MySquareLayout() : QStackedLayout()
    {

    }

    void setGeometry(const QRect &rect)
    {
        QRect squareRect(rect);
        if (squareRect.width()<squareRect.height())
        {
             squareRect.setHeight(squareRect.width());
        }
        else
        {
             squareRect.setWidth(squareRect.height());
        }
    // tu można jeszcze dodać jeszcze justowanie zawartości w prawo do środka do dołu itp.

        QStackedLayout::setGeometry(squareRect);
    }

};

i w konstruktorze gdzie robie ta plansze

 MySquareLayout a;

    a.addWidget(ui->gridLayout);   ///mainwindow.cpp:20: error: no matching function for call to ‘MySquareLayout::addWidget(QGridLayout*&)’

co tu zle zrozumialem ?

0

QStackedLayout.addWidget za parametr przyjmuje łidżeta a nie lajołta.

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