Marsik Posted April 12, 2023 Share 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); } Link to comment
moody_pooch Posted April 12, 2023 Share 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. Link to comment
Marsik Posted April 12, 2023 Author Share Posted April 12, 2023 Спасибо, все работает. Link to comment
Recommended Posts