当前位置: 首页 > news >正文

网页设计与网站建设完全实战手册中国建筑业发展现状

网页设计与网站建设完全实战手册,中国建筑业发展现状,wordpress文章固定字段,国际形势最新消息目录 1、前言 2、界面设计 3、英文、数字的输入 4、符号的输入 5、中文的输入 6、中文拼音库的选择 7、其他 8、结语 1、前言 使用QT C在带显示器的Linux系统 开发板上(树莓派等)编写操作UI界面时,很多时候都需要一个软键盘来输入文字…

目录

1、前言

2、界面设计

3、英文、数字的输入

4、符号的输入

5、中文的输入

6、中文拼音库的选择

7、其他

8、结语

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(pushButton != nullptr){bigKey26->addButton(pushButton,var);}}numberKey = new QButtonGroup(this);//数字键按钮组初始化connect(numberKey,SIGNAL(buttonClicked(int)),this,SLOT(numberKeySlot(int)));for (int var = 0; var <= 9; ++var) {QPushButton *pushButton = this->findChild<QPushButton *>("numberKekboard_" + QString::number(var));if(pushButton != nullptr){numberKey->addButton(pushButton,var);}}//26键功能函数,这里有英文,也有中文
void KeyBoardWidget::bigKey26Slot(int id)
{QString curBtnText = this->findChild<QPushButton *>("bigKeyboardBtn_" + QString::number(id))->text();if(bigKeyLanguagesFlag == 0){/** ********** 英 ***********/if(bigKey26UpAndDownFlag == 0){//小curBtnText = curBtnText.toLower();}else if(bigKey26UpAndDownFlag == 1){//大curBtnText = curBtnText.toUpper();}
//        this->addTextContentOfLabel(ui->label, "ret1-label", curBtnText);this->curFocusWidgetInsertText(curBtnText); //在当前焦点控件光标处添加文本}else if(bigKeyLanguagesFlag == 1){/** ********** 中 ***********/curBtnText = curBtnText.toLower();ui->label_9->setText(ui->label_9->text() + curBtnText);//        dictRetList = QStringList{"结果1", "结果2", "结果3", "结果4", "结果5", "结果6", "结果7", "结果8", "结果9", "结果10", "结果11", "结果12"};dictRetList = pinyinToHanzi(ui->label_9->text());this->showDictRetListToLabel(1);}
}//数字键的功能函数
void KeyBoardWidget::numberKeySlot(int id)
{QString curBtnText = this->findChild<QPushButton *>("numberKekboard_" + QString::number(id))->text();this->curFocusWidgetInsertText(curBtnText);//在当前焦点控件光标处添加文本
}

4、符号的输入

        符号按键的功能比较简单,我使用的是多个信号连接一个槽的机制来管理,区分按钮的方式是使用sender()来获取当前发送信号的按键。这里需要注意的是特殊符号&需要使用&&来转义显示,否则对应的按钮上不会显示,故在处理时需要判断一下。

connect(ui->numberKekboardPoint, &QPushButton::clicked, this, &KeyBoardWidget::on_symbolBtn_clicked);for (int var = 1; var <= 40; ++var) {QPushButton *curSymbolBtn = this->findChild<QPushButton *>("symbolBtn_" + QString::number(var));if(curSymbolBtn != nullptr){connect(curSymbolBtn, &QPushButton::clicked, this, &KeyBoardWidget::on_symbolBtn_clicked);}}void KeyBoardWidget::on_symbolBtn_clicked()
{QPushButton *curSymbolBtn = qobject_cast<QPushButton *>(sender());if(curSymbolBtn != nullptr){QString curSymbolStr = curSymbolBtn->text();if(curSymbolStr.isEmpty()){return;}if(curSymbolStr == "&&"){curSymbolStr = "&";}this->curFocusWidgetInsertText(curSymbolStr);}
}

5、中文的输入

        在软键盘的编写中,这个是最费时间的,也不是说多难,难的是找到一个可使用的开源的中文拼音库,很难找找了好几天才找到。找到拼音库后,移植到自己的代码中进行拼音的输入,这里我用了一个label来显示中文的拼音,然后从这里获取,如上在英文的输入中已有获取方式。

    if(bigKeyLanguagesFlag == 1){/** ********** 中 ***********/curBtnText = curBtnText.toLower();ui->label_9->setText(ui->label_9->text() + curBtnText);//        dictRetList = QStringList{"结果1", "结果2", "结果3", "结果4", "结果5", "结果6", "结果7", "结果8", "结果9", "结果10", "结果11", "结果12"};dictRetList = pinyinToHanzi(ui->label_9->text());this->showDictRetListToLabel(1);}

这里我已经将拼音库的使用封装为函数pinyinToHanzi(),传入拼音即可返回对应的汉字列表。获取到汉字列表后,使用showDictRetListToLabel()函数来更新显示,这个函数将列表以5为单位分页,传入的数字即显示的页码。前面说过,我的结果显示在label中的,所以使用link事件来获取对应的文字和事件,设置链接函数如下:

void KeyBoardWidget::setTextContentOfLabel(QLabel *label, QString linkStr, QString text)
{label->setText(QString("<a href = '%1' style=\"text-decoration: none;\" style=\"color: white;\">%2</a>").arg(linkStr).arg(text));
}

6、中文拼音库的选择

        这里可以选择libpinyin或者googlepinyin,前者在Linux系统上使用很方便,直接使用apt下载即可,后者需要下载源码自行进行引用。注意的是libpinyin在Windows系统上使用起来很麻烦,建议使用googlepinyin。

libpinyin下载方式:

Ubuntu/Debian:
sudo apt-get install libpinyin-dev
Fedora:
sudo dnf install libpinyin-devel源码下载:https://github.com/libpinyin/libpinyin

googlepinyin下载:

https://github.com/aron566/google_pinyinim

下载完成后,他们在github中都有使用示例 ,照着用就可以,不需要额外的什么,但是要注意词库的路径要正确。

7、其他

再补充几个关键点:

//防止当前窗口获取焦点,导致输入控件丢失
this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool | Qt::WindowDoesNotAcceptFocus);
//获取当前焦点在哪个控件
curFocusWidget = QApplication::focusWidget();
//判断焦点控件是否是QLineEdit 类型
if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(curFocusWidget)) {curText = lineEdit->text();
} 
//清除当前焦点,关闭键盘的时候会用到
if(curFocusWidget != nullptr){curFocusWidget->setFocusPolicy(Qt::ClickFocus);curFocusWidget->clearFocus();curFocusWidget = nullptr;
}
//多label链接一个link事件槽
connect(curlabel, &QLabel::linkActivated, this, &KeyBoardWidget::on_label_1_linkActivated);
//使用libpinyin获取的结果格式const char *word
retList.append(QString(word));
//使用googlepinyin获取的结果格式ime_pinyin::char16 buf[256]
retList.append(QString::fromUtf16(buf));

8、结语

        关于其他的布局或功能实现、结果获取后放入目标控件等等,就不过多赘述了,还有问题请留言,最后放一张我的效果图片:

http://www.yayakq.cn/news/104409/

相关文章:

  • 大连福佳新城2026年建站吗建网360 网站建设
  • 网站源码在哪html5医院网站
  • 怎么在服务器上面建设网站深圳做网站的公司 cheungdom
  • aspcms网络公司官方网站源码网站还能赚钱吗
  • 网站10月份可以做哪些有意思的专题沃尔玛官方网站查余额
  • 外贸网站如何引流网站宣传页面
  • 网站 展示板怎样自己创造网站
  • 重庆哪家制作网站好wordpress 添加标签插件
  • 广东建设网站首页网站的需求分析怎么写
  • 女生做网站前端设计师雄安移动网上营业厅
  • 自助免费网站建设平台深圳百度网站优化
  • 做建材交易网站的上市公司织梦网站定制
  • 上传wordpress网站阿里云手机网站建设
  • 网站跟软件有什么区别是什么wordpress 布局推荐
  • 推荐专业做网站公司怎么找上海网站建
  • 南京网站推广营销公司哪家好网站背景图片优化
  • 化妆品网站设计方案金昌北京网站建设
  • 英文网站群建设松江老城做网站
  • 网站个人备案转企业备案com表示商业网站
  • 犀牛云做网站一年多少钱谷歌play商店
  • aspcms做双语网站修改配置拆车件网上商城
  • 锦州宝地建设集团有限公司网站诺德中心做网站
  • 如今做哪些网站能致富广州做网络服装的网站建设
  • 安全网站建设局网站建设合同
  • 宿迁宿城区屠园乡网站建设品牌网站建设熊掌号
  • 千瓜数据seo营销推广平台
  • 做网站着用什么电脑昆明网站设计都需要设计什么
  • 海外 推广网站阿里云服务器免费体验
  • 佛山做企业网站公司康体设备网站建设
  • 如何有效的推广网站一个好网站设计