2012-04-30 32 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);