【发布时间】:2018-09-18 22:52:38
【问题描述】:
我一直在寻找一种方法让我的 Qt 应用程序知道 VNC 连接是否处于活动状态。
我如何/可以获得 VNC 连接状态?
这是一个嵌入式 Linux 应用程序。
【问题讨论】:
标签: linux qt qt4 vnc vnc-server
我一直在寻找一种方法让我的 Qt 应用程序知道 VNC 连接是否处于活动状态。
我如何/可以获得 VNC 连接状态?
这是一个嵌入式 Linux 应用程序。
【问题讨论】:
标签: linux qt qt4 vnc vnc-server
一个起点是查看src/plugins/gfxdrivers/vnc/qscreenvnc_p.h 的Qt 源代码;声明了一个类 QVNCServer,它还定义了一个 isConnected() 方法,它似乎完全可以满足您的需求。
然而,关键点是从您的应用程序代码中访问该方法;正如可以从文件名后缀_p 中扣除的那样,该标头中的类是Qt 库的私有(读取:内部),而不是公共接口的一部分。因此,它们没有记录在参考资料中,而且我还没有找到获取当前QVNCServer 对象的公共方法,也没有找到任何其他可以提供指向该对象的指针的 VNC 相关实例。
我的建议是您从src/plugins/gfxdrivers/vnc/qscreenvnc_qws.h 中的相关公共接口开始,它将服务器类合并为QProxyScreen 子类的一部分,然后从那里开始了解如何创建VNC 服务器实例,以及指向它的指针的处理位置。您可以向QVNCScreen 接口添加一个方法,该方法允许您从应用程序中获取连接状态。但是,您必须修补 Qt 源代码并重建库。
在应用程序代码中获取QScreen 对象很容易:
foreach(const QScreen* s, QScreen::instance()->subScreens())
{
if(s->classId() == QScreen::VNCClass)
//Here you can cast the screen instance and call a method on it
}
【讨论】: