Nieprawidłowy rozmiar własnego QWidgeta w layoucie po kompilacji na Win10

0

Witajcie Bracia i Siostry w kodzie

Być może ktoś z Was (Brat @MarekR22 ?) będzie w stanie naprowadzić mnie co może powodować niepoprawne zachowanie mojej aplikacji. Nie mam wielkich nadziei iż otrzymam pomoc, ale onego czasu jak się nadziałem na błąd w Qt dotyczący nieobsługiwania QKeyEvent.isAutoRepeat() też jej nie miałem, a tymczasem Brat @alagner dobrze mi poradził.

Generalnie okno aplikacji po kompilacji projektu na Win10 wygląda tak:
image

ma zbyt wielki obszar widgeta HEAD. Tak to powinno prawidłowo wyglądać:
image
Niebieska ramka to QWidget robiący za overlay'a, z nałożoną maską tak, aby tylko ramka otaczająca ekwipunek z niego została. Przy okazji świetnie pokazuje rozmiar widgeta ekwipunku.

Part widget (to te HEAD, ARM itd) zbudowany jest tak:

QVBoxLayout spacing 3, margins 0, stretch 0,0,0 and SetDefaultConstraint
{
   [own GroupBox with various stuff inside] QSizePolicy minimum, minimum
   [inventory own widget] expanding, expanding
   [QSpacer <-> QPushButton <-> QSpacer in QHBoxLayout]
}

Problematyczny środek, w którym siedzi HEAD z kolei tak:

QVBoxLayout spacing 4, margins 0, stretch 0,0,0,0 and SetDefaultConstraint
{
     [HeadPart] preffered, minimum
     [CenterTorsoPart] preffered, minimum
     [Ammo info QGroupBox, it contains QScrollArea inside] expanding, expanding
     [initially hidden QWidget] preffered, preffered
}

Rzecz jasna, pamiętałem żeby dla inventory widgeta przeimplementować sizeHint() i minimumSizeHint()

InventoryBase::InventoryBase(QWidget *parent)
: QWidget(parent)
{
    SettingsContainer &settings = SettingsContainer::getInstance();
    penSize = settings.getSlotlineWidth();

    slotsCount = 1;
    slotWidth = settings.getSlotWidth();
    slotHeight = settings.getSlotHeight();
}
//#include <QDebug>
QSize InventoryBase::sizeHint() const
{
    QSize size(slotWidth + penSize, slotHeight * slotsCount + penSize);
    //qDebug() << "slots: " << slotsCount << ", size: " << size;
    //const_cast<InventoryBase*>(this)->setFixedHeight(size.height());//trochę pomaga, ale nie do końca
    return size;
}

No i tu właśnie tkwi moja zagwozdka - nie wiem, co nawet zacząć podejrzewać o powodowanie błędu.

2

Ja bym sprawdził na początek, czy aby na 100% [initially hidden QWidget] preffered, preffered on jest hidden?
Drugi temat, to poeksperymentowałbym z QSpacerami, w widgetcie HEAD, np. dołożył jeden od dołu pod GroupBoxa i zobaczył zachowanie, ewentualnie expanding w nim niedomaga, ale to tylko takie luźne gdybania.

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