Marsik Posted April 12, 2023 Posted April 12, 2023 Здравствуйте. Подскажите пожалуйста, как отобразить полосу прокрутки у WidgetScrollBox? auto gui = Gui::getCurrent(); auto widgetScrollBox = WidgetScrollBox::create(m_gui); gui->addChild(widgetScrollBox, Gui::ALIGN_EXPAND | Gui::ALIGN_OVERLAP | Gui::ALIGN_FIXED); widgetScrollBox->setHScrollEnabled(true); widgetScrollBox->setHScrollHidden(WidgetScrollBox::ALWAYS_RENDER); widgetScrollBox->setWidth(100); widgetScrollBox->setHeight(100); widgetScrollBox->arrange(); for (int i = 0; i < 10; i++) { auto widgetSprite = WidgetSprite::create(m_wWindow->getGui(), "/data/Img/MinIco.png"); widgetSprite->setHeight(50); widgetSprite->setWidth(50); widgetSprite->setPosition(50 * i, 0); widgetScrollBox->addChild(widgetSprite, Gui::ALIGN_OVERLAP | Gui::ALIGN_FIXED); }
moody_pooch Posted April 12, 2023 Posted April 12, 2023 Здравствуйте, Marsik! В Вашем случае горизонтальная полоса прокрутки не отображается из-за того, как в WidgetScrollBox были добавлены элементы в этой строке: widgetScrollBox->addChild(widgetSprite, Gui::ALIGN_OVERLAP | Gui::ALIGN_FIXED); а именно из-за флага Gui::ALIGN_OVERLAP, из-за которого дочерние виджеты рендятся поверх содержимого родительского контейнера и не учитываются при расчете размеров родителя. По умолчанию дочерние элементы в WidgetScrollBox добавляются вертикально. Чтобы добавлять их горизонтально (как в Вашем случае), Вы можете создать WidgetHBox, сделать его дочерним виджетом для WidgetScrollBox и уже в WidgetHBox добавлять элементы widgetSprite: auto gui = Gui::getCurrent(); auto widgetScrollBox = WidgetScrollBox::create(m_gui); gui->addChild(widgetScrollBox, Gui::ALIGN_EXPAND | Gui::ALIGN_OVERLAP | Gui::ALIGN_FIXED); widgetScrollBox->setWidth(100); widgetScrollBox->setHeight(100); auto hbox = WidgetHBox::create(); widgetScrollBox->addChild(hbox); for (int i = 0; i < 10; i++) { auto widgetSprite = WidgetSprite::create(m_wWindow->getGui(), "/data/Img/MinIco.png"); widgetSprite->setHeight(50); widgetSprite->setWidth(50); hbox->addChild(widgetSprite); } widgetScrollBox->arrange(); В данном случае Вам нет необходимости использовать следующие строки: widgetScrollBox->setHScrollEnabled(true); widgetScrollBox->setHScrollHidden(WidgetScrollBox::ALWAYS_RENDER); так как горизонтальная полоса прокрутки появится автоматически. Также больше нет необходимости вызывать setPosition() для widgetSprite.
Recommended Posts