QDockWidget showFullscreen не работает в Ubuntu (gnome)

Я пытаюсь перевести плавающий (не закрепленный) QDockWidget в полноэкранный режим. В Windows все кажется прямым. Например, я подключаю сигнал topLevelChanged() док-виджета (dw) к пользовательскому слоту floatChanged().

connect(dw, SIGNAL(topLevelChanged(bool)), this, SLOT(floatingChanged(bool)));

внутри слота я проверяю: плавает ли dw и вызываю dw->showFullscreen().

void MainWindow::floatingChanged(bool floating)
{
    if( floating )
    {
        QDockWidget* dw = static_cast<QDockWidget*>(QObject::sender());
        dw->showFullScreen();
    }
}

в Windows незакрепленный (плавающий) QDockWidget сразу переключается в полноэкранный режим после отстыковки. Но под linux (ubuntu 12.04, gnome-shell 3.4.1) это не работает (qt 4.8.0). Виджет док-станции остается в обычном режиме.

Я не могу понять, как переключить (плавающий) QDockWidget в полноэкранный режим. Любые решения по этому вопросу очень приветствуются. На самом деле разные ОС действуют по-разному для этой цели.

Я уже безуспешно искал в Интернете, так что это мой первый пост здесь. Пожалуйста, простите меня за орфографические ошибки, я не являюсь носителем английского языка, спасибо;)

p.s. Я тоже попробую поведение osx-lions. Кстати: чтобы попробовать, просто реализуйте показанный выше слот floatChanged() в MainWindow примера Qt http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html и соедините его с любым из существующих док-виджетов или внутри MainWindow: :createDockWidget().


person xam    schedule 12.04.2013    source источник
comment
На osx-lion с qt 4.8.2 тоже ведет себя иначе. Виджет док-станции просто показывается развернутым после вызова dw-›showFullScreen(). Это означает, что строка заголовка показана/была показана; У Win XP было настоящее полноэкранное поведение, где также отсутствовала строка заголовка - это то, что мне нужно от полноэкранного режима.   -  person xam    schedule 13.04.2013
comment
Я нашел своего рода работу с использованием таблиц стилей. Я объяснил это на форуме Qt-Center: ссылка. Любые дополнительные подсказки очень приветствуются...   -  person xam    schedule 23.04.2013
comment
этот минимальный пример ведет себя так, как вы описали при настройке? Кажется, он работает, как и ожидалось, на моем.   -  person brunocodutra    schedule 25.09.2013


Ответы (1)


Вызов этой функции showFullScreen() влияет только на окна.

Полноэкранный режим отлично работает в Windows, но имеет определенные проблемы в X. Эти проблемы связаны с ограничениями протокола ICCCM, который определяет связь между клиентами X11 и оконным менеджером. ICCCM просто не понимает концепцию недекорированных полноэкранных окон. Поэтому лучшее, что мы можем сделать, это запросить окно без полей, разместить его и изменить его размер, чтобы он заполнил весь экран. В зависимости от оконного менеджера это может работать или не работать. Окно без полей запрашивается с помощью подсказок MOTIF, которые хотя бы частично поддерживаются практически всеми современными оконными менеджерами. Альтернативой может быть полное обход оконного менеджера и создание окна с флагом Qt::X11BypassWindowManagerHint. Однако у этого есть и другие серьезные проблемы, такие как полностью нарушенный фокус клавиатуры и очень странные эффекты при смене рабочего стола или когда пользователь открывает другие окна. Оконные менеджеры X11, соответствующие современным спецификациям после ICCCM, правильно поддерживают полноэкранный режим.

person Henry    schedule 22.11.2013