自动更新QDateTimeEdit,以便显示当前系统日期和时间

时间:2012-10-11 23:55:29

标签: c++ qt signals-slots

使用Qt库,有没有办法使用一个信号自动更新QDateTimeEdit,以便小部件以与时钟类似的方式显示当前日期和时间?

在下面的代码示例中,dateTimeEditSystemQDateTimeEdit对象。但是,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;
}

更新

这实际上很容易做到。代码未更新的原因是由于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

1 个答案:

答案 0 :(得分:1)

使用QDateTimeEdit可以轻松地自动更新Qt中的QTimer或任何其他时钟小部件。请参阅以下示例以了解如何完成此操作:

http://qt-project.org/doc/qt-4.8/widgets-digitalclock.html

OR

http://qt-project.org/doc/qt-4.8/widgets-shapedclock.html

请注意,QTimer的分辨率因不同的操作系统而异,但对于需要一次发生约1秒的更新,几乎所有平台上的QTimer都应该没问题。有关QTimer的解决方案的详细信息,请参阅以下内容:

http://qt-project.org/doc/qt-4.8/QTimer.html#accuracy-and-timer-resolution