目录
1、前言
使用QT C++在带显示器的Linux系统 开发板上(树莓派等)编写操作UI界面时,很多时候都需要一个软键盘来输入文字、符号等(在Windows系统只有少数时候需要用软键盘)。这个时候使用QT自带的软键盘就可能会出现很多显示问题,大小不适、显示文本乱码等等。
//QT自带的软键盘激活
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);//设置为默认键盘
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
当然,这个时候还可以查看你使用的liunx系统是否自带软键盘,你可以启动这个自带的,但是很多情况下还是会出现上面的问题:显示乱码、大小不适。
最后,我们最佳方案就是自己动手编写一个软键盘,或者在网络上找一个已经实现的例程。但是我在网络上没有找到好用的软键盘例程,都有很大得缺陷,所以还是决定自己编写一个软键盘,这样也对于所对应得项目或者开发板具有更好兼容性。
2、界面设计
这里建议先在能使用Qt Creator的系统上做好键盘得UI界面,因为在这个官方得编辑编译器中,有对应得UI设计工具界面,这个界面能够快速的做出你需要的界面的模样,并自动生成.ui文件。界面样式就按照手机输入法做一个大概的样子就行了,例如我的:
这里的选词我使用的label,然后结合link标签使用,点击时就可以取出对应的文字了,你也可以使用pushbutton来替代,只要最后能达到目的就行。
3、英文、数字的输入
英文、数字以及符号的输入很简单,使用pushbutton,在对应的按钮上添加对应的文本,点击该按钮时获取该文本即可进行对应的输入操作,这里按钮很多建议使用Qt中的按钮组类(QButtonGroup)来管理按钮,我使用了两个按钮组来管理对应的输入操作:
QButtonGroup *bigKey26; //26键
QButtonGroup *numberKey; //数字键
bigKey26 = new QButtonGroup(this);//26键按钮组初始化
connect(bigKey26,SIGNAL(buttonClicked(int)),this,SLOT(bigKey26Slot(int)));
for (int var = 1; var <= 26; ++var) {
QPushButton *pushButton = this->findChild<QPushButton *>("bigKeyboardBtn_" + QString::number(var));
if(pushButt