【问题标题】:QTimer not emitting signal at suggested intervalQTimer 没有在建议的时间间隔发出信号
【发布时间】:2012-05-01 04:12:54
【问题描述】:

出于测试目的,我有一个简单的设置来按时间间隔更改标签。似乎从未发出信号。我正在使用带有 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() 从未被触发?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

    【讨论】:

    • 就是这样。哦!我正在关注一个教程,但错过了:) 谢谢
    【解决方案2】:

    我认为我可以提供帮助的几件事:

    1. nextFrame() 是一个 SLOT。 SLOT 不发射。他们收到。信号发射。不要试图粗鲁,只是想清楚这一点,因为这是一个重要的区别。 (在这种情况下,信号是 timeout() )
    2. 您需要有一个 start() 来启动计时器。类似下面这行的东西似乎可以解决问题:

    希望这有助于消除一些困惑。

    timer->start(1000);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多