Qt 平台(QPA)相关API实现细节分析记录。
通过读取 Qt5 实现了解到: 各个桌面平台适配统一都是通过 QPlatformIntegration
加载对应平台后端插件实现的
比如linux 桌面端 X11/xcb 接口的剪切板实现:
先QGuiApplication
加载QPlatformIntegration
对应QPA平台后端 调用 src/plugins/platforms/xcb/qxcbmain.cpp 中create 实现集成。
然后通过 QXcbClipboard
实现抽象的QClipboard相关操作
进一步分析源码,发现 plugins/platforms/xcb/qxcbclipboard.cpp 实现调用xcb_get_propert_value 和读取系统存储的selection (值:_QT_SELECTION为Qt内部使用)并调用xcb_convert_selection 转换为CLIPBOARD 即系统剪切板实现。并且在Qt库中会自行判断当前进程是否拥有该selection所有权,如果有则不从系统selection获取,直接从缓存获取。