QTimer不以建议的间隔发射信号

时间:2012-04-30 18:50:23

标签: c++ qt

我有一个简单的设置,可以在定时间隔内更改标签,以便进行测试。似乎信号不会被发射。我正在使用带有Qt加载项的Visual Studio 2010。这是我的设置...

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 个答案:

答案 0 :(得分:2)

此代码中没有任何内容调用start(),因此基于此代码nextFrame()永远不会被timeout()触发。

答案 1 :(得分:0)

我认为我可以提供帮助的一些事情:

  1. nextFrame()是一个SLOT。 SLOT不会发光。他们收到。信号发出。不要试图粗鲁,只是想明确这一点,因为这是一个重要的区别。 (在这种情况下,信号是超时())
  2. 你需要一个start()来启动计时器。类似下面的行似乎可以解决问题:
  3. 希望这有助于消除一些困惑。

    timer->start(1000);