c++ - Qtimer每 5秒不调用函数

  显示原文与译文双语对照的内容
0 0

我们使用Qt表单创建了一个表单,每个标签都有三个标签,每个标签都要刷新表单上的数据,以实现这里功能。 这是我的代码:

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 seconds.Could,你让我知道我在这里丢失了什么。 谢谢。

时间:原作者:6个回答

0 0

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

默认情况下,创建的任何插槽都位于 MainWindow.h 文件中的"private 插槽"部分下,如下所示:

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

我的例子中,函数refresh_values是用户定义函数,我手工创建了这个函数的槽,这应该是 public 插槽部分。 所以包括它解决了这个问题。

public slots:
 void refresh_values();
原作者:
...