Высота QWidget стала 0 после удаления виджета из макета и вставки обратно

У меня есть видеоплеер, написанный на 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 контролирует размер виджета). Я могу установить минимальную высоту для виджета игрока, и он появляется снова, но не меняет размеры больше минимальной высоты.

Так есть ли обходной путь для этой ситуации? Я делаю что-то неправильно? Почему это происходит?

0 ответов

Другие вопросы по тегам