使用Qt庫,有沒有一種方法可以使用信號自動更新QDateTimeEdit
,以便窗口小部件以類似於時鐘的方式顯示當前日期和時間?自動更新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;
}
UPDATE:
其實,這是很容易做到的。代碼未更新的原因是由於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
是否有一個理由,爲什麼你不希望使用定時器嗎? –
謝謝,RA。你的意思是說,一個計時器可能是Qt中最可靠的方法嗎?我有更多的經驗使用wxWidgets比Qt。 –
是的,計時器應該足夠可靠,特別是如果您只需要每秒更新一次即可。 Qt甚至有幾個例子:http://qt-project.org/doc/qt-4.8/widgets-digitalclock.html和http://qt-project.org/doc/qt-4.8/widgets-shapedclock。 html –