我使用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秒调用一次。你能不能让我知道我在这里缺少什么。感谢。
答案 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();