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

Automatically updating QDateTimeEdit so that it displays the current system date and time

本文关键字:系统 日期 时间 显示 更新 QDateTimeEdit      更新时间:2023-10-16

使用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没有更新。 这是完整的主窗口.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

自动更新Qt中的QDateTimeEdit或任何其他时钟小部件都可以通过QTimer轻松完成。 有关如何完成此操作,请参阅以下示例:

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

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