Dlaczego widget jest za niski ?

0

Zrobiłem sobie prosty Widget który ma 5 przycisków , każdy przycisk ma ustawiona minimalna i maksymalną wysokość


auto verticalLayout = new QVBoxLayout(this);
verticalLayout->setContentsMargins(0,0,0,0);
verticalLayout->setSpacing(0);
    
int SIZE{5};

for(int i = 0; i < SIZE; ++i)
{

    auto *obj  = new QPushButton;
    listBtn.append(obj);

    obj->setMinimumHeight(44);
    obj->setMaximumHeight(44);
    obj->setAutoDefault(true);

    obj->setText("Button " + QString::number(i));
    verticalLayout->addWidget( obj);
}

Jeżeli użyję mojego widgetu w main

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget widget;


    auto * menu = new MenuXY(&widget,nullptr);
    menu->move(33,33);
    menu->show();

    widget.show();
    return a.exec();
}

to narysuje się poprawnie i wysokość na ekranie będzie 5x44 , choć nigdzie nie ustawiam wysokości wydgetu
image

jeżeli che go użyć w QMainWindow to rysuje się blednie (jest za niski [30px])
nie ustawia mu sie automatycznie wysokość 5x44
image

Nie rozumiem dlaczego widget nie ustawił rozmiaru na podstawie umieszczonych weń przycisków

Jak ustawić rozmiar widgetu na podstawie rozmiaru tego co jest w środku ?

kod:
https://github.com/mariuszmaximus/menuXYZ

1

próbowałeś zmienia size policy buttonów? NA fixed bodajże.
Inny sposób na rozwiązanie tego problemu to dodanie ich do QWidget który ustawisz potem jako centralny.

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget widget;
    QMainWindow window;

    auto * menu = new MenuXY(&widget,nullptr);
    window.setCentralWidget(widget);

    window.show();
    return a.exec();
}

0

size policy nie pomogło :(

Pierwszy etap walki: dodałem do mojego widgetu sizeHint i postawiłem breakpoint

QSize MenuXY::sizeHint() const
{
    qDebug() << "MenuXY::sizeHint() "<<QWidget::sizeHint();
    return QWidget::sizeHint();
};

natchnęło to do odkrycia że w przypadku gdy widget zachowuje sie poprawnie jest uruchamiana funkcja QWidget::adjustSize() który używa funkcji sizeHint
bez tego rozmiar jest niepoprawny.

Dodanie w konstruktorze QWidget::adjustSize() rozwiązało problem że zawsze działa zgodnie z oczekiwaniami

Przydały by sie jakieś materiały jak tworzyć własne komponenty w Qt :D

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