2013-03-14 20 views
0

我有一个主要的Qt应用程序,我正在开发一个Qt库,我从这个主应用程序链接到。从主应用程序中,我希望调用库中的某个函数来执行某些操作,然后在例程结束时调用一个QTimer,它将在延迟一段时间后启动库代码中的Slot。我不能让计时器开火,我不知道为什么。如果我在我的主应用程序中放置一个计时器,它会按预期启动,而不是在库中。QTimer插槽没有从库函数中被触发

现在,我的图书馆只有一个班级。在我的媒体库的头文件,我定义我想打电话给插槽:

private slots: 

     void stop(); 

在实现文件中我有这样的:

void MyLib::start() { 

     // Create a timer to user during audio operation 
     m_GeneralTimer = new QTimer(this); 

     // Fire off a oneshot to clear the buffer for fluke-media 
     m_GeneralTimer->setInterval(3000); 
     m_GeneralTimer->setSingleShot(true); 
     connect(m_GeneralTimer, SIGNAL(timeout()), SLOT(stop())); 
     m_GeneralTimer->start(); 
    } 
    void MyLib::stop() { 

     qDebug() << "Called stop()..."; 
     m_GeneralTimer->stop(); 
     delete m_GeneralTimer; 
    } 

缺少什么我在这里定时器火?

注:这是很多我的头文件 - 在这之后一切都在真正的文件只是函数调用:

/// Use shared memory 
#include <QSharedMemory> 

/// Normal Qt Includes 
#include <QBuffer> 
#include <QDebug> 

/// QTimer is required for calling a method 
/// to stop audio playback at a later time 
#include <QTimer> 

/// Put into a background thread 
#include <QtConcurrentRun> 

/// Check integrity of received data 
#include <QCryptographicHash> 

class MYAUDIOLIBSHARED_EXPORT MyLib: public QObject 
{ 

    Q_OBJECT 

    public: 

      /// /// /// 

    private slots: 

      void stop(); 

      /// /// /// 
} 
+0

您的MyLib类中是否有Q_OBJECT宏? – 2013-03-14 18:24:55

+0

是的,我在 - 我的头文件 – PhilBot 2013-03-14 19:06:09

+0

可以在这里添加你的.h文件吗? – saeed 2013-03-14 19:26:30

回答

0

好下面的代码工作。我在start()函数中放了3秒,现在它从库调用中被触发。

// Create a timer to fire a slot when the playback is done 
    m_EndPlayBackTimer = new QTimer(this); 
    m_EndPlayBackTimer->setInterval(3000); 
    m_EndPlayBackTimer->setSingleShot(true); 
    connect(m_EndPlayBackTimer, SIGNAL(timeout()), SLOT(playBackDone())); 
    m_EndPlayBackTimer->start(3000); 

    // Done 
    return; 

} 

/** 
* @brief 
* Slot to be started by a timer after some time delay 
* to signify that the playback is complete. 
* 
*/ 
void MyLib::playBackDone() { 

    #if DEBUG 
    qDebug() << "Playback is complete..."; 
    #endif 

}