2012-04-30 9 views
1

私は、テストのために、時間間隔でラベルを変更する簡単な設定をしています。信号が放出されることはないようです。 QtアドインでVisual Studio 2010を使用しています。ここに私のセットアップがある...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'oh!私はチュートリアルに従っていたし、それを逃した:)ありがとう – zebra

0

私は私が助けることができると考え、物事のカップル:

  1. nextFrame()がSLOTです。 SLOTは発光しません。彼らは受け取る。信号が放射される。無礼にしようとするのではなく、これを重要な区別として明確にしたいだけです。 (この場合、信号はタイムアウト()です)
  2. タイマーを開始するにはstart()が必要です。下の行のようなものは、このトリックを行うように見えるでしょう:

これは、いくつかの混乱をクリアするのに役立ちます。

timer->start(1000); 
関連する問題