Я пытаюсь перевести плавающий (открепленный) QDockWidget в полноэкранный режим. В Windows все кажется прямым. Например, я подключаю сигнал topLevelChanged () dockwidget (dw) к пользовательскому слоту floatingChanged ()
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();
}
}
в окнах отстыкованный (плавающий) QDockWidget переключается непосредственно в полноэкранный режим после отстыковки. Но в Linux (Ubuntu 12.04, gnome-shell 3.4.1) это не работает (qt 4.8.0). Прикрепленный виджет просто остается в обычном режиме.
Я не могу понять, как переключить (плавающий) QDockWidget в полноэкранный режим. Любые решения по этому вопросу приветствуются. На самом деле разные ОС действуют по-разному с этой целью.
Я уже искал в Интернете безуспешно, так что это мой первый пост здесь.
Пожалуйста, прости меня за орфографические ошибки. Я не носитель английского языка, спасибо;)
постскриптум Я тоже попробую поведение osx-lions. Кстати: чтобы попробовать это, просто реализуйте показанный выше слот плавающийChanged () в MainWindow примера Qt http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html и связать его с любым из существующих док-виджетов или внутри метода MainWindow :: createDockWidget ().
Вызов этой функции showFullScreen()
влияет только на окна.
Полноэкранный режим прекрасно работает в Windows, но имеет некоторые проблемы в X. Эти проблемы связаны с ограничениями протокола ICCCM, который определяет связь между клиентами X11 и диспетчером окон. ICCCM просто не понимает концепцию неэкранных полноэкранных окон. Поэтому лучшее, что мы можем сделать, — это запросить окно без полей, разместить и изменить его размер, чтобы заполнить весь экран. В зависимости от оконного менеджера это может работать, а может и не работать. Окно без полей запрашивается с помощью подсказок MOTIF, которые хотя бы частично поддерживаются практически всеми современными оконными менеджерами.
Альтернативой было бы полностью обойти оконный менеджер и создать окно с флагом Qt :: X11BypassWindowManagerHint. Это имеет другие серьезные проблемы, такие как полностью нарушенный фокус клавиатуры и очень странные эффекты при смене рабочего стола или когда пользователь открывает другие окна.
Менеджеры окон X11, которые соответствуют современным спецификациям пост-ICCCM, должным образом поддерживают полноэкранный режим.
Других решений пока нет …