【问题标题】:Qt4: Making fullscreen window impossible to get around (a lock screen)?Qt4:使全屏窗口无法绕过(锁定屏幕)?
【发布时间】:2011-07-22 17:24:10
【问题描述】:

我的应用程序是一个操作系统锁屏(如 GDM 的锁屏或 KDE 的),所以我试图让它像一个锁屏一样运行。

我正在尝试让我的应用程序的窗口悬停在所有其他窗口上方,并禁用/拦截所有可能导致它消失的键盘快捷键(ALT-TABCTRL-ALT-D 等)。 p>

有没有办法做到这一点?我 100% 确定有,因为存在带有 GUI 的锁屏,但我就是找不到查看的地方...

【问题讨论】:

  • 如果它允许任意应用程序以这种方式接管,我会认为它是窗口系统或桌面环境中的一个错误。我想有些游戏可能会这样做,但至少你应该仍然可以使用 Ctrl-Alt-F1 进入文本控制台。
  • @OrbWeaver,将此问题视为询问如何创建锁定屏幕。此类程序已经存在;是什么让他们工作?例如,他们可能需要使用某个 API 来告诉 WM 或操作系统屏幕已锁定。

标签: c++ qt4 xorg lockscreen


【解决方案1】:

我不知道如何用 Qt 来做,但你正在寻找的东西叫做 grabbing。您可以获取pointer input devicekeyboard

编辑:查看 Qt4 文档,您是否尝试过使用 QWidget::grabMouse?看起来这个函数正是你想要的。

【讨论】:

  • 感谢您的链接。我会摆弄这些。
  • 我设法使用XGrabServer 完全锁定服务器,但我的窗口没有响应。我可以移动鼠标光标,但锁屏也死了......
  • (掌心)。为什么我没有事先查看 Qt4 文档以获取鼠标和键盘抓取...?无论哪种方式,我的应用程序(几乎)与grabKeyboard()grabMouse() 完美配合。我只需要让 all 的小部件访问鼠标。谢谢!
【解决方案2】:

我不知道这是否是最佳解决方案,但您可以尝试使用 QObject::installEventFilter() 的事件处理程序。

如果您使用的是 Windows,则可以安装一个事件过滤器来处理 event->type() == QEvent::WinEventAct 的消息。

我不太了解其他操作系统,但 Qt 可能也有这方面的知识。

【讨论】:

    【解决方案3】:

    使用参数Qt::WindowStaysOnTopHint 继承Qwidget 类,见下文

    myclass::myclass(QWidget *parent) : QWidget(parent,Qt::WindowStaysOnTopHint)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多