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:
ma zbyt wielki obszar widgeta HEAD. Tak to powinno prawidłowo wyglądać:
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.