本发明涉及图形界面开发技术领域,特别是涉及一种实现linux共享库中操作图形界面的方法及介质。
背景技术:
qt作为一种成熟的跨平台c 图形用户界面开发框架已被广泛应用到linux下的应用程序开发中,在实际的编码过程中主程序首先需要调用特定方法完成qt初始化工作。较为麻烦的是,若主程序不使用qt开发,但依赖的软件开发工具包(sdk)所提供的的共享库(以.so为后缀)或者我们自己开发的共享库需要依赖qt来完成图形界面的创建、绘制等功能,若不采用合适的方法去完成qt资源初始化是无法满足开发和使用需求的。
借助qt开发的图形界面应用程序,在其main函数中需要实例化qapplicati-on对象,并执行exec接口建立起主事件循环,而sdk提供的共享库中通常不会去实例化该对象,更不会去尝试建立起主事件循环,这样就导致在实际运行时,主程序在加载第三方共享库后,试图调用库中的接口来创建界面时,产生崩溃无法正常使用。
目前,sdk的提供者针对上述问题,通常采取的办法是在提供so库的同时,也会提供自己的应用程序,目的是为了将图形界面绘制和事件响应工作放在该应用程序中,基本上是一种“主应用程序(非qt开发)-共享库(.so)-界面应用程序(qt开发)”模式,这种模式本身是一种跨进程通信的方式,开发者本身需要关注两个进程的启动、运行、销毁以及问题定位,维护难度较大。
技术实现要素:
本发明主要解决的技术问题是提供一种实现linux共享库中操作图形界面的方法及介质,能够在主程序不使用qt的情况下,在共享库中去动态、实时地处理图形界面任务。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种实现linux共享库中操作图形界面的方法,包括以下步骤:
客户端加载共享库,通过初始化接口打开服务端并将服务端初始化;
服务端监听客户端连接请求,收到连接请求后,服务端建立与客户端的连接并开启指令监控线程;
客户端将报文数据打包后发送至服务端,服务端指令监控线程接收并解析报文数据,在服务端界面上执行与报文数据相应的操作后,将执行结果打包发送至客户端;
客户端调用断开连接接口关闭与服务端的连接,服务端停止指令监控线程。
进一步,服务端初始化包括以下步骤:在进程中完成qapplication以及主窗体对象的实例化工作,并建立主事件循环。
进一步,服务端完成初始化的同时设置连接端口,监听客户端的连接请求。
进一步,服务端建立与客户端的连接后服务端监控与客户端的连接状态以及报文传输状态,当连接状态或报文传输状态异常时,服务端退出。
一种实现linux共享库中操作图形界面的介质,用于储存实现linux共享库中操作图形界面的方法所用的计算机软件指令,其包含用于执行上述为实现linux共享库中操作图形界面的方法所设计的程序。
本发明的有益效果是:本发明结合socket编程技术,使用socket作为共享库和qt程序连接的数据通道,方便管理两个进程的运行状态,有效避免异常情况导致的进程不退出和阻塞问题;socket也支持跨pc使用,可支持远程调用;能够实现跨进程通信,满足非qt应用程序对于界面的需求。
附图说明
图1是本发明一种实现linux共享库中操作图形界面的方法的流程图。
具体实施方式
下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
请参阅图1,本发明实施例包括:
一种实现linux共享库中操作图形界面的方法,共享库作为客户端,可执行程序作为服务端,主程序调用共享库中的接口建立起socket连接,共享库的调用者不再依赖qt即可操作窗体,服务端和客户端在一方失去连接后可作出相应处理,不影响整个程序的运行;该方法具体包括以下步骤:
客户端加载共享库后,执行初始化(initial)接口来开启服务端进程,在进程中完成qapplication以及主窗体对象的实例化工作,并执行qappl-ication::exec建立起主事件循环,用于响应窗体相关事件,实现进程的常驻状态。
服务端在完成初始化工作的同时进行设置端口,监听来自客户端的连接请求;在客户端调用connect接口建立与服务端的连接后,服务端会开启指令监控线程来接收、解析客户端的报文数据并在界面上执行响应相关操作,也会将执行结果以及相关数据以特定报文格式发送给客户端。任何一个功能接口(interface…)均以“客户端打包发送-服务端接收解析-服务端执行-服务端执行结果打包发送-客户端接收解析”的流程实现的。
客户端在调用断开连接接口(disconnect)后,服务端关闭socket连接,停掉指令监控线程;服务端在接收、发送报文异常时,例如客户端异常退出导致socket连接断开,此时服务端程序随之主动退出。
基于与前述实施例中实现方法同样的发明构思,本说明书实施例还提供一项所述实现linux共享库中操作图形界面的介质,用于储存实现linux共享库中操作图形界面的方法所用的计算机软件指令,其包含用于执行上述为实现linux共享库中操作图形界面的方法所设计的程序。
本发明方法涉及计算机软件技术、qt图形界面开发、网络编程、linux操作系统等。应用产品包含以linux作为操作系统的终端设备以及软件产品等;在“非qt开发的主应用程序-共享库-qt开发的界面应用程序”模式基础上结合socket编程技术,实现跨进程通信,满足非qt应用程序对于界面的需求。socket是一种非常成熟的面向客户端和服务端开发的编程技术,不仅支持跨进程通信,还支持跨计算机通信,借助socket可以轻松获取客户端和服务端的之间的连接状态从而判断进程是否在正常运行,从而减少程序开发和维护的难度。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
1.一种实现linux共享库中操作图形界面的方法,其特征在于,包括以下步骤:
客户端加载共享库,通过初始化接口打开服务端并将服务端初始化;
服务端监听客户端连接请求,收到连接请求后,服务端建立与客户端的连接并开启指令监控线程;
客户端将报文数据打包后发送至服务端,服务端指令监控线程接收并解析报文数据,在服务端界面上执行与报文数据相应的操作后,将执行结果打包发送至客户端;
客户端调用断开连接接口关闭与服务端的连接,服务端停止指令监控线程。
2.根据权利要求1所述的一种实现linux共享库中操作图形界面的方法,其特征在于:服务端初始化包括以下步骤:在进程中完成qapplication以及主窗体对象的实例化工作,并建立主事件循环。
3.根据权利要求2所述的一种实现linux共享库中操作图形界面的方法,其特征在于:服务端完成初始化的同时设置连接端口,监听客户端的连接请求。
4.根据权利要求3所述的一种实现linux共享库中操作图形界面的方法,其特征在于:服务端建立与客户端的连接后服务端监控与客户端的连接状态以及报文传输状态,当连接状态或报文传输状态异常时,服务端退出。
5.一种实现linux共享库中操作图形界面的介质,其特征在于,用于储存为上述权利要求1~4中任一项所述实现linux共享库中操作图形界面的方法所用的计算机软件指令,其包含用于执行上述为实现linux共享库中操作图形界面的方法所设计的程序。
技术总结