gpt4 book ai didi

c++ - 根据 QObject 调整 qtvirtualkeyboard 的大小

转载 作者:行者123 更新时间:2023-11-30 02:27:11 25 4
gpt4 key购买 nike

我正在使用 qml qt 虚拟键盘:https://github.com/qt/qtvirtualkeyboard

我正在尝试将它与我基于小部件的 Qt 应用程序的其余部分“连接”起来。例如,当我单击 QLineEdit 时,我希望键盘显示出来并在应用程序上下文中充当物理键盘。

为此,我安装了 qtvirtualkeyboard/src(qmake && make && make install)中的内容,这是我的 main.cpp :

#include <QQuickView>
#include <QApplication>
#include <QQmlEngine>
#include <QQmlContext>

int main(int argc, char *argv[]){

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

QApplication app(argc, argv);
MainWindow w(); // This is a QWidget / QMainWindow
w.setFixedSize(800, 480);
w.show();

return app.exec();
}

当我在我的桌面上执行此操作时,尽管我的应用程序是 800x480,但键盘占据了我屏幕的一半。

当我在带有 7"触摸屏的 Raspberry Pi 上执行它时,键盘占据了页面的一半,顶部出现黑色边框。

我想自己修复键盘大小。当我创建带有项目等的 QML 文件时,键盘不再显示。

最佳答案

在过去一个月左右的时间里,我一直在与 QtVirtualKeyboard 怪物搏斗。希望您能从我的反复试验中受益。

QtVirtualKeyboard 拼图的碎片

要知道/记住的是,基本上有四个独立的部分来通知键盘的整体功能和实现:

  1. qt虚拟键盘(函数)
  2. 布局(结构)
  3. 风格(演示)
  4. 应用程序中的 Qml(实现)

如果您使用的是 qtvirtualkeyboard 附带的默认布局和样式(换句话说,您还没有创建任何自定义样式或布局),那么值得看看它们以更好地了解发生了什么在幕后。您可以在这里找到它们:

布局: /path/to/qtvirtualkeyboard/src/virtualkeyboard/content/layouts

样式: /path/to/qtvirtualkeyboard/src/virtualkeyboard/content/styles

定位键盘

这是一个(有点过于简化的)示例 Qml 文件,它演示了如何定位键盘。在您的情况下,由于您关心键盘占用了多少垂直屏幕空间,因此键盘的 y 属性是您首先要定位的目标。

首先,将 keyboard.y 设置为屏幕的任何高度(例如 parent.height 或您想要获取该信息的任何方式)。将键盘顶部放在屏幕底部可以隐藏它。

然后,当您单击 TextInput 字段时,调用 QtVirtualKeyboard,在状态从默认/初始更改为“可见”期间将 keyboard.y 属性更改为 TextInput 字段的底部。通过状态更改处理此问题的另一个好处是您可以控制键盘动画。

import QtQuick 2.7
import QtQuick.VirtualKeyboard 2.1

Item {
id: appSectionWithTextInput

property int screenHeight: parent.height; // the height of the screen/display
anchors.fill: parent;

TextInput {
id: textInput;
height: 120;
width: parent.width - 2;

color: "#000000"; // black

// http://doc.qt.io/qt-5/qinputmethod.html#properties
focus: Qt.inputMethod.visible;

verticalAlignment: TextInput.AlignVCenter;
}

InputPanel {
id: keyboard;
y: screenHeight; // position the top of the keyboard to the bottom of the screen/display

anchors.left: parent.left;
anchors.right: parent.right;

states: State {
name: "visible";
when: keyboard.active;
PropertyChanges {
target: keyboard;
// position the top of the keyboard to the bottom of the text input field
y: textInput.height;
}
}
transitions: Transition {
from: ""; // default initial state
to: "visible";
reversible: true; // toggle visibility with reversible: true;
ParallelAnimation {
NumberAnimation {
properties: "y";
duration: 250;
easing.type: Easing.InOutQuad;
}
}
}
}
}

自定义布局

如果您想创建自己的自定义布局,最好的办法是将 qtvirtualkeyboard 附带的现有布局之一(例如 en_GB)复制到您选择的目录中。在那里,将其重命名为您喜欢的任何名称并添加以下环境变量:QT_VIRTUALKEYBOARD_LAYOUT_PATH=/path/to/custom/keyboard-layout/mycustomlayout。

Note: The QT_VIRTUALKEYBOARD_LAYOUT_PATH environment variable should be set to the file system directory containing the custom keyboard layouts before running the application.

自定义样式

如果您想创建自己的自定义键盘样式,请参阅 this page对于您应该创建自定义样式目录的特定目录。

在那里,添加以下环境变量:QT_VIRTUALKEYBOARD_STYLE=mycustomstyle。

如果您想直接操纵键盘的大小,您可以访问/更改位于自定义样式目录中的 style.qml 文件中的这些属性。

// Properties
keyboardDesignWidth
keyboardDesignHeight
keyboardRelativetopMargin
keyboardRelativerightMargin
keyboardRelativeBottomMargin
keyboardRelativeLeftMargin

您可以找到这些属性的完整列表 here .

祝你好运!

关于c++ - 根据 QObject 调整 qtvirtualkeyboard 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com