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

C++ 自动更新QDateTimeEdit,以便显示当前系统日期和时间,c++,qt,signals-slots,C++,Qt,Signals Slots,使用Qt库,是否有一种方法可以使用信号自动更新QDateTimeEdit,使小部件以与时钟类似的方式显示当前日期和时间 在下面的代码示例中,dateTimeEditSystem是QDateTimeEdit对象。但是,setDateTime()函数只运行一次。我希望动态更新QDateTimeEdit对象。是否有一种不使用计时器(即带有信号和插槽)的可靠方法?或者计时器是唯一的方法吗 MainWindow::MainWindow(QWidget *parent) : QMainWindow(

使用Qt库,是否有一种方法可以使用信号自动更新
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;
}
#包括
#包括“mainwindow.h”
#包括“ui_main window.h”
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
ui->dateTimeEditSystem->setDateTime(QDateTime::currentDateTime());
QTimer*定时器=新的QTimer(此);
连接(计时器、信号(timeout())、此、插槽(updateTime());
定时器->启动(1000);
}
void主窗口::updateTime()
{
ui->dateTimeEditSystem->setDateTime(QDateTime::currentDateTime());
}
MainWindow::~MainWindow()
{
删除用户界面;
}
更新:

这其实很容易做到。代码未更新的原因是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
\ifndef主窗口
#定义主窗口
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
Ui::MainWindow*Ui;
专用插槽:
void updateTime();
};
#endif//main窗口

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

请注意,
QTimer
的分辨率在不同的操作系统上有所不同,但是对于每次需要进行约1秒的更新,
QTimer
在几乎所有的平台上都可以。有关QTimer分辨率的更多信息,请参阅以下内容:


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

请注意,
QTimer
的分辨率在不同的操作系统上有所不同,但是对于每次需要进行约1秒的更新,
QTimer
在几乎所有的平台上都可以。有关QTimer分辨率的更多信息,请参阅以下内容:


您不想使用计时器有什么原因吗?谢谢,拉。你的意思是计时器可能是Qt中最可靠的方法吗?我使用wxWidgets的经验比Qt丰富。是的,计时器应该足够可靠,特别是当你只需要大约每秒更新一次的时候。Qt甚至有几个例子:好的,我来看看。谢谢你给我指出了正确的方向,拉。正如我在上面的代码中所显示的那样,这非常有效。也许你可以发布这个问题的简短答案,这样我就可以关闭它了?你不想使用计时器有什么原因吗?谢谢,拉。你的意思是计时器可能是Qt中最可靠的方法吗?我使用wxWidgets的经验比Qt丰富。是的,计时器应该足够可靠,特别是当你只需要大约每秒更新一次的时候。Qt甚至有几个例子:好的,我来看看。谢谢你给我指出了正确的方向,拉。正如我在上面的代码中所显示的那样,这非常有效。也许你可以发布这个问题的简短答案,这样我就可以结束它了?谢谢你,拉。我的想法是,也许这可以通过使用信号和插槽实现自动化,但不需要使用计时器。使用计时器比我想象的要简单得多(前提是slot函数列在头文件中)。作为一名C++老手,我忘记Qt是C++预处理的。谢谢你,RA。我的想法是,也许这可以通过使用信号和插槽实现自动化,但不需要使用计时器。使用计时器比我想象的要简单得多(前提是slot函数列在头文件中)。作为C++的老手,我忘记了Qt是预处理C++。