qt 时钟绘制
来源:互联网 发布:紫猫编程学院全套教程 编辑:程序博客网 时间:2024/06/05 20:56
Qt 的绘制,首先看Qt文档:
The common use of QPainter is inside a widget’s paint event: Construct and customize (e.g. set the pen or the brush) the painter. Then draw. Remember to destroy the QPainter object after drawing. For example:
大致意思如下:
Qt画家通常的用法是在一个部件事件中;构造和定制的。
void MainWindow::paintEvent(QPaintEvent *event)
{
//创建当前时间,在以后的时钟显示的时候,有用。QTime time=QTime::currentTime(); QPainter painter(this);//画一个从坐标90,90,开始的园,直径为180。painter.setRenderHint(QPainter::Antialiasing,true);painter.setBrush(QBrush(Qt::darkGray,Qt::SolidPattern));painter.drawEllipse(90,90,180,180); //创建一个锥形梯度,原点,焦点,都是180,180,-90代表向下的圆锥。QRadialGradient radgrient(180,180,-90,180,180);radgrient.setColorAt(0.0,Qt::darkGray); radgrient.setColorAt(0.2,Qt::white);radgrient.setColorAt(0.3,Qt::cyan);radgrient.setColorAt(1.0,Qt::white);//画一个从坐标100,100,开始的圆,直径为160,这样做是为了,让时钟外围有一个圆环包围。仅仅是为了美观而已。painter.setBrush(radgrient);painter.drawEllipse(100,100,160,160);//世界坐标转换,这样做的意思就是将坐标系建在180,180,的位置。这个时候这个点的实质的坐标是0,0.painter.translate(180,180);painter.save();//开始绘制时针,分针,秒针的颜色。参数以此为,red,green,blue,和透明度。QColor hour(200,10,50,150);QColor min(10,100,100,150);QColor sec(10,10,200,150);//绘制分针刻度线for (int i=1;i<=60;i++){ //绘制5个像素点长度的刻度线 painter.drawLine(0,-80,0,-75); //这个时候可以看上面的世界坐标转换。圆心坐标180,180,为坐标系原点, 他的上方,和左边为负数,右边,和下面为整数。好好思考。应该可以理解 painter.rotate(6); //一分钟,或者一秒旋转6度。其实本质是坐标系旋转6度。}// painter.setPen(hour);//绘制时针刻度线for (int i=1;i<=60;i++){ if(i%5==0) { //绘制5个像素点长度的刻度线 painter.setPen(Qt::red|Qt::cyan); painter.drawLine(0,-80,0,-70); painter.rotate(30); painter.setPen(Qt::red|Qt::blue); //在-3,-60,的位置添加每个刻度代表的数字。其实位置应该是0,-60,为了美观,位置有些偏差。 //tr("%1").arg(i/5)这个函数,是将数字转换成个字符串,默认情况,是以10进制转换.具体看Qt文档 painter.drawText(-3,-60, tr("%1").arg(i/5)); }}painter.restore();//绘制时针,分针,秒针的形状。四个坐标,那就是四边形。注意坐标一定要按顺序写,不然是一个不规则的形状。QPoint handhour[4]={ QPoint(0,-40), QPoint(3,0), QPoint(0,6), QPoint(-3,0),};QPoint handsec[4]={ QPoint(0,-60), QPoint(3,0), QPoint(0,6), QPoint(-3,0),};QPoint handmin[4]={ QPoint(0,-50), QPoint(3,0), QPoint(0,6), QPoint(-3,0),};//显示时针的位置painter.setPen(Qt::NoPen);painter.setBrush(hour);painter.save();painter.rotate(30.0*(time.hour()+time.minute()/60));painter.drawConvexPolygon(handhour,4); //绘制多边形函数。painter.restore();//切记旋转之后,一定要复位,不然,分针的旋转会在时针的基础上旋转。//显示分针的位置painter.setPen(Qt::NoPen);painter.setBrush(min);painter.save();painter.rotate(6.0*(time.minute()+time.second()/60));painter.drawConvexPolygon(handmin,4);painter.restore();//显示秒针位置painter.setPen(Qt::NoPen);painter.setBrush(sec);painter.save();painter.rotate(time.second()*6);painter.drawConvexPolygon(handsec,4);painter.restore();
}
主函数
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置一个定时器,超过1000毫秒时,发射timeout()信号,触发update()槽函数。进行时间更新
QTimer *time=new QTimer;
time->start(1000);
connect(time,SIGNAL(timeout()),this,SLOT(update()));
}
MainWindow::~MainWindow()
{
delete ui;
}
阅读全文
1 0
- Qt绘制简易时钟
- Qt之绘制时钟
- Qt时钟绘制
- qt之 绘制时钟
- qt 时钟绘制
- QT时钟
- Qt -- 时钟
- C# 绘制时钟
- 动态绘制时钟
- php绘制时钟
- 使用canvas绘制时钟
- canvas绘制时钟
- 自定义组件-绘制时钟
- Canva绘制时钟
- Android绘制时钟
- 使用canvas绘制时钟
- canvas绘制时钟
- canvas绘制电子时钟
- UVa 116
- x86-64 下函数调用及栈帧原理
- Windows与Ubuntu16.04文件传输
- windows录音程序简单解析
- linux上配置开发环境
- qt 时钟绘制
- 微信小程序遇到的常见问题(一)
- 线段树单点更新 ants
- Spring中InitializingBean接口使用理解
- apache2.4 tomcat7.0 整合
- 注意strncpy的n
- Chip Factory
- 【脚本语言系列】关于Python持久化shelve,你需要知道的事
- hdfs haadmin使用,DataNode动态上下线,NameNode状态切换管理,数据块的balance,HA下hdfs-api变化(来自学习资料)