我正在使用 QGraphicsScene 和 QGraphicsViews 为每个监视器在 Qt 4.8 中开发适用于 Linux(RHEL、Gnome、Compiz)的应用程序。每个 QGraphicsView 都有 Qt::X11Bypasswindowmanagerhint 窗口提示。为了恢复键盘焦点,我有一个事件处理程序,它在每个事件的恰好一个 QGraphicsViews 上调用 activateWindow() (我意识到这可能是矫枉过正而且效率极低)。该应用程序是用户可能要求经常隐藏和显示它的应用程序;当我在事件处理程序中激活的同一特定 QGraphicsView 上调用 show() 时,会发生 X11 错误事件。特别是,该错误的错误代码为 8,对应于 BadMatch 错误,主要操作代码为 42,我认为对应于 XSetInputFocus()。
首先,这是一个可以通过自定义 x11 事件处理程序简单地忽略的错误吗(因为应用程序实际上可以工作)?其次,在将这个特定的窗口提示与 QGraphicsView 一起使用时,是否有更好的方法来调用 activateWindow?如果没有,至少有办法避免这个错误吗?