<hpp>
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <Qtime>
#include <QTimer>
#include <QMenu>
#include <QMouseEvent>
#include <QToolTip>
#include <QDateTime>namespace Ui {
class Widget;
}class Widget : public QWidget
{
Q_OBJECTpublic:
explicit Widget(QWidget *parent = 0);
~Widget();private:
Ui::Widget *ui;
QPainter paiter;
QPen pen;
QBrush brush;
QColor color;
QFont font;
QMenu *popmenu;
QAction *a1;
QAction *a2;QPoint mouseWindowpoistion; // 相对于窗口
QPoint mousedeskpoistion; // 相对于desk
QPoint windowpoistion; //
protected:
virtual void contextMenuEvent(QContextMenuEvent* event);
virtual void paintEvent(QPaintEvent *event);
virtual void mousePressEvent(QMouseEvent* event);
virtual void mouseMoveEvent(QMouseEvent* event);
virtual void mouseDoubleClickEvent(QMouseEvent* event);};
#endif // WIDGET_H
cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QTimer *timer = new QTimer(this);
timer->start(10);
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
//按钮
popmenu = new QMenu(this);
popmenu->setStyleSheet("background-color:rgb(100,100,100)");
a1 = new QAction(this);
a1->setText("Exit");
a2 = new QAction(this);
a2->setText("Help");
connect(a1,SIGNAL(triggered(bool)),this,SLOT(close()));
setMouseTracking(true);
this->setWindowFlag(Qt::FramelessWindowHint); //
this->setAttribute(Qt::WA_TranslucentBackground);
}Widget::~Widget()
{
delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{
paiter.begin(this);
color.setRgb(0,0,100);
paiter.setPen(color);
font.setFamily("宋体");
font.setPointSize(66);
font.setItalic(true);
paiter.setFont(font);
paiter.drawText(rect(),Qt::AlignCenter,"Time");
paiter.setRenderHint(QPainter::Antialiasing); // 抗锯齿
paiter.translate(width()/2,height()/2);
paiter.setPen(Qt::white);
int side = qMin(width(),height());
paiter.scale(side/200,side/200);
for(int i=0;i<12;++i)
{
paiter.drawLine(88,0,96,0);
paiter.rotate(360/12);
}
for(int i=0;i<60;++i)
{
paiter.drawLine(92,0,96,0);
paiter.rotate(360/60);
}
static const QPoint seconedHead[3]
{
QPoint (7,8),
QPoint (-7,8),
QPoint(0,-80)
};
QTime time = QTime::currentTime();
paiter.save();
paiter.setPen(Qt::NoPen);
paiter.setBrush(QColor(50,50,50));
paiter.rotate(6*time.second());
paiter.drawConvexPolygon(seconedHead,3);
paiter.restore();
static const QPoint miuneHead[3]
{
QPoint (7,8),
QPoint (-7,8),
QPoint(0,-55)
};
paiter.save();
paiter.setPen(Qt::NoPen);
paiter.setBrush(QColor(150,150,150));
paiter.rotate(6*time.minute());
paiter.drawConvexPolygon(miuneHead,3);
paiter.restore();
static const QPoint hourHead[3]
{
QPoint (7,8),
QPoint (-7,8),
QPoint(0,-30)
};
paiter.save();
paiter.setPen(Qt::NoPen);
paiter.setBrush(QColor(100,100,100));
paiter.rotate(30*time.hour());
paiter.drawConvexPolygon(hourHead,3);
paiter.restore();
paiter.end();
}void Widget::contextMenuEvent(QContextMenuEvent *event)
{
popmenu->clear();
popmenu->addAction(a1);
popmenu->addAction(a2);
popmenu->exec(QCursor::pos());
}void Widget::mousePressEvent(QMouseEvent *event)
{
mouseWindowpoistion = event->pos();
}void Widget::mouseMoveEvent(QMouseEvent *event)
{
// QString poster = QString ("%1%2").arg(event->pos().x()).arg(event->pos().y());
QDateTime nowtime = QDateTime::currentDateTime();
QToolTip::showText(QCursor::pos(),nowtime.toString("yyyy-mm-dd HH:mm:ss"),this);
if(event->buttons() & Qt::LeftButton)
{
mousedeskpoistion = event->globalPos();
windowpoistion = mousedeskpoistion - mouseWindowpoistion;
this->move(windowpoistion);
}
}void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
if(this->isFullScreen())
this->showNormal();
else
this->showFullScreen();
}