4. QWidget::x11Event() 如何工作 QWidget 是 Qt 所有用户界面对象的基类。 它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。
QWidget 定义了针对 XWindow 平台的虚函数:
清单 12. 1
| bool QWidget::x11Event ( XEvent * )
|
创建 QWidget 或者其已有派生类的子类,并且重新实现函数 x11Event(),那么所有发送到该 Widget 的 XEvent 首先被函数 x11Event() 截获。 如果希望在函数 x11Event() 中针对某事件进行响应,那么在响应结束后返回 TRUE。 如果函数返回 FALSE,那么该事件会被包装成 Qt 事件,发送给 Widget。
QWidget::x11Event(XEvent *) 和 QApplication::x11EventFilter ( XEvent * ) 的区别在于:前者在 XEvent 发送到特定 Qt Widget 之前,被该 Widget 截获;后者在 XEvent 发送到整个程序的主事件循环之前,被 QApplication 截获。
5. Qt 中其它与平台相关的 APIs 在每个平台上,Qt 都为 QWidget 提供了一个 winId() 函数,返回该 Qt Widget 的 window ID;QWidget 还提供了一个静态函数 find(),该函数可以返回一个特定 window ID 所对应的 Qt Widget。 我们可以将获得的 window ID 传递给 Native API 来执行平台特定的操作。
此外,针对 XWindow,Qt 提供了类 X11Info ,用以获取 XWindow 平台的信息。 例如,通过调用静态成员函数 X11Info::display() 可以获取 Qt 程序与 Xserver 建立的连接句柄。 |