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

Posted

技术标签:

【中文标题】如何在 QT 虚拟键盘上按下信号键并播放声音点击轨道?【英文标题】:How to get signal key pressed on QT virtual keyboard and play a sound click track? 【发布时间】:2017-10-01 21:23:28 【问题描述】:

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

【问题讨论】:

请参阅this 文章以获取有关自定义虚拟键盘​​的更多信息。 【参考方案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();

【讨论】:

这不适用于移动设备 (android),此代码适用于台式机。在 Android 上,只有当用户按下虚拟键盘上的“完成”按钮时,您才会收到 Key 事件。但它不适用于拦截。此外,不需要安装事件过滤器,因为 TextEdit 已经有事件处理程序,它们可以捕获关键事件。【参考方案2】:

你有两个选择:

    使用BaseKeyclicked()信号。 使用KeyPanelsoundEffect 属性。

两者都需要有自己的风格。你可以阅读更多关于创建自己的风格here。从那里引用:

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

【讨论】:

以上是关于如何在 QT 虚拟键盘上按下信号键并播放声音点击轨道?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免鼠标单击一个小部件触发 Qt 中其他小部件的信号?

播放声音的 iOS 8 自定义键盘

如何将 Qt 按钮映射到键盘按键

当我按下键盘键时,Windows 可以播放声音吗?

使用 Monotouch 播放默认 iOS 系统声音

按下一个按钮它会发出声音。快速点击按钮和声音播放弹出和点击