在我的嵌入式设备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
}
}
答案 0 :(得分:1)
您有两种选择:
BaseKey
。{/ li>的clicked()
信号
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();
}