1

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

4

2 回答 2

2

此代码中没有任何内容可以调用start(),因此基于此代码nextFrame()将永远不会被timeout().

于 2012-04-30T19:01:32.180 回答
0

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

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

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

timer->start(1000);
于 2012-04-30T19:17:35.133 回答