QDockWidget在Ubuntu(gnome)上无法全屏显示

7
我正在尝试将一个浮动(未停靠)的QDockWidget放入全屏模式。在Windows上,一切似乎都很简单。例如,我将dockwidget(dw)的topLevelChanged()信号连接到自定义槽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();
    }
}

在Windows中,未停靠(浮动)的QDockWidget在取消停靠后会直接切换到全屏模式。但在Linux下(Ubuntu 12.04,Gnome-Shell 3.4.1),这种方式不起作用(Qt 4.8.0)。停靠窗口仅保持正常模式。
我无法弄清如何将(浮动)QDockWidget切换到全屏模式。任何关于此问题的解决方案都非常欢迎。实际上,不同的操作系统在此目的上的行为是不同的。
我已经在网上搜索了很久,但没有成功,所以这是我在这里发的第一篇帖子。 请原谅我的拼写错误,我不是母语为英语的人,谢谢;)
顺便说一句:我也会尝试OSX-Lion的行为。通过实现Qt示例http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html中MainWindow的上述floatingChanged()槽并将其连接到任何现有的dockwidgets或MainWindow :: createDockWidget()方法中,您可以尝试它。

在OSX Lion上,使用Qt 4.8.2的行为也不同。调用dw->showFullScreen()后,停靠窗口小部件会被简单地最大化显示。这意味着标题栏是/曾经显示过;Win XP具有真正的全屏行为,其中标题栏也不存在 - 这就是我需要的全屏模式。 - xam
我找到了一种使用样式表的解决方法。我在Qt-Center论坛中进行了解释:链接。欢迎提供更多提示... - xam
这个最小化的例子在你的环境中是否表现出了你所描述的行为?在我的环境中它似乎按预期工作。 - brunocodutra
1个回答

2
调用此函数showFullScreen()仅影响窗口。
在Windows下,全屏模式运行良好,但在X下存在某些问题。这些问题是由于ICCCM协议的限制所致,该协议指定了X11客户端和窗口管理器之间的通信。 ICCCM根本不理解无装饰全屏窗口的概念。因此,我们能做的最好的事情就是请求一个无边框窗口,并将其放置和调整大小以填满整个屏幕。这取决于窗口管理器,这可能起作用或不起作用。使用MOTIF提示请求无边框窗口,几乎所有现代窗口管理器都至少部分支持。
另一种选择是完全绕过窗口管理器并创建带有Qt :: X11BypassWindowManagerHint标志的窗口。然而,这也会出现其他严重问题,例如完全破坏的键盘焦点以及在桌面更改或用户提高其他窗口时产生非常奇怪的效果。
遵循现代后ICCCM规范的X11窗口管理器正确支持全屏模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接