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 に答える