补充 VirtualKeyboard.
Signed-off-by: Rick.Chan <cy@haoan119.com>
This commit is contained in:
parent
f77c1fa8d9
commit
0cbab163ec
|
@ -25,13 +25,14 @@
|
|||
- [10. ScrollView](#10-scrollview)
|
||||
- [11. GridView](#11-gridview)
|
||||
- [12. BusyIndicator](#12-busyindicator)
|
||||
- [13. QML 与 C++ 交互](#13-qml-与-c-交互)
|
||||
- [13.1. QML 访问 C++ 中声明的类型](#131-qml-访问-c-中声明的类型)
|
||||
- [13.2. C++ 访问 QML 对象](#132-c-访问-qml-对象)
|
||||
- [13.3. 通过信号槽传递自建类型](#133-通过信号槽传递自建类型)
|
||||
- [13.4. QML 与 C++ 交互综合示例](#134-qml-与-c-交互综合示例)
|
||||
- [14. Windows 下 QML 程序的打包发布](#14-windows-下-qml-程序的打包发布)
|
||||
- [15. 外部参考资料](#15-外部参考资料)
|
||||
- [13. VirtualKeyboard](#13-virtualkeyboard)
|
||||
- [14. QML 与 C++ 交互](#14-qml-与-c-交互)
|
||||
- [14.1. QML 访问 C++ 中声明的类型](#141-qml-访问-c-中声明的类型)
|
||||
- [14.2. C++ 访问 QML 对象](#142-c-访问-qml-对象)
|
||||
- [14.3. 通过信号槽传递自建类型](#143-通过信号槽传递自建类型)
|
||||
- [14.4. QML 与 C++ 交互综合示例](#144-qml-与-c-交互综合示例)
|
||||
- [15. Windows 下 QML 程序的打包发布](#15-windows-下-qml-程序的打包发布)
|
||||
- [16. 外部参考资料](#16-外部参考资料)
|
||||
|
||||
## 1. 基础部分
|
||||
|
||||
|
@ -549,7 +550,56 @@ Window {
|
|||
|
||||
可以对 BusyIndicator 进行自定义。
|
||||
|
||||
## 13. QML 与 C++ 交互
|
||||
## 13. VirtualKeyboard
|
||||
|
||||
一些涉及触屏的应用会涉及到虚拟键盘/软键盘的应用,不同系统平台上往往会提供不同的软键盘工具,但相比之下,Qt 内嵌的 VirtualKeyboard 更加易用,并具有很好的跨平台能力,中文(拼音)、英文以及其他主要语言的支持能力也比较好。
|
||||
|
||||
若使用 VirtualKeyboard,只需要在创建“Qt Quick Application”时选中“Use Qt Virtual Keyboard”(旧版本 QtCreator 没有该选项)即可自动向项目添加 VirtualKeyboard 功能。
|
||||
|
||||
对比源码不难发现,启用 VirtualKeyboard 后主要在 main.cpp 中增加了:
|
||||
|
||||
```cpp
|
||||
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
|
||||
```
|
||||
|
||||
在 main.qml 中增加了:
|
||||
|
||||
```js
|
||||
import QtQuick.VirtualKeyboard 2.4
|
||||
|
||||
Window {
|
||||
InputPanel {
|
||||
states: State {
|
||||
// ...
|
||||
}
|
||||
transitions: Transition {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
可以使用 VirtualKeyboardSettings 对 VirtualKeyboard 进行一些设置,这是一个全局对象,在 QML 中直接通过 VirtualKeyboardSettings.xxxxx 方式使用即可。VirtualKeyboardSettings 可对键盘风格、语言列表进行设置。需要特殊说明的是,VirtualKeyboard 所支持的语言列表是在编译时决定的,通过 VirtualKeyboardSettings.activeLocales 可以获得当前支持的语言列表;而 VirtualKeyboardSettings.activeLocales 可以在应用程序中临时限定允许使用的语言,最终在 Qt 的虚拟键盘中允许切换的语言为二者的交集。如下示例限制 VirtualKeyboard 只可以使用“简体中文”和“英文”输入法,如果编译 VirtualKeyboard 没有使能中文输入法则最终只能使用英文输入:
|
||||
|
||||
```js
|
||||
import QtQuick.VirtualKeyboard.Settings 2.4
|
||||
|
||||
Window {
|
||||
Component.onCompleted: {
|
||||
VirtualKeyboardSettings.activeLocales = ["zh_CN", "en_US"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
如果是使用 Qt 提供的安装包来安装 VirtualKeyboard 模块则默认开启了中文支持,部分系统如 Ubuntu 中使用 apt 进行安装的可能不支持中文,可改用官方安装包来安装 Qt 或使用源码自行编译,注意在编译 VirtualKeyboard 的 qmake 阶段需要增加:
|
||||
|
||||
```makefile
|
||||
CONFIG+="lang-en_GB lang-zh_CN"
|
||||
```
|
||||
|
||||
更多关于 VirtualKeyboard 的应用可以参考官方自带示例。
|
||||
|
||||
## 14. QML 与 C++ 交互
|
||||
|
||||
QML 与 C++ 交互的主要实现方式是:
|
||||
|
||||
|
@ -561,7 +611,7 @@ QML 与 C++ 交互的主要实现方式是:
|
|||
|
||||
QML 与 C++ 之间主要通过信号槽机制来传递消息。
|
||||
|
||||
### 13.1. QML 访问 C++ 中声明的类型
|
||||
### 14.1. QML 访问 C++ 中声明的类型
|
||||
|
||||
QML 使用 C++ 中声明的类型可以为类、结构体或枚举等。若需要将 C++ 类导出给 QML,则需要使用 qmlRegisterType() 方法进行注册:
|
||||
|
||||
|
@ -586,7 +636,7 @@ engine.rootContext()->setContextProperty("qmlObj", cObj);
|
|||
|
||||
将 C++ 对象注册到 QML 上下文环境中。
|
||||
|
||||
### 13.2. C++ 访问 QML 对象
|
||||
### 14.2. C++ 访问 QML 对象
|
||||
|
||||
在 QML 中为对象添加 objectName 属性后,在 C++ 中可使用:
|
||||
|
||||
|
@ -599,7 +649,7 @@ auto qmlObj = root.first()->findChild<QObject*>("object name");
|
|||
|
||||
大部分情况下在 QML 中访问 C++ 即可实现较完善的功能,QML 传递信息给 C++ 完全可以通过信号槽机制实现。除非需要在 C++ 中动态创建对象并连接到 QML 中的信号槽,否则没必要这样设计。
|
||||
|
||||
### 13.3. 通过信号槽传递自建类型
|
||||
### 14.3. 通过信号槽传递自建类型
|
||||
|
||||
当使用信号槽机制时,需要注意一点:如果需要通过信号槽传递自建类型数据,需要使用 qRegisterMetaType() 方法进行注册。
|
||||
|
||||
|
@ -607,7 +657,7 @@ auto qmlObj = root.first()->findChild<QObject*>("object name");
|
|||
qRegisterMetaType<MyClass>("Myclass");
|
||||
```
|
||||
|
||||
### 13.4. QML 与 C++ 交互综合示例
|
||||
### 14.4. QML 与 C++ 交互综合示例
|
||||
|
||||
该示例包含以下文件:
|
||||
|
||||
|
@ -958,7 +1008,7 @@ Window {
|
|||
}
|
||||
```
|
||||
|
||||
## 14. Windows 下 QML 程序的打包发布
|
||||
## 15. Windows 下 QML 程序的打包发布
|
||||
|
||||
Qt 提供了导出 Qt 环境变量的命令行脚本,比如“Qt 5.15.2 (MinGW 8.1.0 64-bit)”,运行该脚本可进入带有 Qt 环境变量的命令行界面,之后可通过如下命令打包程序(编译生成的可执行程序需要拷贝到\<Package Output Path\>):
|
||||
|
||||
|
@ -969,7 +1019,7 @@ windeployqt <Exe File> [--qmldir <Project QML File Path>]
|
|||
|
||||
Qt 自带的打包程序会添加额外的库,如果想进一步减小体积,可手动筛减。
|
||||
|
||||
## 15. 外部参考资料
|
||||
## 16. 外部参考资料
|
||||
|
||||
1. [深入了解JS中的整数](https://www.jianshu.com/p/1ba45c3894ab)
|
||||
2. [QML 中的信号与槽](https://blog.csdn.net/Love_XiaoQinEr/article/details/123746983)
|
||||
|
@ -983,3 +1033,5 @@ Qt 自带的打包程序会添加额外的库,如果想进一步减小体积
|
|||
10. [QML Connections: Implicitly defined onFoo properties in Connections are deprecated.](https://blog.csdn.net/weixin_43720622/article/details/112346039)
|
||||
11. [QML 调用 C++ 方法](https://blog.csdn.net/woshouji1/article/details/121348179)
|
||||
12. [Qml 与 C++ 交互3:Qml 的信号与 C++ 的槽函数连接](https://blog.csdn.net/tanxuan231/article/details/124990296)
|
||||
13. [Qt-虚拟键盘](https://blog.csdn.net/qq_39175540/article/details/87972667)
|
||||
14. [Qt5软键盘实现中文拼音输入法](https://blog.csdn.net/onlyshi/article/details/78408000)
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
- [2. QT\_DEBUG\_PLUGINS](#2-qt_debug_plugins)
|
||||
- [3. Online Install/MaintenanceTool 加速](#3-online-installmaintenancetool-加速)
|
||||
- [4. MaintenanceTool 添加/删除组件时只显示已安装的组件 或 无法正常升级组件](#4-maintenancetool-添加删除组件时只显示已安装的组件-或-无法正常升级组件)
|
||||
- [5. Linux Online Install 没有图标](#5-linux-online-install-没有图标)
|
||||
|
||||
## 1. -platform
|
||||
|
||||
|
@ -27,12 +28,71 @@ export QT_DEBUG_PLUGINS=1
|
|||
## 3. Online Install/MaintenanceTool 加速
|
||||
|
||||
```bash
|
||||
./qt-unified-windows-x64-online.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
./qt-unified-linux-x64-online.run --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
# For Windows
|
||||
qt-unified-windows-x64-online.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
MaintenanceTool.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
./MaintenanceTool --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
|
||||
# For Linux
|
||||
sudo ./qt-unified-linux-x64-online.run --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
sudo ./MaintenanceTool --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
```
|
||||
|
||||
## 4. MaintenanceTool 添加/删除组件时只显示已安装的组件 或 无法正常升级组件
|
||||
|
||||
原因是 MaintenanceTool 本地缓存没有更新,启动 MaintenanceTool 后点击右下角的“设置”按钮,点击“本地缓存->清空缓存”。再按正常流程添加/删除/升级 组件即可。
|
||||
|
||||
## 5. Linux Online Install 没有图标
|
||||
|
||||
需要手动创建 Desktop Entry:
|
||||
|
||||
```bash
|
||||
sudo cp /opt/Qt/Tools/QtDesignStudio/share/icons/hicolor/* /usr/share/icons/hicolor
|
||||
cd /usr/share/icons/hicolor
|
||||
sudo gtk-update-icon-cache -f -t ./
|
||||
|
||||
sudo touch org.qt-project.qtcreator.desktop
|
||||
sudo touch org.qt-project.qtdesignstudio.desktop
|
||||
sudo touch org.qt-project.maintenancetool.desktop
|
||||
```
|
||||
|
||||
sudo 编辑三个 .desktop 文件,内容如下:
|
||||
|
||||
```ini
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=/opt/Qt/Tools/QtCreator/bin/qtcreator %F
|
||||
Name=Qt Creator
|
||||
GenericName=C++ IDE for developing Qt applications
|
||||
X-KDE-StartupNotify=true
|
||||
Icon=QtProject-qtcreator
|
||||
StartupWMClass=qtcreator
|
||||
Terminal=false
|
||||
Categories=Development;IDE;Qt;
|
||||
MimeType= text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;
|
||||
```
|
||||
|
||||
```ini
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=/opt/Qt/Tools/QtDesignStudio/bin/qtdesignstudio
|
||||
Name=Qt Design Studio
|
||||
GenericName=Qt Design Studio
|
||||
X-KDE-StartupNotify=true
|
||||
Icon=QtProject-qtcreator
|
||||
StartupWMClass=qtdesignstudio
|
||||
Terminal=false
|
||||
Categories=Development;IDE;Qt;
|
||||
```
|
||||
|
||||
```ini
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=/opt/Qt/MaintenanceTool --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
|
||||
Name=Qt Maintenance Tool
|
||||
GenericName=Qt Maintenance Tool
|
||||
X-KDE-StartupNotify=true
|
||||
Icon=QtProject-qtcreator
|
||||
StartupWMClass=MaintenanceTool
|
||||
Terminal=false
|
||||
Categories=Development;Qt;
|
||||
```
|
||||
|
|
Loading…
Reference in New Issue