使用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标题的完整内容。
#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
答案 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