2015-04-17 63 views
-4

我想在Qt中製作一個程序來逐個添加點,而不是一次添加點。要做到這一點,我需要使用QThread,或者我可以使用QTimer?Qt用QThread或QTimer逐個添加點?

+2

你能告訴我們你到目前爲止做了什麼嗎? –

+0

我只做了一次加分。 – Ionela

+3

什麼是「積分」?多少,爲什麼不「一次全部」? – JeffRSon

回答

0

它可以使用QTimer完成,如果它是時間依賴的(如每1秒),那麼它的路要走。只需要創建一個定時器,其timeout信號連接到您的slot,它應該工作就像一個魅力

0

你需要創建一些類,從QObject繼承:

class QTimer; 
class QList; 

class Test_Timer : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit Test_Timer(QObject *parent = 0); 
    ~Test_Timer(); 

private: 
    QList<QPoint> *lst; 
    QTimer *timer; 

public slots: 
    void addPoint(); 
}; 

好了,現在我們有QTimer事件timer變量,lst用於處理您的計時器事件的商店QPointaddPoint()插槽。

在構造函數中,初始化類的成員,與當前類插槽連接定時器的插槽,以期爲500ms啓動定時器:

Test_Timer::Test_Timer(QObject *parent) : QObject(parent) 
{ 
    lst = new QList<QPoint>; 
    timer = new QTimer; 

    connect(timer, SIGNAL(timeout()), this, SLOT(addPoint())); 

    timer->start(500); 
} 

插槽用於添加點可能是這個樣子:

void Test_Timer::addPoint() 
{ 
    static int number = 0; 

    if (lst->size() < 10) { 
     lst->append(QPoint(0, number++)); 
     qDebug() << lst->size(); 
    } else { 
     timer->stop(); 
     deleteLater(); 
    } 
} 

畢竟不記得免費資源:

Test_Timer::~Test_Timer() 
{ 
    lst->clear(); 
    delete lst; 

    if (timer->isActive()) 
     timer->stop(); 
    delete timer; 
} 

我認爲是這個例子會對你有所幫助。

+1

這是猜測中的一次奇妙嘗試,但實際上,您不應該鼓勵那些提出這些模糊問題的海報。 –

+0

@Kuba Ober是的,這是真的不清楚 –