У меня есть видеоплеер, написанный на Qt 5.2.1, с довольно сложной организацией виджетов и макетов внутри. Я хочу полноэкранный режим проигрывателя после того, как пользователь нажмет F11, поэтому я написал такой код:
void SomeClass::setFullScreen(bool fullScreenModeOn) // SomeClass is centralWidget of MainWindow
{
if (fullScreenModeOn && !player->isFullScreen())
{
vbox->removeWidget(player);
player->setParent(0);
player->showFullScreen();
parentWidget()->hide(); // this one is MainWindow
}
else if (!fullScreenModeOn && player->isFullScreen())
{
player->hide();
player->setParent(this);
vbox->insertWidget(0, player);
parentWidget()->show();
}
}
Я просто показываю виджет плеера как отдельное окно и полноэкранный режим; когда пользователь снова нажимает F11, иначе ветвь делает все наоборот — добавьте виджет обратно в макет и покажите родительское окно.
Когда я собираю этот код в QtCreator 3.0.1 с последней версией Qt 5.2.1 — все работает отлично!
Но! Когда я пытаюсь запустить это приложение на своей Ubuntu 13.10 с библиотекой Qt 5.0.2, у меня возникает следующая ситуация: после выключения полноэкранного режима виджет плеера просто исчезает! После некоторой отладки я обнаружил, что игрок на самом деле находится на макете, но его высота стала 0 и не может быть изменена обратно (потому что qlayout контролирует размер виджета). Я могу установить минимальную высоту для виджета игрока, и он появляется снова, но не меняет размеры больше минимальной высоты.
Так есть ли обходной путь для этой ситуации? Я делаю что-то неправильно? Почему это происходит?
Задача ещё не решена.