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
    }
}
4

2 回答 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();
}
于 2017-10-02T15:54:03.303 回答
1

你有两个选择:

  1. 使用 的clicked()信号BaseKey
  2. 使用 的soundEffect属性KeyPanel

两者都需要有自己的风格。您可以在此处阅读有关创建自己的风格的更多信息。从那里引用:

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

于 2017-10-02T07:33:46.157 回答