Qtimer不会每5秒调用一次功能

时间:2014-12-12 17:30:15

标签: c++ qt qt4 qt-creator

我使用Qt创建者创建了一个表单。表单有三个选项卡,每个选项卡有30个字段。所以我希望表单上的数据每5秒刷新一次。我有QTimer类来实现这个功能。这是我的代码:

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <ctime>
#include <iostream>
#include <QPixmap>
#include <stdio.h>
#include <QProcess>
#include <QString>
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <QLabel>
#include <QTimer>
#include <ctime>

using namespace std;

void load_Tab1Values(Ui::MainWindow* ui)
{
    // append values
}

void load_Tab2Values(Ui::MainWindow* ui)
{
    //append values
}

void MainWindow::onTabChanged(int tabIndex)
{
    cout<<"the tab index is:"<<tabIndex<<endl;
    if (tabIndex == 0)
    {
        // Create the first tab elements

        cout<<"tab 0"<<endl;
    }
    else if (tabIndex == 1)
    {
        // ...

        cout<<"tab 1"<<endl;
    }
}

void MainWindow::refresh_values()
{
    cout<<"values refreshed"<<endl;
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    time_t now = time(0);
    char* dt = ctime(&now);

    ui->setupUi(this);
    this->setWindowTitle("First Qt Project");

    load_Tab1Values(ui);
    load_Tab2Values(ui);
    connect( ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(onTabChanged(int)) ); 

    QTimer *timer= new QTimer(this);
    timer->connect(timer,SIGNAL(timeout()),this,SLOT(refresh_values()));
    timer->start(5000);
}

MainWindow::~MainWindow()
{
    delete ui;
}

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void ontabchanged(int tabIndex);    

    void refresh_values();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

根据代码,函数refresh_values应每5秒调用一次,但不调用该函数。应该在Main.cpp中添加它,以便每隔5秒调用一次。你能不能让我知道我在这里缺少什么。感谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法:

默认情况下,创建的任何插槽都在MainWindow.h文件的“私有插槽”部分下,如下所示:

private slots:
//default slots created from the ui(when the user right clicks on a button and then connects to a     slot)

所以在我的情况下,因为函数refresh_values是一个用户定义的函数,我手动为这个函数创建了一个SLOT,这应该在公共插槽部分。因此,以这种方式包含它解决了这个问题。

public slots:

    void refresh_values();