
在我们做交互界面的过程中,友好的交互是当程序识别到一个手势时,给用户一个可视化的反馈,而不是用控制台打出一句“这是Circle”的文本。
一个好方法就是用OSD层来做。将一个层叠加到当前屏幕上,就像品牌笔记本调节音量或屏幕亮度会出现的可视化提示一样。
我们试着用Qt来实现上述功能。
实现思路:
1.新建一个用于Leap Motion开发的Qt工程。
2.新建一个窗体,移除标题栏、状态栏、菜单栏。窗体设置成半透明。
3.添加一个全局变量Status,每识别一个手势给Status赋一个特定的值。
4.添加一个定时器Timer,每隔特定时间获取Status的值。
1 2 3 |
QTimer *timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(getStatus())); timer->start(100); |
5.根据获得的Status,为窗体更换不同的背景图片。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void MainWindow::getStatus() { switch(Status){ case 0:this->setStyleSheet("#bg{border-image: url(:/bg/device.png);}");break; case 1:this->setStyleSheet("#bg{border-image: url(:/bg/device.png);}");break; case -1:this->setStyleSheet("#bg{border-image: url(:/bg/off.png);}");controller.removeListener(listener);exit(0);break; case -2:this->setStyleSheet("#bg{border-image: url(:/bg/off.png);}");break; case 10:this->setStyleSheet("#bg{border-image: url(:/bg/circle.png);}");break; case 11:this->setStyleSheet("#bg{border-image: url(:/bg/swipe.png);}");break; case 12:this->setStyleSheet("#bg{border-image: url(:/bg/keytap.png);}");break; case 13:this->setStyleSheet("#bg{border-image: url(:/bg/screentap.png);}");break; case 20:this->setStyleSheet("#bg{border-image: url(:/bg/focusl.png);}");break; case 21:this->setStyleSheet("#bg{border-image: url(:/bg/focusg.png);}");break; } } |
如无注明,均为原创。转载请注明: 转载自MITGAI`S THINKING
本文链接地址: Leap Motion OSD – Qt Sample
本文链接地址: Leap Motion OSD – Qt Sample
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
如果本文对您生活或工作产生了积极影响,那我非常高兴。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。