Jump to content

[SOLVED] Нет полосы прокрутки у WidgetScrollBox.


photo

Recommended Posts

Здравствуйте.
Подскажите пожалуйста, как отобразить полосу прокрутки у  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

Здравствуйте, 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
  • silent changed the title to [SOLVED] Нет полосы прокрутки у WidgetScrollBox.
×
×
  • Create New...