资源简介
该代码QT4以上测试OK,能正确显示中文,功能能显示阴历,生宵,天干地支,另外加入了钟表可作参考,可以标记日期,可以设置日期样式, 点击设置图标进入详细设置,该代码可用于日历控件的深入开发
代码片段和文件信息
#include “clock.h“
#include
#include
#include
#include
#include
Clock::Clock(QWidget *parent) :
QDialog(parent)
{
QTimer *timer = new QTimer(this); //声明一个定时器
//update()会自动产生重绘消息,调用paintEvent()
connect(timer SIGNAL(timeout()) this SLOT(update())); //连接信号槽,定时器超时触发窗体更新
timer->start(1000); //启动定时器
setWindowtitle(tr(“My Clock“)); //设置窗体名称
setWindowIcon(QIcon(“:/images/clock.ico“));
resize(300 300); //设置窗体大小
}
void Clock::paintEvent(QPaintEvent *event)
{
//下面三个数组用来定义表针的三个顶点,以便后面的填充
static const QPoint hourHand[3] = {
QPoint(3 8)
QPoint(-3 8)
QPoint(0 -40)
};
static const QPoint minuteHand[3] = {
QPoint(3 8)
QPoint(-3 8)
QPoint(0 -70)
};
static const QPoint secondHand[3] = {
QPoint(3 8)
QPoint(-3 8)
QPoint(0 -90)
};//秒针
//填充表针的颜色
QColor hourColor(127 0 127); //分针颜色(第四个表示不透明度)
QColor minuteColor(0 127 127 191);
QColor secondColor(127 127 0 127);
int side = qMin(width() height()); //绘制的范围(宽、高中最小值)
QTime time = QTime::currentTime(); //获取当前的时间
QPainter painter(this); //声明用来绘图用的painter
//painter.setWindow(-100 -100 200 200);
painter.setRenderHint(QPainter::Antialiasing);//绘制的图像反锯齿
painter.translate(width() / 2 height() / 2);//重新定位坐标起始点,把坐标原点放到窗体的中央
painter.scale(side / 300.0 side / 300.0);//设定画布的边界用窗体宽高的最小值来计算时钟的大小,防止窗体拉伸导致的时钟变形以及显示不全
painter.setPen(Qt::red); //填充时针,不需要边线所以NoPen
QString timeStr= QTime::currentTime().toString();
painter.drawText(-40308030Qt::AlignHCenter | Qt::AlignTop timeStr);
painter.setPen(Qt::NoPen); //填充时针,不需要边线所以NoPen
painter.setBrush(hourColor); //画刷颜色设定
painter.save(); //保存painter的状态,保存的是当前的坐标状态,如果不保存,画完之后坐标以改变不方便画下一个
painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); //将painter(的”视角“)根据时间参数转移(30° * (小时 + 分钟 / 60))
painter.drawConvexPolygon(hourHand 3); //填充时针的区域
painter.restore();
painter.setPen(hourColor); //下面画表示小时的刻度,此时要用到画笔(因为要划线)
for (int i = 0; i < 12; ++i) {
painter.drawLine(0 -88 0 -96);
if (i == 0) painter.drawText(-10-882020Qt::AlignHCenter | Qt::AlignTopQString::number(12));
else painter.drawText(-10-882020Qt::AlignHCenter | Qt::AlignTopQString::number(i));
painter.rotate(30.0);
}
//后面的跟前面的类似,分别绘制了分针和秒针,及相应的刻度
painter.setPen(Qt::NoPen);
painter.setBrush(minuteColor);
painter.save();
painter.rotate(6.0 * (time.minute() + time.second() / 60.0)); //设旋转(角度 = 6° * (分钟 + 秒 / 60))
painter.drawConvexPolygon(minuteHand 3); //填充分针部分
painter.restore();
painter.setPen(minuteColor);
for (int j = 0; j < 60; ++j) { //循环60次,绘制表盘(其实可以从1开始,到59,提高一点效率)
if ((j % 5) != 0)
painter.drawLine(0 -92 0 -96); //不是正点刻度,绘制长4个像素的直线
painter.rotate(6.0); //循环60次,每次旋转6度,所以不用save
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4033 2014-06-11 10:15 calendarwidget\calendar.qm
文件 13288 2014-06-11 10:15 calendarwidget\calendar.ts
文件 1528372 2014-06-13 15:33 calendarwidget\calendarwidget
文件 506 2014-06-10 14:55 calendarwidget\calendarwidget.pro
文件 13130 2015-08-24 10:05 calendarwidget\calendarwidget.pro.user
文件 13541 2014-06-20 17:26 calendarwidget\calendarwidget.pro.user.6346352.15
文件 4287 2014-06-10 10:44 calendarwidget\clock.cpp
文件 265 2014-06-10 10:45 calendarwidget\clock.h
文件 466920 2014-06-10 10:45 calendarwidget\clock.o
文件 410 2014-06-10 08:57 calendarwidget\displaybutton.cpp
文件 298 2014-06-09 21:31 calendarwidget\displaybutton.h
文件 193808 2014-06-10 08:57 calendarwidget\displaybutton.o
文件 1170 2014-04-23 09:33 calendarwidget\images\about.png
文件 9662 2010-11-14 11:59 calendarwidget\images\clock.ico
文件 1424 2014-04-23 09:33 calendarwidget\images\configure.png
文件 12783 2014-06-09 17:04 calendarwidget\images\go_back_today.png
文件 9662 2010-11-14 11:58 calendarwidget\images\icon.ico
文件 2362 2015-08-24 10:07 calendarwidget\main.cpp
文件 413800 2014-06-13 15:00 calendarwidget\main.o
文件 9310 2014-06-10 15:50 calendarwidget\Makefile
文件 1978 2014-06-10 10:45 calendarwidget\moc_clock.cpp
文件 197968 2014-06-10 10:45 calendarwidget\moc_clock.o
文件 2109 2014-06-09 21:45 calendarwidget\moc_displaybutton.cpp
文件 200592 2014-06-09 21:45 calendarwidget\moc_displaybutton.o
文件 2727 2014-06-10 15:56 calendarwidget\moc_setbirthday.cpp
文件 313696 2014-06-10 15:56 calendarwidget\moc_setbirthday.o
文件 4669 2014-06-13 15:00 calendarwidget\moc_window.cpp
文件 223040 2014-06-13 15:00 calendarwidget\moc_window.o
文件 195576 2014-06-11 10:15 calendarwidget\qrc_resource.cpp
文件 47952 2014-06-11 10:15 calendarwidget\qrc_resource.o
............此处省略12个文件信息
相关资源
- 计算机网络打作业实现QQ.zip
- 基于qt实现的简易象棋游戏
- 基于ARM9的远程视频监控系统
- 基于QT的音乐播放器源代码及详细教程
- 有关Qt的二十篇中文论文
- 使用Qt编写的视频监控系统支持Qt4-Q
- 用QT读取Excel文件并将数据在界面上动
- QT使用Cypress FX3 USB库代码
- Qt 多线程连接数据库——数据库
- MQTTv3.1中文版
- mt7628 mqtt功能 放到packet下面就可以使
- Qt编写GIF录屏工具
- Qt实现PDF阅读器
- 使用Qt开发NFC应用.pdf
- MQTT-1.zip
- 海康相机SDK二次开发与Qt混合编程代码
- Qt和百度地图交互
- 第6章:Qtopia Core应用程序设计.ppt
- 基于Qt和mupdf的PDF阅读器
- QT桌面精灵
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
- Qt之FTP客户端
- Qt开机唤醒狩猎者
- 基于qt的udp实时录音
- qt 图标资源文件
- 用Qt绘制柱状图
- QT 4.8.4 64位版本-2
- 串口调试助手 Qt5版源码
- 仿qq界面 qt
- Qt仿QQ截图实现的截图工具
评论
共有 条评论