linux下基于qt软键盘的设计

       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]的值。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章