簡體   English   中英

連接Leap和QT Togther

[英]Connecting Leap And QT Togther

經過長時間的互聯網搜索后,我沒有找到能夠解決我的問題的任何理由,這是:

我有一個應用程序可以按需記錄用戶的手指運動((當用戶按r的開始記錄,而用戶按s的停止記錄,

到現在為止,我的應用程序都在控制台上,因此它可以完美地與跳動一起工作,現在我們決定將應用程序移至基於GUI的應用程序,並且我們選擇了QT平台,將GUI與我們的解決方案集成在一起,我們進行了兩次推送按鈕以替換按鍵,並連接事件。 真正的問題開始於我們想查看由躍遷監聽器的onFrame回調捕獲的內容,並且自從執行QT的主GUI以來,我們就注意到了躍遷的回調是如何受阻或只是不獲取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。

如果有人知道如何連接這兩個,我們將不勝感激

非常感謝。

您可以通過不使用Leap回調來避免此問題。 您可以使用動畫循環或其他方便的循環機制調用Controller :: frame()以獲取最新的數據幀。 (每個Frame對象都有一個ID,因此您可以知道是否已經處理了一個框架)。

例如,在某些環境(處理,瀏覽器動畫循環,Unity,Cinder等)中,已經存在一個以應用程序的繪圖幀速率調用的更新循環。 比這更頻繁地處理幀數據也可能浪費時間。 即使您的應用程序尚未使用多線程,也必須開始處理使用LM回調實現時多線程可能帶來的一些復雜性。

根據庫巴·奧伯(Kuba Ober)的觀點,QT小部件沒有動畫或繪制循環,因此他的答案顯示了使用Listener回調的正確方法是正確的方法。

下面的代碼演示了如何在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM