c++ - 自动更新 QDateTimeEdit 以显示当前系统日期和时间

标签 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 header 的完整内容。

#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

最佳答案

自动更新 QDateTimeEdit 或 Qt 中的任何其他时钟小部件可以使用 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

关于c++ - 自动更新 QDateTimeEdit 以显示当前系统日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850355/

相关文章:

qt - 有没有办法从Qt中的另一个信号触发信号?

c++ - 如何在 Qt 中以 setter 作为插槽编写可读的 c++ getter 和 setter

c++ - 无法在 C 程序中链接 .a 库文件

c++ - is reference conversion 是标准转换

c++ - 我只是不了解 Qt 中的线程

c++ - 取消 QTableView 中的单元格值

c++ - Qt - 获取系统信息

python - 为什么 PySide 仍然需要 QString 作为 textChanged SIGNAL?

c++ - 返回值为枚举的地址数组

c++ - 如何用Cmake获取libasan.so路径?