⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bdesktopclock.cpp

📁 Linux/windows环境下Qt程序
💻 CPP
字号:
/* *  Copyright (C) 2005 Bucote Software LLC *  tbradley@bucote.com * *  file: BDesktopClock.cpp * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2, or (at your option) *  any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software Foundation, *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */#include <qapplication.h>#include <qpopupmenu.h>#include <qdatetime.h>#include <qpainter.h>#include <qpixmap.h>#include <qbitmap.h>#include <qlabel.h>#include <qpoint.h>#include <qfont.h>#include "desktopClockPreferences.h"#include "BDesktopClock.h"static const double degreesPerMinute  = 360.0 / 60.0;static const double degreesPerSecond  = 360.0 / 60.0;static const double degreesPerHour    = 360.0 / 12.0;static const double degreesPerMinHour = 360.0 / 720.0;static QPen B2  (Qt::black,    2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);static QPen B3  (Qt::black,    3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);static QPen R2  (Qt::red,      2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);static QPoint clockCenter(101, 101);//=====================================================//=====================================================BDesktopClock::BDesktopClock(WFlags f, BSettings  set) : QWidget(0, 0, f), _settings(set){ 	face = new QPixmap(QPixmap::fromMimeSource("face.png"));	if(!_settings.showWM)		setMask(QPixmap::fromMimeSource("mask.png").createHeuristicMask());       	glare = new QPixmap(QPixmap::fromMimeSource("glare.png"));	setFixedSize(face->size());	if(_settings.showSeconds)		startTimer(1000);	else		startTimer(60000);	setBackgroundMode(Qt::NoBackground);	setFont(QFont(_settings.fontFormat));	hHand = QPen(QColor(_settings.hourColor),   3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);	mHand = QPen(QColor(_settings.hourColor),   2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);	sHand = QPen(QColor(_settings.secondColor), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);}//=====================================================//=====================================================void BDesktopClock::paintEvent(QPaintEvent *){	QPixmap pm(*face);	QPainter p;	QRect textRect;	int x, y;	int h = QTime::currentTime().hour();	int m = QTime::currentTime().minute();	int s = QTime::currentTime().second();	p.begin(&pm, this);	p.translate(101, 101);			double deg;	// Draw the hour hand	if(_settings.showAH)		deg = degreesPerMinHour * ((h * 60) + m);	else		deg = degreesPerHour * h;	p.rotate(deg);	p.setPen(hHand);	p.drawLine(0, 0, 0, -33);	p.rotate(-deg);	// Draw the minute hand	deg = degreesPerMinute * m;	p.rotate(deg);	p.setPen(mHand);	p.drawLine(0, 0, 0, -48);	p.rotate(-deg);	// Draw the second hand	if(_settings.showSeconds) {		deg = degreesPerSecond * s;		p.rotate(deg);		p.setPen(sHand);		p.drawLine(0, 0, 0, -50);		p.rotate(-deg);	}	p.translate(-101, -101);	// Draw center circle	if(_settings.showGlare)		p.drawPixmap(0, 0, *glare);	// Draw the text time	if(_settings.showTime) {		QString time = QTime::currentTime().toString(_settings.timeFormat);		textRect     = fontMetrics().boundingRect(time);		x            = (width() - textRect.width()) / 2;		y            = height() - 20;		p.setPen(black);		p.drawText(x + 2, y + 2, time);		p.drawText(x + 1, y + 1, time);		p.setPen(white);		p.drawText(x, y, time);	}	// Draw the text date	if(_settings.showDate) {		QString date = QDate::currentDate().toString(_settings.dateFormat);		textRect     = fontMetrics().boundingRect(date);		x            = (width() - textRect.width()) / 2;		y            = height() - 42;		p.setPen(black);		p.drawText(x + 2, y + 2, date);		p.drawText(x + 1, y + 1, date);		p.setPen(white);		p.drawText(x, y, date);	}	p.end();	bitBlt(this, 0, 0, &pm);}//=====================================================//=====================================================void BDesktopClock::timerEvent(QTimerEvent *){	repaint();}    //=====================================================//=====================================================void BDesktopClock::mousePressEvent(QMouseEvent * event) {	last = event->pos();}        //=====================================================//=====================================================void BDesktopClock::mouseMoveEvent(QMouseEvent * event) {	move(pos() + (event->pos() - last)); }        //=====================================================//=====================================================void BDesktopClock::contextMenuEvent (QContextMenuEvent * event){	QPopupMenu menu(this);	menu.insertItem("Properties",  this, SLOT(showProperties()));	menu.insertItem("Exit",        this, SLOT(close()));	menu.exec(event->globalPos());}//=====================================================//=====================================================void BDesktopClock::showProperties() {	bool prevWM(_settings.showWM), prevTop(_settings.stayOnTop);	DesktopClockPreferences pref;	pref.setSettings(&_settings);	if(pref.exec()) {		bool doReparent = false;		pref.getSettings(&_settings);		_settings.saveSettings();				Qt::WFlags flags = WNoAutoErase;		if(prevWM != _settings.showWM || prevTop != _settings.stayOnTop) {			if(!_settings.showWM)				flags |= Qt::WStyle_Customize | Qt::WStyle_NoBorder;						if(_settings.stayOnTop)				flags |= Qt::WStyle_StaysOnTop;			doReparent = true;		}		if(doReparent)			reparent(parentWidget(), flags, mapToGlobal( QPoint(0, 0)), true);		if(!_settings.showWM)			setMask(QPixmap::fromMimeSource("mask.png").createHeuristicMask ());       				killTimers();				if(_settings.showSeconds)			startTimer(1000);		else			startTimer(60000);		setFont(QFont(_settings.fontFormat));		hHand = QPen(QColor(_settings.hourColor), 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);		mHand = QPen(QColor(_settings.hourColor), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);		sHand = QPen(QColor(_settings.secondColor), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);	}  	repaint();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -