linux下基于qt软键盘的设计
2014-04-05 19:51
239 查看
Qt软键盘,也就是一大堆toolButton堆积起来的对话框,把边框隐藏掉就行了。最简单的键盘如图:
复杂功能软键盘的设计都是基于相同的原理。
首先是要求点击编辑框的时候就弹出软键盘,这程序中用到了事件过滤器,主要有安装事件过滤器和eventFilter(QObject *obj, QEvent *event)函数的实现。在登陆界面中,安装事件过滤器的代码如下:
//安装事件过滤器
ui->pwdLineEdit->installEventFilter(this);
ui->usrLineEdit->installEventFilter(this);
安装过程是在登陆界面的构造函数中实现的。
如果在eventFilter(QObject *obj, QEvent *event)处理了对应事件,就返回true,告诉系统不需要再处理了,否则就返回false。将软键盘编辑框内的内容传送到登陆界面的编辑框内的槽函数的连接也在此函数中实现,需要注意的是,在连接函数中使用keyboard之前需要先new一个实例,否则会有出现错误报告工具的提示框。
在设计软键盘的时候涉及到QSignalMapper的应用,QSignalMapper可以看做是信号的翻译和转换器,可以把按钮信号(无参数)转换成带QString参数(按钮的名称)的信号,然后依靠QString类型的参数进行处理操作。主要用到三个步骤:
1.首先建立一个无参数的连接:
connect( button, SIGNAL( clicked() ), signalMapper, SLOT( map() ) );
2.然后我们进行转换:
signalMapper->setMapping( button, texts[i] );
这里把信号转换为QString参数类型的信号,text[i]的内容就是要要传递的参数。
3.最后我们把信号转发到最终的处理函数handle(信号槽)
connect( signalMapper, SIGNAL( mapped(const QString &) ), this, SLOT(handle(const QString &)) );
handle的参数就是由QSignalMapper转换过来的QString类型的参数text[i]的值。
复杂功能软键盘的设计都是基于相同的原理。
首先是要求点击编辑框的时候就弹出软键盘,这程序中用到了事件过滤器,主要有安装事件过滤器和eventFilter(QObject *obj, QEvent *event)函数的实现。在登陆界面中,安装事件过滤器的代码如下:
//安装事件过滤器
ui->pwdLineEdit->installEventFilter(this);
ui->usrLineEdit->installEventFilter(this);
安装过程是在登陆界面的构造函数中实现的。
如果在eventFilter(QObject *obj, QEvent *event)处理了对应事件,就返回true,告诉系统不需要再处理了,否则就返回false。将软键盘编辑框内的内容传送到登陆界面的编辑框内的槽函数的连接也在此函数中实现,需要注意的是,在连接函数中使用keyboard之前需要先new一个实例,否则会有出现错误报告工具的提示框。
在设计软键盘的时候涉及到QSignalMapper的应用,QSignalMapper可以看做是信号的翻译和转换器,可以把按钮信号(无参数)转换成带QString参数(按钮的名称)的信号,然后依靠QString类型的参数进行处理操作。主要用到三个步骤:
1.首先建立一个无参数的连接:
connect( button, SIGNAL( clicked() ), signalMapper, SLOT( map() ) );
2.然后我们进行转换:
signalMapper->setMapping( button, texts[i] );
这里把信号转换为QString参数类型的信号,text[i]的内容就是要要传递的参数。
3.最后我们把信号转发到最终的处理函数handle(信号槽)
connect( signalMapper, SIGNAL( mapped(const QString &) ), this, SLOT(handle(const QString &)) );
handle的参数就是由QSignalMapper转换过来的QString类型的参数text[i]的值。
相关文章推荐
- 基于Gpio的Linux字符型驱动设计--…
- 学习LSM(Linux security module)之四:一个基于LSM的简单沙箱的设计与实现
- [设计]基于ARM9与Linux系统的数控切割机
- zynq-7000系列基于zynq-7015的vivado初步设计之linux下控制PL扩展的光以太网(1000BASE-X)
- 基于linux的数字电视机顶盒几种升级方式的设计与实现
- 基于ARM+LINUX的无线视频采集系统设计----------搭建嵌入式web服务器
- 我的毕业论文——基于linux集群技术的校园网络服务平台的设计与实现
- 基于Linux操作系统的 智能家居的设计
- 基于Linux的智能家居的设计(5)
- 嵌入式系统/ARM技术:基于Linux的嵌入式网络摄像机设计
- 【转】基于Qt, TUIO和TSLIB的嵌入式Linux下的多点触摸设计
- 基于Linux的智能家居的设计(4)
- 基于UDP协议和GTK+用户界面的Linux Socket端到端通信程序设计 详细设计文档
- 基于S3C2440和嵌入式Linux的扩展串口设计
- 基于嵌入式Linux的SOHO路由器设计
- 基于Linux和S3C2410的嵌入式图象传输设计
- 基于Linux的智能家居的设计(2)
- 基于UDP协议和GTK+用户界面的Linux Socket端到端通信程序设计 详细设计文档
- 基于嵌入式Linux的SOHO路由器设计
- 基于Linux的SoPC应用系统设计