QT动态显示当前时间 用较少的代码和改动引出QT编程

一、新建Qt4 GUI Application,默认选项,一路ok到finish

工程名:BeiJingTime

image

 

工程结构:

 image

 

二、mainwindow.ui设计图形界面

这里为简单起见,只添加一个label控件,将此控件名改为beiJingLabel

image

 

三、在mainwindow.h中声明槽函数displayTime(),注意声明加slots!!!

 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

/*槽函数的声明*/
public slots:
    void displayTime(void);

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
 

四、mainwindow.cpp中连接信号与槽,并实现槽函数,如下代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDateTime>
#include <QTimer>
#include <QLabel>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setWindowTitle("北京时间by小山");

    /* 定时器,每1000ms执行一次槽函数displayTime() */
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(displayTime()));
    timer->start(1000);
}

/**在beiJingLabel控件上显示当前系统时间 */
void MainWindow::displayTime()
{
    QDateTime dt;
    QTime time;
    QDate date;

    dt.setTime(time.currentTime());
    dt.setDate(date.currentDate());

    QString currentDate = dt.toString("yyyy:MM:dd:hh:mm:ss");
    ui->beiJingLabel->setText(currentDate);
}



MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}


 

 

 

 

至此,已经可以运行程序了,如要解决中文显示问题,要改变main.cpp如下

 

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));

    MainWindow w;
    w.show();
    return a.exec();
}


posted @ 2012-11-28 20:02  helloweworld  阅读(665)  评论(0编辑  收藏  举报