Qt4.8.5——QWSServer

Qt Embedded在嵌入式Linux系统中的应用   作者:赛迪网  来源:赛迪网摘要:分析和讨论Qt/Embedded的主流版本3.x系列的底层实现技术;结合2.x版本系列和3.x版本系列,在两种不同的硬件平台(Intel PXA255开发系统与笔者自行设计的Motorola MC9328 MX1开发系统)上的移植过程,讨论Qt/Embedded的底层设备接口与应用移植技术。关键词:Qt/嵌入式Linux framebuffer 驱动接口引言随 阅读详情

一、QWSServer简介

QWSServer类在Qt中为嵌入式Linux封装了一个服务进程,继承自QObject类。

二、QWSServer文件包含

#include < QWSServer >

三、普通公有函数

函数函数说明
const QBrush & backgroundBrush () const如果没有模糊窗口,返回用于背景的画笔
const QList<QWSWindow *> & clientWindows ()返回当前顶层窗口的列表
void closeKeyboard ()关闭键盘设备
void closeMouse ()关闭鼠标设备
void enablePainting ( bool enable )使能在屏幕上绘画
void openKeyboard ()打开键盘设备
void openMouse ()打开鼠标设备
void refresh ()刷新显示
void refresh ( QRegion & region )刷新显示
void resumeMouse ()恢复鼠标
void sendIMEvent ( const QInputMethodEvent * event )发送输入法时间
void sendIMQuery ( int property )发送输入法查询
void suspendMouse ()延迟鼠标
QWSWindow * windowAt ( const QPoint & position )返回给定位置的窗口

还有29个继承自QObject的公有函数。

四、静态公有函数

函数函数说明
void addKeyboardFilter ( KeyboardFilter * filter )添加键盘过滤器
QWSServer * instance ()返回一个指向服务端实例的指针
bool isCursorVisible ()判断光标是否可见
QWSKeyboardHandler * keyboardHandler ()返回主要的键盘驱动
QWSMouseHandler * mouseHandler ()返回主要的鼠标驱动
const QList<QWSMouseHandler *> & mouseHandlers ()返回所有的鼠标驱动的列表
void processKeyEvent ( int unicode, int keycode, Qt::KeyboardModifiers modifiers, bool isPress, bool autoRepeat )处理给定的键事件
void removeKeyboardFilter ()移除键盘设备的过滤器
void screenSaverActivate ( bool activate )激活屏保
bool screenSaverActive ()判断屏保是否激活
void sendKeyEvent ( int unicode, int keycode, Qt::KeyboardModifiers modifiers, bool isPress, bool autoRepeat )发送键事件
void setBackground ( const QBrush & brush )设置背景
void setCurrentInputMethod ( QWSInputMethod * method )设置当前输入法
void setCursorVisible ( bool visible )设置光标可见性
void setDefaultKeyboard ( const char * keyboardDriver )设置默认键盘
void setDefaultMouse ( const char * mouseDriver )设置默认鼠标
void setKeyboardHandler ( QWSKeyboardHandler * driver )设置键盘驱动
void setMaxWindowRect ( const QRect & rectangle )设置窗口最大区域
void setMouseHandler ( QWSMouseHandler * driver )设置鼠标驱动
void setScreenSaver ( QWSScreenSaver * screenSaver )设置屏保
void setScreenSaverBlockLevel ( int eventBlockLevel )设置屏保块等级
void setScreenSaverInterval ( int milliseconds )设置屏保间隔时间
void setScreenSaverIntervals ( int * intervals )设置屏保间隔时间

还有7个继承自QObject的公有的静态成员函数。

五、QWSServer的详细描述

QWSServer类在Qt中为嵌入式Linux封装了一个服务进程。
当你运行Linux嵌入式Qt程序时,它要么作为服务器运行,要么连接到已经存在的服务器。服务器和客户机进程有不同的职责:客户机进程执行所有应用程序特定的操作。服务器进程负责管理客户端以及鼠标、键盘和屏幕输出。另外,服务器提供了处理输入法的函数。
在用于嵌入式Linux的Qt程序中,所有系统生成的事件都被传递给服务器应用程序,服务器应用程序然后将事件传播到适当的下位机。
注意:不需要自己构造QWSServer类,只需使用instance()函数。

六、客户端管理

当应用程序添加和移除窗口时,服务器程序维护每个窗口的信息。在用于嵌入式Linux的Qt程序中,顶层窗口被封装为一个QWSWindow对象。每个窗口都可以通过QWSWindow::client()函数来判断哪个客户端拥有它。使用clientWindows()函数检索当前顶层窗口的列表。

七、鼠标处理

当服务器应用使用Qt插件系统开始运行时,鼠标驱动被加载。鼠标驱动接收来自设备的鼠标事件,然后将每一个事件封装在QWSEvent类的实例中,然后将其传递给服务器。

八、键盘处理

当服务器应用使用Qt插件系统开始运行时,键盘驱动被加载。键盘驱动接收来自设备的键盘事件,然后将每一个事件封装在QWSEvent类的实例中,然后将其传递给服务器。

九、显示处理

当需要更新屏幕时,服务器将运行与将要更新的区域相交的所有顶层窗口,确保已关联的客户端已经更新了他们的内存缓冲区。服务器使用屏幕驱动将内存的内容复制到屏幕上。

十、输入法处理

不论服务器什么时候接收事件,它都会查询顶层窗口的堆来找到包含事件位置的窗口,然后服务器转发事件到适当的客户端。如果安装了输入法,它将作为在服务器和客户端程序之间的过滤器。

QT应用之透明背景 阅读详情

相关推荐

Qt4.8触摸屏软键盘实现:点击输入框呼出与事件过滤器详解

虚拟键盘是嵌入式触摸屏设备人机交互的重要组成部分。在没有物理键盘的工业终端上,通过Qt事件过滤器捕获输入框点击,并利用无边框悬浮窗口实现软键盘的呼出与定位,是一种高效且低耦合的解决方案。该方案不依赖系统输入法,规避了QInputContext插件在X11与QWS下的兼容性问题,仅借助Qt自带的窗口管理即可完成字符回填与焦点保持。适用于Qt4.8及类似老版本Qt工程,尤其适合需要快速集成到现有代码中的场景。本文将围绕点击输入框自动呼出软键盘的完整链路,解析事件过滤、键盘定位、焦点控制、按键插入及部署常见问题,

weixin_33946020的博客 355

QT学习笔记(二):QWSServer class

1. QWSServer Class 为 Qt for Embeded Linux 封装了一个服务进程 . 当你运行一个基于嵌入式平台的Qt程序时,它只能作为一个server或者连接到一个已经存在的server 来运行。 server和client进程有不同的职责: client进程执行应用程序特定的操作; server进程负责管理一个或多个client进程,同时负责指针操作,字符输入和

WinLin 8771

嵌入式QT程序全屏显示及消除鼠标指针方法.pdf

嵌入式QT程序全屏显示及消除鼠标指针方法.pdf 从网上收集来的

QWS Server

QT Embeded应用没有来严格的区分server和client进程,如果一个QT进程的启动参数中有-qws,那么这个进程就具有server管理功能,被称为QWS server,当然这个进程同样可以和其它的QT进程一样可以创建并显示widget,只有兼做server的功能而已。不带-qws这个参数就是QWS Client。因此任何一个基于QT的application都可以做QWS Server。

bytxl的专栏 3107

树莓派 SPI操作

扩展板配备一款0.96inch,128864分辨率的oled显示屏,通过SPI控制,先上显示效果图。由于程序过长,在这里我就不把代码全部贴出来了,只是简单讲解一下spi的操作函数。管脚如下如所有,左边方框的管脚分别为MOSI MISO SCLK,左边CE0,CE1为两个片选管脚,分别对应上图中的spidev0.0,spidev0.1两个设备。下载spidev库,复制到树莓派,并行运行如下命令解压安装。spi设备,此处设备为/dev/spi-decv0.0。在/dev路径下面,我们可以发现两个spi设备。

weixin_46529898的博客 915

不用买机械臂!用Python+ROS仿真实现RGB-D物体抓取全流程(Gazebo/MoveIt教程)

本文详细介绍了如何利用Python和ROS仿真环境(Gazebo/MoveIt)实现RGB-D物体抓取全流程,无需购买昂贵机械臂硬件。从环境搭建、机械臂模型导入、深度视觉系统配置到MoveIt运动规划,提供完整的实战指南,特别适合个人开发者和学生团队进行机械臂抓取算法验证与开发。

weixin_29061041的博客 341

QT4和QT5区别

QT4和QT5区别 上位机: 1、 在pro文件中添加QT += widgets模块,如果添加这个模块后,带有”QtGui/”的类一部分类型就不需要这个前缀了,可以直接用用本身的类名。 2、 将带有QTGui的类替换为QTWidget。 3、 将如#include <QtGui/QMainWindow>带有“QtGui/”的类替换为#include ,或者替换成#include <QtWidget/QMainWindow>,视具体情况而定。 4、 将#include <QtWe

weixin_43246170的博客 3505

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 455

Windows界面Qt4升级到Qt5中遇到的问题及解决方案

qt4升级到qt5出现的问题汇总

Amazinghao's Freespace 1318

永磁同步电机定子槽型设计实战:从梨形槽到矩形槽的NVH优化之路

本文深入探讨了永磁同步电机定子槽型设计在NVH优化中的关键作用,对比了梨形槽与矩形槽的性能差异。通过Ansys Maxwell仿真和实际案例,揭示了矩形槽在提升槽满率、降低电磁噪声方面的优势,并总结了五大设计黄金法则,为电机设计工程师提供了实用指导。

weixin_28740299的博客 494

新手必看:5分钟搞定Unitree Go1机器狗Gazebo仿真运动控制(附按键图解)

本文为新手提供了Unitree Go1机器狗在Gazebo仿真环境中实现运动控制的快速指南。通过5分钟极简配置和按键图解,帮助开发者快速掌握宇树科技明星产品的基础操作,包括环境搭建、仿真启动和运动控制技巧,适合零基础用户快速上手。

weixin_42550597的博客 300

qt4项目迁移到qt5,遇到的问题及解决办法

1.解压qt5.9.6 /root/APP_QtKit_qt596_share 2.必须使用complier4.9.2 /home/dever/Works/U411/0.GCCKIT/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux 3.报错 error: QtGui/QAction: No such file or directory #inc...

a932432866的专栏 7448

FCTA/FCTB 前方交通穿行预警/制动系统技术规范

FCTA&FCTB前方交叉路口预警制动系统是针对十字路口和停车场等"鬼探头"场景设计的驾驶辅助系统。系统在自车速度0-40km/h范围内工作,通过角雷达和摄像头检测侧向来车.

未知艺术家的博客 744

QT4.8.6移植到TQ2440

交叉编译器用的是arm-linux-gcc4.3.2。 1.安装依赖:sudo apt-get install libX11-dev libXext-dev libXtst-dev 2.下载:qt-everywhere-opensource-src-4.8.6.tar.gz,网址:http://download.qt.io/archive/qt/ 3.解压:tar zxf qt-everyw

涛声依旧的专栏 3150

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1014

华为OD面试八股真题 - 操作系统 - 1

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 1644

从Qt4.x 迁移到Qt5问题汇总

如果想把Qt4.x上面开发的软件在Qt5上面正常运行,如果什么都不做的话估计会出现各做各样的错误,笔者也是经历过这种迷茫痛,后面才发现官方已有系统发文一一提及到诸多迁移会遇到的问题以及解决办法。附上官网地址,以供参考http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5为了提高开发者的开发效率,我对这个文档大致做一个翻...

weixin_33675507的博客 759

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

iTOP6818上Qt for Embedded Linux 5.7实战部署与避坑指南

嵌入式Qt(Qt for Embedded Linux)是面向资源受限ARM平台的轻量级GUI框架,其核心原理在于绕过X11/Wayland,直接通过Framebuffer、Linux Input子系统和自定义平台插件实现硬件抽象。技术价值体现在低内存占用、确定性渲染和实时响应能力,广泛应用于工业HMI、智能终端和车载仪表等对稳定性与启动速度要求严苛的场景。然而实际落地时,开发者常因交叉编译链不匹配、Qt模块裁剪失当、Framebuffer驱动绑定失败、中文字体缺失及串口通信ABI兼容性等问题导致黑屏、触摸

weixin_34025151的博客 263

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Qt 4.7触摸屏热插拔支持:从netlink监听到设备重载的完整实现

USB设备热插拔在嵌入式Linux系统中是常见场景,尤其在工控和自助终端领域,设备节点漂移常导致触摸输入失效。Linux内核通过uevent机制广播设备变化,开发者可借助netlink socket实时监听,动态获取新设备节点,从原理上解决插拔带来的输入中断。此类技术对提升设备可维护性与现场运维效率有重要价值。然而,老旧的Qt 4.7框架并未原生支持输入设备热插拔,触摸屏拔插后应用往往无法自动恢复。针对这类场景,可通过结合netlink监听、设备节点扫描与Qt设备重载,形成一套完整且可落地的热插拔解决方案。

weixin_34315485的博客 287

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Qt4.7嵌入式Linux触摸屏热插拔失效:QWS动态重连方案

嵌入式Linux系统中,USB触摸屏等输入外设热插拔后失效是现场常见故障。其根因往往在于应用启动时一次性绑定input设备节点,缺乏对设备节点变化的感知能力。理解Linux input子系统与设备节点分配机制后,可通过udev固定符号链接解决节点漂移,借助netlink socket实时监听插拔事件,并在Qt4.7的QWS架构下调用QWSServer动态重建输入通道。这套方案适用于工控HMI、医疗设备等长期维护Qt4.7的老平台,无需升级系统即可让触摸屏热插拔后自动恢复响应,显著降低现场维护成本。

weixin_33985679的博客 169

qt4-x11-4.8.5 全部的环境变量

罗列一下qt 使用的环境变量, 好在大部分不需要配置,否则真的累死掉了。 看一种环境变量的用法: 如果环境变量为空,采用默认的设置。    if (qgetenv("QWS_MOUSE_PROTO").isEmpty()) {         QWSServer::instance()-&gt;setDefaultMouse("None");         d_ptr-&gt;mouse =...

hjjdebug的专栏 2579

Qt介绍1---QPA(Qt Platform Abstraction)

Qt是一个夸平台的库(一直宣称“Qt everywhere”),但是Qt底层不是夸平台的。比如:Qt中Gui部件的核心类QWidget,该类除了qwidget.h 和 qwidget.cpp两个原文件外,还有 kernel/qwidget_mac.mmkernel/qwidget_qws.cppkernel/qwidget_win.cppkernel/qwidget_s60.cppkernel/q...

weixin_34208185的博客 735

QT学习杂记

1:隐藏菜单栏要隐藏Qt程序的菜单栏很容易,例如,MyMainWindow继承自QMainWindow,那么在MyMainWindow的构造函数里添加下面一句,就可以了:menuBar->setVisible(false); 不过这里有一个问题,有时候隐藏了菜单栏后,菜单栏里面的快捷键都不能用了。原因是只将这些QAction对象添加到menuBar的菜单里面。当菜单栏隐藏了,他们就不能发送triggered()信号。解决方法很简单,将这些QAction对象再添加到其他可见的QWidget对象里面。例如:QM

gameboy12615的专栏 2354

qt中隐藏鼠标

<br />最近移植QT,因为在很多情况下都不许要使用到鼠标,所以对这个问题做了一下研究。<br /><br /><br /> 1.在运行程序的加上参数-nomouse,这样,当前启动的程序就不会出现鼠标光标。<br />2.在编译QT库的时候添加编译选项QT_NO_CURSOR,这样cursor相关的代码就不会被编译进去,自然鼠标光标也不会出现在程序中。具体做法是在编译的时候加上-no-feature-CURSOR。据说在编译的时候加-nomouse也可以,但是这样触摸屏也无法点击。3.只希望在某个QWi

sydnash的专栏 1888

QT:Ubuntu下 嵌入式Qt开发环境的搭建

转自:http://blog.csdn.net/lpp0900320123/article/details/24876159 一、qt的版本介绍     按照不同的图形界面来划分,分为四个版本: Win32版:适用于windows平台; X11版:适用于各种X系统的Linux和Unix平台; Mac版:适用于苹果的MacOS; Embedded版:适用于具有帧缓冲(Frame bu

2188

Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列)

Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列)  QT/E 3.x系列比QT/E 2.x系列有非常大的改进,大大提高了开发进度,不再使用tmake,安装也更简单。但目前在网上关于QT/E 3.x系列的介绍还是比较少,所以本文介绍一下QT/E 3.x系列的安装。一、建立ARM交叉编译工具链       在

xzdwfwt111的专栏 1787
上一篇: C语言——格式化输入和输出函数
下一篇: 存储系统
夕水2018
博客等级 码龄9年 23粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值