2012-04-30 34 views
1

爲了測試目的,我有一個簡單的設置來在定時間隔上更改標籤。看起來信號並沒有發射出去。我正在使用Visual Studio 2010和Qt插件。這裏是我的設置...QTimer不以建議的時間間隔發射信號

Window::Window(QWidget *parent, Qt::WFlags flags) 
    : QMainWindow(parent, flags) 
{ 
    ui.setupUi(this); 
    my_label = new QLabel(); 

    timer = new QTimer(this); 
    timer->setInterval(1000); 
    connect(timer, SIGNAL(timeout()), this, SLOT(nextFrame())); 
} 

void Window::nextFrame() 
{ 
    static int i = 0; 
    std::stringstream ss; 

    ss << "C:/files/" << i << ".txt"; 
    QString qstr = QString::fromStdString(ss.str()); 
    ui.label->setText(qstr); 

    ss.str(""); 
    i++; 
    repaint(); 
} 

而且在頭文件,

public: 
    Window(QWidget *parent = 0, Qt::WFlags flags = 0); 
    ~Window(); 

public slots: 
    void nextFrame(); 

private: 
    Ui::TrackerClass ui; 
    QTimer *timer; 
}; 

爲什麼插槽nextFrame()從未被觸發?

回答

2

此代碼中沒有任何內容調用start(),所以根據此代碼nextFrame()永遠不會被timeout()觸發。

+1

就是這樣。 D'哦!我正在按照教程,錯過了:)謝謝 – zebra

0

夫婦的事情,我想我可以幫助:

  1. nextFrame()是一個插槽。 SLOTs不發射。他們收到。信號發出。不要試圖粗魯,只是想明確這一點,因爲這是一個重要的區別。 (在這種情況下,信號是超時())
  2. 你需要有一個start()來開始定時器。像下面的線似乎會做的伎倆:

希望這有助於澄清一些混淆。

timer->start(1000);