失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Qt 控制 Windows 系统触摸键盘显示隐藏 自定义添加可编辑控件

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

时间:2023-06-16 08:51:30

相关推荐

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

前言

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

头文件

#ifndef KEYBOARDMGR_H#define KEYBOARDMGR_H#include <QVector>#include <QObject>class KeyboardMgr : public QObject{Q_OBJECTpublic: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();}

致谢

参考文档:/liujing_sy/article/details/100535286

如果觉得《Qt 控制 Windows 系统触摸键盘显示隐藏 自定义添加可编辑控件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。