前言

最近在做触摸屏的一款软件,需要使用 Windows 的触摸键盘控制,费了不少功夫,查了网上很多资料,终于搞定了。现在贴出来代码,以期帮助更多的人。

头文件

#ifndef KEYBOARDMGR_H
#define KEYBOARDMGR_H#include <QVector>
#include <QObject>class KeyboardMgr : public QObject
{Q_OBJECT
public:KeyboardMgr(void);// 添加可编辑控件基类名称void addEditWidget(const QString _className);protected:bool eventFilter(QObject* _watched, QEvent* _event);private:void showKeyboard(void);void hideKeyboard(void);void keyBoardCtrl(QObject* _obj);private:QVector<QString> widgets_;
};#endif // KEYBOARDMGR_H

实现文件

#include <Windows.h>
#include <QEvent>
#include <QApplication>
#include "KeyboardMgr.h"#pragma comment(lib, "user32.lib")const char* k_TabTip = "IPTIP_Main_Window";
const char* k_TabTipPath = "C:\\Program Files\\Common Files\\microsoft shared\\ink\\TabTip.exe";KeyboardMgr::KeyboardMgr(void)
{qApp->installEventFilter(this);
}void KeyboardMgr::addEditWidget(const QString _className)
{if (!_className.isEmpty()){widgets_.append(_className);}
}void KeyboardMgr::showKeyboard(void)
{QString command("open");QString keyboardpath(k_TabTipPath);ShellExecute(nullptr,(LPCWSTR)command.utf16(),(LPCWSTR)keyboardpath.utf16(),nullptr,nullptr,SW_SHOWNORMAL);
}void KeyboardMgr::hideKeyboard(void)
{HWND hwnd = FindWindow((LPCWSTR)QString(k_TabTip).utf16(), NULL);if (hwnd != nullptr){SendMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0);}
}void KeyboardMgr::keyBoardCtrl(QObject* _obj)
{if (_obj == nullptr){return;}bool find = false;foreach (QString widget, widgets_){if (_obj->inherits(widget.toLocal8Bit().data())){find = true;break;}}if (find){showKeyboard();}else{hideKeyboard();}
}bool KeyboardMgr::eventFilter(QObject* _watched, QEvent* _event)
{if (_watched->isWidgetType() && _event->type() == QEvent::FocusIn){keyBoardCtrl(_watched);}return QObject::eventFilter(_watched, _event);
}

使用示例

#include "MainWindow.h"
#include "KeyboardMgr.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);KeyboardMgr mgr;mgr.addEditWidget("QLineEdit");MainWindow w;w.show();return a.exec();
}

致谢

参考文档:https://blog.csdn.net/liujing_sy/article/details/100535286

Qt 控制 Windows 系统触摸键盘显示隐藏,自定义添加可编辑控件相关推荐

  1. windows系统电脑怎么显示隐藏的文件夹及文件

    下面介绍两种方式解决windows系统电脑无法显示隐藏的文件夹及文件. 控制面板中的文件夹选项 首先先介绍怎么通过控制面板中的文件夹选项来修改显示隐藏的文件夹及文件. 打开控制面板可以通过win菜单打 ...

  2. Android 软键盘显示隐藏判断

    Android软键盘始终感觉是个BUG,难缠 用起来不顺手,每次应用版本涉及到相关问题,总是很尴尬 只能静下心好好梳理一下 1. 软键盘显示原理 软键盘的本质是什么?软键盘其实是一个Dialog In ...

  3. Pango+Qt 列举windows系统字体

    欢迎关注公众号可以查看更多完整文章 可以显示Windows上所安装的所有字体的名称. 使用Qt显示数量和名称. 需要依赖Pango.Cairo.glib三个库,获取三个库,获取可以参见我的其他博客. ...

  4. 联想笔记本怎么调出命令提示符_联想笔记本win7系统下怎么显示隐藏的分区

    最近有联想笔记本win7系统用户在进行磁盘管理的时候,发现联想的OEM分区有14G这么多,可是我们却无法通过正常的文件管理功能进入隐藏分区,那么要怎么显示隐藏的分区呢?接下来给大家分享一下联想笔记本w ...

  5. java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

    目录 1.使用 Java 来控制 Windows 系统音量,使用 JNA 调用 windows 底层 API 因为有点麻烦,所以这里采用纯 Java API结合 VBS 脚本的方式进行控制. 2.可以 ...

  6. Windows系统图片不显示缩略图如何解决

    Windows系统图片不显示缩略图如何解决 文章目录 Windows系统图片不显示缩略图如何解决 一.问题所在 二.解决问题 三.最后我想说 一.问题所在 最近学习的时候,突然出现了图片不显示缩略略图 ...

  7. win10下如何隐藏Linux盘符,Win10专业版系统下如何显示隐藏盘符

    在win10专业版系统中,很多用户都会在磁盘中保存很多重要的文件,考虑到安全问题,有部分用户会将保存有重要信息的盘符隐藏起来,但是有时候想要打开隐藏盘符,却不知道要如何显示隐藏盘符,其实方法很简单,这 ...

  8. Windows窗体学这一篇就够了(C#控件讲解)

    目录 一.Form窗体 1.1窗体的创建和删除 1.添加窗体 2.删除窗体 3.多窗体的使用 1.2.窗体属性 1.2.1更换窗体图标 1.2.2隐藏窗体的标题栏(FormBorderStyle属性) ...

  9. trackbar控件显示刻度值_安卓自定义电平流图形控件

    引言 在无线电监测方面,需要对信号进行展示,其中一项数据就是设备返回的电平数据,需要对其实时展示,一图胜千言,最好且最直观的方式就是图表展示,这样对其信号强弱的变化,就可以一目了然. 本文主要讲安卓版 ...

最新文章

  1. 「龙书」之后,又一编译佳作诚招译者
  2. configure: error: mcrypt.h not found. Please reins
  3. 借助亚马逊S3和RapidMiner将机器学习应用到文本挖掘
  4. Python基础入门:常用的os操作
  5. GCC + pthread
  6. Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串:
  7. 屏幕录像软件Community Clips Recorder简介及其使用技巧
  8. 9.判断回文数(力扣leetcode) 博主可答疑该问题
  9. offsetTop和scrollTop差异
  10. php数组和字符串转换
  11. Excel VBA 设计调查问卷
  12. 关于响应式布局,你必须要知道的
  13. 服务器虚拟化的分类宿主模型,虚拟化分类
  14. Centos实现软路由
  15. Python Flask学习_使用flask-login实现认证蓝本(二)
  16. 微信小游戏_2、demo入门
  17. 摄影的工作原理:相机,镜头等
  18. 【教程+实例】Python爬虫实例——用Python爬虫爬取bangumi上的galgame资讯
  19. 网络设置巨形帧_网络 – 升级到千兆网络 – 启用巨型帧
  20. 论文阅读:Adaptive Graph Convolution for Point Cloud analysis

热门文章

  1. 网页icon的设计规范
  2. 【引用】稳压二极管扩流电路
  3. 陶渊明劝学——勤学如春起之苗
  4. github如何恢复失误删除的项目
  5. 第一台通用计算机的名称,世界上第一台计算机的名称是什么
  6. JavaScript:实现求数字的绝对值算法(附完整源码)
  7. 江苏省2021年高考成绩查询有分数吗,江苏省2021年高考分数线预测 本科线是多少...
  8. 智慧社区管理系统08(维修和柱状图显现)
  9. 2021-08-06 leetcode每日一题 BFS+状态压缩,无向图的
  10. RBAC经典角色权限系统设计五张表及拓展应用