使用 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 文件中缺少插槽声明。这是 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/