首页 > 编程语言 >Qt Virtual Keyboard C++集成与实现(QWidget)

Qt Virtual Keyboard C++集成与实现(QWidget)

时间:2024-02-27 09:11:42浏览次数:15  
标签:lang Qt qtvirtualkeyboard C++ 键盘 Virtual QWidget Keyboard

一. 设置

1.配置所需语言
1). 通过Qt Creator配置
打开Qt工程文件,点开左侧 Projects->Build->Build Steps->qmake->Additional arguments
在 Additional arguments 增加配置参数:

CONFIG+="lang-ar_AR lang-da_DK lang-de_DE lang-en_GB lang-es_ES lang-fa_FA lang-fi_FI lang-fr_FR lang-hi_IN lang-it_IT lang-ja_JP lang-ko_KR lang-nb_NO lang-pl_PL lang-pt_PT lang-ru_RU lang-sv_SE lang-zh_CN lang-zh_TW"

按需选择所需语言,当然如果简单点配置为所有语言,则如下:

CONFIG+=lang-all

2.配置所需语言
2). 直接通过命令行配置并生成makefile文件

/opt/Qt5.10.1/5.10.1/gcc_64/bin/qmake qtvirtualkeyboard.pro -spec linux-g++ 'CONFIG+=lang-all'

 

通过 -spec 参数指定为linux平台。

 

3.virtualkeyboard.pro配置文件增加:

LIBS+=-L../../lib
  1. 这么做的原因是因为集成汉语、日语等带有三方库的语言时,最后生成qtvirtualkeyboard时会找不到已生成的三方库,我们只需添加路径即可解决这个问题。

二. C++集成

为了在传统 QWidget 程序里(和QML相对应)也使用 Qt Virtual Keyboard,我们只需在程序的入口处加入如下代码即可:

qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

最后,程序看起来像这样

 1 int main(int argc, char *argv[])
 2 {
 3     qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
 4 
 5     QApplication a(argc, argv);
 6     MainWindow w;
 7     w.show();
 8 
 9     return a.exec();
10 }

三. 定制键盘大小和位置

我们需要更改 InputPanel.qml 文件

 1 Item {
 2     id: inputPanel
 3 
 4     property int screenHeight: Screen.desktopAvailableHeight; 
 5     anchors.fill: parent;
 6 
 7     Keyboard {
 8         id: keyboard
 9 
10         anchors.horizontalCenter: parent.horizontalCenter
11         width: Screen.desktopAvailableWidth * 2 / 3
12         y: getInputY()
13 
14         function getInputY(){
15             return 0
16         }
17     }
18 }

示例代码如上所示,定义了键盘的 水平中心位置 和 宽度 ,键盘的纵向位置通过 y 设定,由 getInputY() 函数返回,小C这里没有给出函数具体实现,比较常规的思路可以是根据输入框的位置自适应键盘的位置,当然这还需要更改 qtvirtualkeyboard 相关文件的c++代码,小C这里不做赘述。

标签:lang,Qt,qtvirtualkeyboard,C++,键盘,Virtual,QWidget,Keyboard
From: https://www.cnblogs.com/ybqjymy/p/18036110

相关文章

  • Qt Virtual Keyboard C++集成与实现(解决模态对话框键盘失效问题)
    一.Qt模态对话框先让我们来看看对话框的几种特性:1.Qt::NonModaThewindowisnotmodalanddoesnotblockinputtootherwindows.2.Qt::WindowModalThewindowismodaltoasinglewindowhierarchyandblocksinputtoitsparentwindow,allgrandparentwin......
  • c++引用和指针
    指针和引用当我们需要在程序中传递变量的地址时,可以使用指针或引用。它们都可以用来间接访问变量,但它们之间有一些重要的区别。指针是一个变量,它存储另一个变量的地址。通过指针,我们可以访问存储在该地址中的变量。指针可以被重新分配,可以指向不同的变量,也可以为NULL。指针使用*......
  • C++内存管理
    关于C++内存和分配的学习笔记C++内存和分配很容易出问题,为了编写高质量的CPP代码,我们必须了解幕后的工作原理。1.内存泄漏例如:voidleaky(){newint;//这里就是内存泄漏cout<<"我泄漏了一个int的内存!"<<endl;}自由存储区中的数据库无法被栈或者间接访问,这块内存被......
  • Qt QML 虚拟键盘(VirtualKeyboard )
    简介Qt官方开源了一个虚拟键盘的示例,该示例提供两种使用方式:一种用于桌面平台,另一种用于嵌入式平台,示例采用嵌入式平台方式显示。它们区别是前者脱离窗口应用于全局,后者依附于窗口。示例在QtCreator软件可以找到:或在以下Qt安装目录找到:C:\Qt\{你的Qt版本}\Examples......
  • Qt Virtual Keyboard 自适应位置
    一.实现inputcontex.h增加如下内容:1Q_PROPERTY(QRectFinputItemGeometryREADinputItemGeometry)2QRectFinputItemGeometry();inputcontex.cpp增加如下内容:1QRectFInputContext::inputItemGeometry()2{3QWidget*pInputItem=(QWidget*)inputItem();4......
  • C++ 关键字
    C++关键字alignas和alignof用法alignasalignas指定了内存按照多少对齐。alignas(0)这种写法无效,编译器会无视你的这个代码structalignas(8)S{};//表示是8个字节的对齐方式structalignas(1)U{Ss;};//虽然里面有个S,但是依然指定了该结构体的内存对齐要求为1字......
  • Qt Virtual Keyboard实现自适应悬浮键盘(多种方法详细记录)
    项目需求实现悬浮键盘,点击QLineEdit或QTextEdit自动弹出自适应悬浮键盘,尝试了以下几种方法后选择了修改QTVirtualKeyboard源码。在这里把其他方法/想法也列出来做一下记录。项目环境:QT5.13.2VS2017方法1:调用windows自带系统软件盘介绍windows自带软键盘分为......
  • Qt QML使用虚拟键盘示例(附完整源码)
    使用"虚拟键盘"注意(例子的Qt版本:5.12.4)注意一:     /*必须在main.cpp开始处加入如下代码,否则无法使用"虚拟键盘"*/     qputenv(“QT_IM_MODULE”,QByteArray(“qtvirtualkeyboard”)); 注意二:     键盘大小是根据宽度自动计算的,所以,应用程序应该只设置Inpu......
  • C++库大全
    基础类1、DinkumwareC++Library参考站点:http://www.dinkumware.comP.J.Plauger编写的高品质的标准库。P.J.Plauger博士是Dr.Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C++的产品中采用Dinkumware的库。2......
  • Qt 常用基础设置
    //右键菜单无效setContextMenuPolicy(Qt::NoContextMenu);//设置窗口背景透明setAttribute(Qt::WA_TranslucentBackground);//设置外框隐藏setWindowFlag(Qt::FramelessWindowHint);//设置无焦点setFocusPolicy(Qt::NoFocus);//设置lineEdit未输入字时显示文字l......