【问题标题】:QDockWidget showFullscreen not working on Ubuntu (gnome)QDockWidget showFullscreen 在 Ubuntu(gnome)上不起作用
【发布时间】:2013-04-05 06:18:11
【问题描述】:

我正在尝试将浮动(未停靠)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)。 Dock 小部件只是保持在正常模式。

我不知道如何将(浮动)QDockWidget 切换到全屏模式。对此的任何解决方案都非常受欢迎。事实上,不同的操作系统在此目的上表现不同。

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

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

【问题讨论】:

  • 在带有 qt 4.8.2 的 osx-lion 上表现也不同。在调用 dw->showFullScreen() 后,停靠小部件简单地显示为最大化。这意味着标题栏已显示/已显示; Win XP 有一个真正的全屏行为,标题栏也没有 - 这就是我对全屏模式的要求。
  • 我发现了一种使用样式表的方法。我在 Qt-Center 论坛中解释过:link。任何更多的提示都非常欢迎......
  • this minimal example 的行为是否像您在设置中描述的那样?它似乎按我的预期工作。

标签: c++ ubuntu qt4 fullscreen qdockwidget


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 2013-12-28
    • 2021-01-31
    • 2014-06-05
    • 2012-10-09
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多