如何在 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】:你有两个选择:
-
使用
BaseKey
的clicked()
信号。
使用KeyPanel
的soundEffect
属性。
两者都需要有自己的风格。你可以阅读更多关于创建自己的风格here。从那里引用:
创建新样式的一个很好的起点是使用现有的内置样式作为模板并对其进行编辑。您可以从虚拟键盘源目录 src/virtualkeyboard/content/styles 中找到内置样式。将包含内置样式的目录之一复制到 Styles 目录中,并将其重命名为“test”。 [...]
【讨论】:
以上是关于如何在 QT 虚拟键盘上按下信号键并播放声音点击轨道?的主要内容,如果未能解决你的问题,请参考以下文章