c++ - 将 Leap 和 QT 连接在一起

标签 c++ multithreading qt leap-motion

在互联网上进行了长时间的搜索后,我没有找到任何合理的解决方案来解决我的问题:

我有一个按需记录用户手指移动的应用程序,(当用户按下 r 时它开始记录当用户按下 s 时它停止记录,

直到现在,我的应用程序都在控制台上,所以它与 leap motion 完美配合, 现在我们决定将应用程序移动到基于 GUI 的应用程序,我们选择了 QT 平台,我们将 GUI 与我们的解决方案集成在一起,我们放置了两个按钮来代替按键,并连接了事件。 当我们想查看 leap 监听器的 onFrame 回调捕获的内容时,真正的问题就开始了,我们注意到自从 QT 的主 GUI 被执行以来,leap 的回调是如何被阻塞或只是没有获得 cpu 时间(我不知道真正的问题),我们尝试了几种解决方案,比如使用继承自 QObject 的包装类和 从那里开始一个线程,但它似乎没有任何影响。

这是main.cpp

  int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    LeapClass::QLeapLis * smp = LeapClass::QLeapLis::get_instance();

    QThread * th =  smp->thread();
    //smp->moveToThread(th);
    th->start(QThread::HighPriority);


    w.show();

    return a.exec();
}

这里的 QLeapLis 是 Wrapper 类,它有一个启动设备的 run 方法, 但仍然注意到发生了,我非常接近放弃 QT。

如果有人知道如何将这两者联系起来,我们将不胜感激

非常感谢。

最佳答案

下面的代码演示了如何在 Qt 中正确使用 Listener API。

此代码需要通过moc 运行。我还检查了它是否使用 Leap SDK 构建和运行。

#include <QApplication>
#include <QLabel>
#include "leap.h"

class MyListener : public QObject, public Leap::Listener {
public:
   virtual void onFrame(const Leap::Controller & ctl) {
      Leap::Frame f = ctl.frame();
      // This is a hack so that we avoid having to declare a signal and
      // use moc generated code.
      setObjectName(QString::number(f.id()));
      // emits objectNameChanged(QString)
   }
};

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   MyListener listener;
   Leap::Controller controller;
   controller.addListener(listener);

   QLabel frameLabel;
   frameLabel.setMinimumSize(200, 50);
   frameLabel.show();
   frameLabel.connect(&listener, SIGNAL(objectNameChanged(QString)),
                      SLOT(setText(QString)));

   int rc = a.exec();
   controller.removeListener(listener);
   return rc;
}

关于c++ - 将 Leap 和 QT 连接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22621074/

相关文章:

qt - 使用 sortItems() 对 QListWidget 进行排序

c++ - OpenGL 改变/重新加载纹理

c++ - 无法使用 C++ 中的 Window 蓝牙 API 连接到蓝牙设备

c++ - 计数排序中的循环解释

C - pthreads 似乎只使用一个核心

java - Java ThreadGroup 对象是否绑定(bind)到单个 CPU?

c++ - 基于 Python 的构建工具

c++ - 为什么 OS X 定义 'nil'

c - 为什么 pthread_create 返回一个 int?

c++ - 正确构建和销毁 Setter 依赖注入(inject)对象(可能使用 qt)