如何在QT虚拟键盘上获取按键信号并播放声音点击轨迹?

3

在我的嵌入式设备QT应用程序中,我希望在QML虚拟键盘按下事件时播放声音。我能获取到这个事件吗?如何获取它? 我已经有一个类,当按钮被点击时播放声音(点击效果),我在其他qml页面中使用。

import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3
import QtQuick.VirtualKeyboard 2.1

Page{
    id: pag
    width:  1280
    height: 800
    background:  Rectangle { color: "black"} 
    TextField {
        id: txtName
        height: 200
        width:200
        anchors.horizontalcenter:parent.horizontalCenter
        font.family: "Arial
            font.pixelSize: 24
             placeholderText: "insert your text here"
            background: Rectangle {
                anchors.fill: parent
                color: "transparent"
            }
    }
    InputPanel {
        id: virtualkeyboard
        width: 0.95*parent.width
        anchors.bottom: parent.bottom
    }
}

请查看此文章以获取有关自定义虚拟键盘的更多信息。 - folibis
2个回答

2
您可以创建一个名为Mykeyfilter的类,它是一个QObject类。然后在您的.h文件中声明:
bool eventFilter(QObject *object, QEvent *event);

然后在您的Mykeyfilter.cpp文件中,您可以像这样定义eventFilter:

bool MykeyFilter::eventFilter(QObject *object, QEvent *event)
{
    switch(event->type())
    {
    case QEvent::KeyPress:
    case QEvent::KeyRelease:
        {
         //////call your sound class here that you want to play/////
         qDebug()<<"I have clicked"  //For testing
        }
    default:
        break;

        //         return QObject::eventFilter(object, event);
    }

    return QObject::eventFilter(object, event);

}

在你的 main.cpp 文件中添加以下内容:
#include "mytouchfilter.h"

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

    QQmlApplicationEngine engine;

    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    app.installEventFilter(new MykeyFilter());

    return app.exec();
}

这段代码不适用于移动设备(Android),它只适用于桌面端。在Android上,只有当用户按下虚拟键盘上的“完成”按钮时才会触发按键事件。但是它无法拦截。此外,无需安装事件过滤器,因为TextEdit已经具有事件处理程序,可以捕获按键事件。 - Nulik

1
你有两个选项:
  1. 使用 BaseKeyclicked() 信号。
  2. 使用 KeyPanelsoundEffect 属性。
两者都需要拥有自己的样式。你可以在 这里 阅读更多有关创建自己样式的内容。引用其中的一段话:

创建新样式的好起点是使用现有内置样式作为模板并对其进行编辑。您可以从虚拟键盘源目录 src/virtualkeyboard/content/styles 中找到内置样式。将包含内置样式的一个目录复制到 Styles 目录中,然后将其重命名为“test”即可。[...]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接