2012-10-11 50 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++。 –

相关问题