QT动态显示当前时间 用较少的代码和改动引出QT编程
一、新建Qt4 GUI Application,默认选项,一路ok到finish
工程名:BeiJingTime
工程结构:
二、mainwindow.ui设计图形界面
这里为简单起见,只添加一个label控件,将此控件名改为beiJingLabel
三、在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(); }