QDockWidget showFullscreen不工作在Ubuntu (gnome)

QDockWidget showFullscreen not working on Ubuntu (gnome)

本文关键字:gnome Ubuntu showFullscreen 工作 QDockWidget      更新时间:2023-10-16

我试图把一个浮动(未停靠)QDockWidget进入全屏模式。在Windows上,一切似乎都很简单。例如,我将dockwidget (dw)的topLevelChanged()信号连接到自定义插槽floatingChanged()

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

slot内i检查:如果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)。dock小部件保持在正常模式。

我不知道如何切换(浮动)QDockWidget进入全屏模式。我们非常欢迎任何解决方案。事实上,不同的操作系统在这方面的表现是不同的。

我已经在网上搜索了没有成功,所以这是我在这里的第一个帖子。请原谅我的拼写错误,我不是英语母语者,谢谢;)

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

调用showFullScreen()函数只影响windows。

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