2012-10-11 82 views
1

使用Qt庫,有沒有一種方法可以使用信號自動更新QDateTimeEdit,以便窗口小部件以類似於時鐘的方式顯示當前日期和時間?自動更新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; 
} 

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 
+0

是否有一個理由,爲什麼你不希望使用定時器嗎? –

+0

謝謝,RA。你的意思是說,一個計時器可能是Qt中最可靠的方法嗎?我有更多的經驗使用wxWidgets比Qt。 –

+1

是的,計時器應該足夠可靠,特別是如果您只需要每秒更新一次即可。 Qt甚至有幾個例子:http://qt-project.org/doc/qt-4.8/widgets-digitalclock.html和http://qt-project.org/doc/qt-4.8/widgets-shapedclock。 html –

回答

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

+0

謝謝,RA。我有這樣的想法,也許這可以通過使用信號和插槽來實現自動化,但不使用計時器。使用計時器,它比我想象的要簡單得多(假設插槽功能列在頭文件中)。作爲一名C++老手,我忘記了Qt是經過預處理的C++。 –

相關問題