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

时间:2017-10-01 21:23:28

标签: qt qml virtual-keyboard qtvirtualkeyboard

在我的嵌入式设备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
    }
}

2 个答案:

答案 0 :(得分:1)

您有两种选择:

  1. 使用BaseKey。{/ li>的clicked()信号
  2. 使用KeyPanel。{/ li>的soundEffect属性

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

      

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

答案 1 :(得分:1)

您可以创建一个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();
}