qt 实现的电视遥控系统,如何让qt响应来自遥控器的按键信息?
目前在做一个项目,使用qt实现一个类似于机顶盒的遥控系统,那么关键的问题来了,如何让qt响应遥控器的按键信息呢?
应该分两步吧:
1.搭载qt的终端接收来自遥控器的按键信息,并解析,通信方式可以是蓝牙或者红外
2.qt获取解析后的按键信息,并响应
第一步已经实现了,关键我对qt了解实在不深,第二步想着应该类似于qt响应键盘吧,
键盘:通信方式是usb接口线,通过键盘驱动获取按键信息后,qt识别并响应此事件,UI上做响应操作如:焦点移动、输入字符等
遥控器:通信方式蓝牙或红外,自己写了个驱动,获取到按键信息解析后,qt????
是的,遥控器关键是qt没有相应的驱动,因而得自己做,我的想法是或许可以做一个类似的虚拟键盘?
求大神指导.....
是自定义一个事件做一个虚拟键盘呢 还是有其他更好的方案呢?
QCoreApplication::sendEvent(your_widget, &leftKey);
这个应该可以,不过我的UI是用qml做的,将事件发送到当前界面还是一个问题...
创建一个c++类:模拟键盘按键类,功能发送键盘事件到指定的UI对象
模拟按键类如下:
CKeyEvent.h
class CKeyEvent : public QObject
{
Q_OBJECT Q_ENUMS(CKEY_ID) public:
enum CKEY_ID
{
CKEY_UP = Qt::Key_Up,
CKEY_DOWN= Qt::Key_Down,
CKEY_MAX
};
CKeyEvent(QObject *parent = NULL);
~CKeyEvent(); Q_INVOKABLE void sendCkeyPressEvent(QObject* receiver,Qt::Key CkeyId);
Q_INVOKABLE void sendCkeyReleaseEvent(QObject* receiver,Qt::Key CkeyId); private:
QObject* m_receiver;
};
类的实现:
CKeyEvent.cpp
CKeyEvent::CKeyEvent(QObject *parent):QObject(parent)
{ }
CKeyEvent::~CKeyEvent()
{ } void CKeyEvent::sendCkeyPressEvent(QObject* receiver,Qt::Key CkeyId)
{
QKeyEvent keyPressEvent(QEvent::KeyPress, CkeyId, Qt::NoModifier);
QGuiApplication::sendEvent(receiver, &keyPressEvent);
}
void CKeyEvent::sendCkeyReleaseEvent(QObject* receiver,Qt::Key CkeyId)
{
QKeyEvent keyReleaseEvent(QEvent::KeyRelease, CkeyId, Qt::NoModifier);
QGuiApplication::sendEvent(receiver, &keyReleaseEvent);
}
主函数:main.cpp
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv); //注册C++类到QML
//qmlRegisterType<CKeyEvent>("CKeyEvent", 1, 0, "CKeyEvent"); QQmlApplicationEngine engine; CKeyEvent *Ckey = new CKeyEvent();
engine.rootContext()->setContextProperty("cKeyCDP",Ckey);
engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec();
}
QML:main.qml
Window {
id : mainWindows
visible: true
width: 1024
height: 768
title: qsTr("Hello World") GridMenu {
id: gridMenu
y: 320; width: parent.width; height: 320
activeFocusOnTab: true
} Button
{
id :keyUp
anchors.top:keyFocus.top
anchors.topMargin: 20
anchors.left : keyFocus.right
anchors.leftMargin: 20
width: 100
height: 60 text: qsTr("up") onClicked:
{
cKeyCDP.sendCkeyPressEvent(mainWindows,Qt.Key_Up);
cKeyCDP.sendCkeyReleaseEvent(mainWindows,Qt.Key_Up);
} }
Button
{
id :keyDown
anchors.top:keyUp.bottom
anchors.topMargin: 20
anchors.left : keyFocus.right
anchors.leftMargin: 20
width: 100
height: 60 text: qsTr("down")
onClicked:
{
cKeyCDP.sendCkeyPressEvent(mainWindows,Qt.Key_Down);
cKeyCDP.sendCkeyReleaseEvent(mainWindows,Qt.Key_Down);
}
}
}
GridMenu.qml:
FocusScope {
property alias interactive: gridView.interactive onActiveFocusChanged: {
//if (activeFocus)
//mainView.state = "showGridViews"
} Rectangle {
anchors.fill: parent
clip: true
gradient: Gradient {
GradientStop { position: 0.0; color: "#193441" }
GradientStop { position: 1.0; color: Qt.darker("#193441") }
} GridView {
id: gridView
anchors.fill: parent; anchors.leftMargin: ; anchors.rightMargin:
cellWidth: ; cellHeight:
focus: true
model: //KeyNavigation.up: tabMenu
//KeyNavigation.down: listMenu
//KeyNavigation.left: contextMenu delegate: Item {
id: container
width: GridView.view.cellWidth; height: GridView.view.cellHeight Rectangle {
id: content
color: "transparent"
antialiasing: true
anchors.fill: parent; anchors.margins: ; radius: Rectangle { color: "#91AA9D"; anchors.fill: parent; anchors.margins: ; radius: ; antialiasing: true }
Image { source: "images/qt-logo.png"; anchors.centerIn: parent }
} MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true onClicked: {
container.GridView.view.currentIndex = index
container.forceActiveFocus()
}
} states: State {
name: "active"; when: container.activeFocus
PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 }
} transitions: Transition {
NumberAnimation { properties: "scale"; duration: }
}
}
}
}
}
通过点击UI上的两个按钮:‘UP’ 'DOWN'
可以实现键盘‘up’ 'down'的功能:使焦点上下移动
安卓Tv开发(二)移动智能电视之焦点控制(按键事件)Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘和鼠标。本系列将实现遥控器焦点控制,模
qt 实现的电视遥控系统,如何让qt响应来自遥控器的按键信息?的更多相关文章
- Qt元对象和属性系统详解
Qt 是一个用标准 C++ 编写的跨平台开发类库,它对标准 C++ 进行了扩展,引入了元对象系统.信号与槽.属性等特性,使应用程序的开发变得更高效. 本节将介绍 Qt 的这些核心特点,对于理解和编写高 ...
- 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)
应该说现在每一块开发板都带有红外模块,并且大都配置了相应的程序.但其实自己动手写解码程序,更能锻炼自己所学,且不谈程序写的如何,这个过程中肯定是受益良多的.现在我就把我花一下午写出的解码程序与大家分享 ...
- 对Qt for Android的评价(很全面,基本已经没有问题了,网易战网客户端就是Qt quick写的),可以重用QT积累20年的RTL是好事,QML效率是HTML5的5倍
现在Qt不要光看跨平台了,Qt也有能力和原生应用进行较量的.可以直接去Qt官网查看他和那些厂商合作.关于和Java的比较,框架和Java进行比较似乎不且实际.如果是C++和Java比较,网上有很多文章 ...
- Why Does Qt Use Moc for Signals and Slots(QT官方的解释:GUI可以是动态的)
GUIs are Dynamic C++ is a standarized, powerful and elaborate general-purpose language. It's the onl ...
- 【百度地图API】建立全国银行位置查询系统(五)——如何更改百度地图的信息窗口内容?
原文:[百度地图API]建立全国银行位置查询系统(五)--如何更改百度地图的信息窗口内容? 摘要: 酷讯.搜房.去哪儿网等大型房产.旅游酒店网站,用的是百度的数据库,却显示了自定义的信息窗口内容,这是 ...
- 加快QT工程编译速度(还可给Qt for Android设置)
一.多核编译 环境:win10, Qt 5.4.1,编译器mingw32 项目: Qt for Android Qt Creator 在编译android项目时不支持预编译,默认cpu单核编译,工程稍 ...
- Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或PowerPC Mac二进制文件)
Nokia的开源Qt开发工具正式发布了4.5版.如前所述,Qt 4.5最大的变动是换用LGPL许可证,目前采用的三个许可证分别为LGPL/GPL和商业许可证. 新版 ...
- 【Qt开发】【VS开发】VS2010+Qt开发环境搭建
QT与JAVA有点类似,也是一种跨平台的软件(当然在windows平台和linux平台需要安装相应的QT开发环境和运行库,类似于JAVA在不同平台下的虚拟机JVM环境),因此对于某些需要同时支持win ...
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...
随机推荐
- iOS - UITableView中有两种重用Cell的方法
UITableView中有两种重用Cell的方法: - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (id)dequ ...
- Win10 高分屏软件界面字体模糊问题解决
只需要将自定义缩放值改为 124% 即可
- 最强Android书 架构大剖析 作者网站
http://newandroidbook.com/ jonathan levin (最强Android书 架构大剖析) http://newandroidbook.com/AIvI-M-R ...
- ssl证书类型
SSL证书依据功能和品牌不同分类有所不同,但SSL证书作为国际通用的产品,最为重要的便是产品兼容性(即证书根预埋技术),因为他解决了网民登录网站的信任问题,网民可以通过SSL证书轻松识别网站的真实身份 ...
- 谈一谈 MPU6050 姿态融合(转)
姿态角(Euler角)pitch yaw roll飞行器的姿态角并不是指哪个角度,是三个角度的统称.它们是:俯仰.滚转.偏航.你可以想象是飞机围绕XYZ三个轴分别转动形成的夹角. 地面坐标系(eart ...
- python全栈开发 * 20 继承知识点汇总 * 180530
20 面向对象的三大特征之一(继承,多态,封装) -----继承 1.继承的定义: 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类;父类又可称为基类或超类,新建的类称为派生 ...
- 浅谈提高Django性能
Django性能优化是一件困难的事情,但是也不常常如此: 下面4步将能够轻松的提高你的网站的性能,它们非常简单你应该将它们 作为标配. 持久化数据库连接 django1.6以后已经内置了数据库持久化连 ...
- PAT甲级1141 Ranking of Institutions
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805344222429184 题意: 给定几个学生的PAT分数和学校 ...
- P1_jemeter安装--jdk安装
学习的python,需要下载jemter做接口测试. 一..jMeter介绍 Apache组织开发的基于JAVA压力测试工具 100%纯JAVA开发,完全可移植性 可用于测试静态和动态资源 多协议-- ...
- Eclispe最常用的几个快捷键
熟练使用快捷键可以在很大程度上提高我们的工作效率,Eclipse的快捷键很多,但是常用的也就那么几个,下面说下Eclispe最常用的几个快捷键: Eclipse的快捷键组合可在Eclipse按下ctr ...