使用Qt库,有没有一种方法可以使用信号自动更新QDateTimeEdit
,以便窗口小部件以类似于时钟的方式显示当前日期和时间?自动更新QDateTimeEdit,以便它显示当前的系统日期和时间
在下面的代码示例中,dateTimeEditSystem
是QDateTimeEdit
对象。但是,setDateTime()
函数只能运行一次。我想QDateTimeEdit
对象动态更新。有没有使用定时器(即使用信号和插槽)的可靠方法?或者是一个计时器这样做的唯一方法?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// setup the UI
ui->setupUi(this);
// set the current date and time
ui->dateTimeEditSystem->setDateTime(QDateTime::currentDateTime());
}
我试过使用定时器,但不幸的是QDateTimeEdit
没有更新。这是完整的mainwindow.cpp代码。我在这里做错了什么?
#include <QTimer>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->dateTimeEditSystem->setDateTime(QDateTime::currentDateTime());
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));
timer->start(1000);
}
void MainWindow::updateTime()
{
ui->dateTimeEditSystem->setDateTime(QDateTime::currentDateTime());
}
MainWindow::~MainWindow()
{
delete ui;
}
UPDATE:
其实,这是很容易做到的。代码未更新的原因是由于mainwindow.h文件中缺少槽声明。这是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:
Ui::MainWindow *ui;
private slots:
void updateTime();
};
#endif // MAINWINDOW_H
是否有一个理由,为什么你不希望使用定时器吗? –
谢谢,RA。你的意思是说,一个计时器可能是Qt中最可靠的方法吗?我有更多的经验使用wxWidgets比Qt。 –
是的,计时器应该足够可靠,特别是如果您只需要每秒更新一次即可。 Qt甚至有几个例子:http://qt-project.org/doc/qt-4.8/widgets-digitalclock.html和http://qt-project.org/doc/qt-4.8/widgets-shapedclock。 html –