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

To był tylko taki "skrót myślowy" :).
Wsadzić pośrednio zwykłego QWidgeta i zadziała na 100%.
Sam napisałbym pełnego layouta (dziedziczącego po QLayout), ale on wymaga troszkę więkcej kodu i wiedzy, a to było by za dużo dla korineX.
QStackedLayout jest drogą na skróty, wada jest taka, że nie obsługuje on layot'ów.

Konstruktor MainWidow powinien więc wyglądać mniej więcej tak:

MainWidow::MainWidow(QWidget * parent, Qt::WindowFlags flags)
    : QMainWindow(parent, flags)
{
    // setupui ...

    MySquareLayout *sqr = new MySquareLayout;
    ui->mainLayout->addLayout(sqr, 0, 0);
    QWidget *helpingWidget = new QWidget;
    sqr->addWidget(helpingWidget);
    QGridLayout *buttonsLayout = new QGridLayout(helpingWidget);
    setupButtons(buttonsLayout);
}

Edit:
w sumie jak się zastanowić to dziedziczenie po QBoxLayout też jest jakimś rozwiązaniem nawet prostszym bo obsługuje layout'y (trzeba tylko konstruktorowi dostarczyć dodatkowy parametr).

0

cos dalej nie rozumiem:

 MySquareLayout *sqr = new MySquareLayout;
    ui->mainLayout->addLayout(sqr, 0, 0);   //rozumiem, ze za mainLayout podstawic swoj laypout stworzony designerem (u mnie gridLayout)
    QWidget *helpingWidget = new QWidget;
    sqr->addWidget(helpingWidget);
    QGridLayout *buttonsLayout = new QGridLayout(helpingWidget);
    setupButtons(buttonsLayout);   //kompilator zglasza brak czegos takiego jak setupButtons
 
0

nie wiem jaki masz kod, pod setupButtons "ukryłem" nieznany mi twój kod tworzenia/ustawiania buttonów, co tam ma być to już twoja sprawa.
Detale zależą od tego co masz już zaimplementowane.

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