我正在使用qml qtvirtual键盘: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上执行该命令时,键盘占据了页面的一半,并且黑色边框出现在顶部。

我想自己修复键盘尺寸。当我使用Item等创建QML文件时,键盘不再显示。

最佳答案

在过去一个月左右的时间里,我与QtVirtualKeyboard怪物进行了角力。希望您能从我的反复试验中受益。

QtVirtualKeyboard拼图的碎片

要知道/记住的是,实际上有四个独立的部分可以告知键盘的整体功能和实现:

  • qtvirtualkeyboard(函数)
  • 布局(结构)
  • 样式(演示)
  • 您的应用程序中的
  • 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)复制到您选择的目录中。在那里,将其重命名为任意名称,然后添加以下环境var:QT_VIRTUALKEYBOARD_LAYOUT_PATH = / path / to / custom / keyboard-layout / mycustomlayout。



    自订样式

    如果要创建自己的自定义键盘样式,请引用this page以获取应在其中创建自定义样式目录的特定目录。

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

    如果您想直接操纵键盘的大小,则可以访问/更改自定义样式目录中的style.qml文件中的那些属性。
    // Properties
    keyboardDesignWidth
    keyboardDesignHeight
    keyboardRelativetopMargin
    keyboardRelativerightMargin
    keyboardRelativeBottomMargin
    keyboardRelativeLeftMargin
    

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

    祝你好运!

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

    10-15 04:41