QDockWidget showFullscreen无法在Ubuntu(gnome)上运行

xam*_*xam 7 c++ ubuntu qt4 fullscreen qdockwidget

我正试图将浮动(未对接的)QDockWidget置于全屏模式.在Windows上,一切都很简单.例如,我将dockwidget(dw)的topLevelChanged()信号连接到自定义槽floatingChanged()

connect(dw, SIGNAL(topLevelChanged(bool)), this, SLOT(floatingChanged(bool)));
Run Code Online (Sandbox Code Playgroud)

在插槽内我检查:如果dw浮动并调用dw-> showFullscreen().

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

在Windows中,未对接(浮动)QDockWidget在取消停靠后直接切换到全屏模式.但是在linux下(ubuntu 12.04,gnome-shell 3.4.1)这不起作用(qt 4.8.0).停靠小部件只是保持正常模式.

我无法弄清楚如何将(浮动)QDockWidget切换到全屏模式.任何解决方案都非常受欢迎.实际上,不同的操作系统在此目的上表现不同.

我已经在网上搜索没有成功,所以这是我在这里的第一篇文章.请原谅我拼写错误我不是母语英语,thanx;)

ps我也会尝试osx-lions行为.顺便说一下:要试一试,只需在Qt示例http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html的MainWindow中实现上面显示的floatingChanged()插槽并连接它使用任何现有的dockwidgets或MainWindow :: createDockWidget()方法.

小智 2

调用此函数showFullScreen()仅影响窗口。

全屏模式在 Windows 下工作正常,但在 X 下存在某些问题。这些问题是由于指定 X11 客户端和窗口管理器之间通信的 ICCCM 协议的限制造成的。ICCCM根本不理解非装饰全屏窗口的概念。因此,我们能做的最好的事情就是请求一个无边框窗口,并放置它并调整其大小以填充整个屏幕。根据窗口管理器的不同,这可能有效也可能无效。使用 MOTIF 提示请求无边框窗口,几乎所有现代窗口管理器至少部分支持该提示。另一种方法是完全绕过窗口管理器并使用 Qt::X11BypassWindowManagerHint 标志创建一个窗口。但这还有其他严重的问题,例如键盘焦点完全损坏以及对桌面更改或用户打开其他窗口时产生非常奇怪的影响。遵循现代后 ICCCM 规范的 X11 窗口管理器可以正确支持全屏模式。