最近在学习Qt,从网上看到一些方法,用QPushButton写了电子时钟。主要是利用QPushButton类的setIcon(QIcon(filename))方法。
效果如下:
准备显示0-9数字的png格式图片,并以对应的数字命名,这样就可以通过数字很快的找到图片,并通过QPushButton显示出来。
直接上代码:
#ifndef CLOCK_H
#define CLOCK_H
#include <QTime>
#include <QTimer>
#include <QPoint>
#include <QPixmap>
#include <QMouseEvent>
#include <QMainWindow>
namespace Ui{
class cl;
}
class Clock :public QMainWindow
{ Q_OBJECT
public:
Clock(QWidget *parent=0);
QString getPngName(QChar);
protected:
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
private:
Ui::cl *ui;
QTimer *timer;
QPoint dpos;
private slots:
void showTime();//显示时间
};
#endif // CLOCK_H
#include "clock.h" #include "ui_cl.h" Clock::Clock(QWidget *parent) :QMainWindow(parent,Qt::FramelessWindowHint), ui(new Ui::cl) { ui->setupUi(this); timer=new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(showTime())); timer->start(1000); ui->g->setIcon((QIcon(":/dot.png"))); ui->h->setIcon((QIcon(":/dot.png"))); connect(ui->f,SIGNAL(clicked()),this,SLOT(close())); showTime(); } QString Clock::getPngName(QChar x){ return QString(":/")+x+QString(".png"); } void Clock::showTime(){ QTime time=QTime::currentTime(); QString text=time.toString("hh:mm:ss"); ui->a->setIcon(QIcon(getPngName(text[0]))); ui->b->setIcon(QIcon(getPngName(text[1]))); ui->c->setIcon(QIcon(getPngName(text[3]))); ui->d->setIcon(QIcon(getPngName(text[4]))); ui->e->setIcon(QIcon(getPngName(text[6]))); ui->f->setIcon(QIcon(getPngName(text[7]))); } void Clock::mousePressEvent(QMouseEvent *e){ dpos=e->globalPos()-frameGeometry().topLeft(); } void Clock::mouseMoveEvent(QMouseEvent *e){ if(e->buttons()&Qt::LeftButton){ move(e->globalPos()-dpos); e->accept(); } }
#include<QApplication> #include"clock.h" int main(int argc,char* argv[]){ QApplication app(argc,argv); Clock w; w.setWindowOpacity(1); w.setWindowFlags(Qt::FramelessWindowHint); w.setAttribute(Qt::WA_TranslucentBackground); w.show(); return app.exec(); }