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

时间:2013-04-12 16:11:20

标签: c++ ubuntu qt4 fullscreen qdockwidget

我正在尝试将浮动(未对接的)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切换到全屏模式。任何解决方案都非常受欢迎。实际上,不同的操作系统在此目的上表现不同。

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

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

1 个答案:

答案 0 :(得分:2)

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

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