Qt学习之旅---2.绘图,时钟小例子
来源:互联网 发布:教数学的软件 编辑:程序博客网 时间:2024/06/08 11:36
学习笔记,小白可以相互学习,大佬看到能告诉咱理解不对的地方就好了。
/*********.h**********************************/#ifndef WIDGET_H#define WIDGET_H#include<QWidget>#include<QPaintEvent>#include<QPainter>#include<QPen>#include<QTimer>#include<iostream>#include<QLabel>class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = 0); ~Widget();protected: void paintEvent(QPaintEvent *event) { setFixedSize(500,500); static int i = 0; QPainter ppp(this);//定义一个画家 QPen p(QColor(Qt::red));//画笔,颜色红 p.setWidth(4);//粗细10 ppp.setPen(p);//画家拿到笔 ppp.translate(200,200);//移动中心点(移动画家的中心点位置) //ppp.drawEllipse(QPoint(0,0),100,100);//以画家为中心点,画椭圆 ppp.rotate(i*6);//转多少度,参数为转的度数 i++; ppp.drawLine(0,0,0,-160);//画线 //ppp.drawText(0,0,"小可爱"); static int j = 0; QPainter ppp1(this); QPen p1(QColor(Qt::blue)); p1.setWidth(4); ppp1.setPen(p1); ppp1.translate(200,200); ppp1.rotate(j*0.5); j++; ppp1.drawLine(0,0,0,-120); static int k = 0; QPainter ppp3(this); QPen p3(QColor(Qt::green)); p3.setWidth(6); ppp3.setPen(p3); ppp3.translate(200,200); ppp3.rotate(k*0.25/60); k++; ppp3.drawLine(0,0,0,-80); QPainter ppp4(this); QPen p4(QColor(Qt::black)); p4.setWidth(4); ppp4.setPen(p4); ppp4.translate(200,200); ppp4.drawEllipse(QPoint(0,0),190,190); QPainter ppp2(this); QPen p2(QColor(Qt::black)); p2.setWidth(20); ppp2.setPen(p4); ppp2.translate(200,200); ppp2.drawPoint(0,0); QPainter ppp5(this); QPen p5(QColor(Qt::black)); p5.setWidth(2); ppp5.setPen(p5); ppp5.translate(350,350); ppp5.translate(rand()%20,rand()%20); ppp5.drawPixmap(0,0,QPixmap("ooopic_1504102052.ico"));// ppp5.scale(0,0);//放大 QPainter ppp6(this); QPen p6(QColor(Qt::black)); p6.setWidth(4); ppp6.setPen(p6); ppp6.translate(200,200); int a; QString b; for(a = 0; a < 12 ;a++) { b = QString::number(a); ppp6.drawLine(0,-180,0,-190); ppp6.drawText(0,-165,b); ppp6.rotate(30); } QPainter ppp7(this); QPen p7(QColor(Qt::blue)); p7.setWidth(2); ppp7.setPen(p7); ppp7.translate(200,200); for(a = 0; a < 60 ;a++) { ppp7.drawLine(0,-183,0,-190); ppp7.rotate(6); } // 求时间数字 sec = i%60 - 1; min = i/60%60; hour = i/3600%24; std::cout<<":"<<hour<<" :"<<min<<" :"<<" :"<<sec<<std::endl; QString x,y,z; x = QString::number(hour); y = QString::number(min); z = QString::number(sec); QPainter ppp8(this); QPen p8(QColor(Qt::red)); p8.setWidth(30); ppp8.setPen(p8); ppp8.translate(0,480); ppp8.drawText(0,0,x); ppp8.drawText(20,0," : "); ppp8.drawText(40,0,y); ppp8.drawText(60,0," : "); ppp8.drawText(80,0,z); }public slots: void paint() { update();//人工调用 }private: QTimer *time; int sec,min,hour; QLabel *lab;};#endif // WIDGET_H/********.cpp**********************************/#include "widget.h"Widget::Widget(QWidget *parent) : QWidget(parent){ time = new QTimer; time->start(1000); connect(time,SIGNAL(timeout()),SLOT(paint()));}Widget::~Widget(){}
小时钟:
实现了鼠标键盘滚轮事件改变其时间
/********myclock.h*****************************/
#ifndef MYCLOCK_H#define MYCLOCK_H#include <QObject>#include <QWidget>#include <QTimer>class myclock : public QWidget{ Q_OBJECTpublic: explicit myclock(QWidget *parent = nullptr);signals:public slots: void setvalue(int); void paint() { update(); }protected: void paintEvent(QPaintEvent *event);private:// int pos; int s; QTimer *time;};#endif // MYCLOCK_H
/*************widget.h***************************************/
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include<QSlider>#include"myclock.h"#include<QMouseEvent>#include<QKeyEvent>#include<QWheelEvent>#include<QTimer>#include<QLCDNumber>class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = 0); ~Widget();public slots: void shownum(int num);private: myclock *clock; QSlider *sd; int click; QLCDNumber *lcd;protected: void mousePressEvent(QMouseEvent *event); void wheelEvent(QWheelEvent *event); void keyPressEvent(QKeyEvent *event);};#endif // WIDGET_H
/******************myclock.cpp********************/
#include "myclock.h"#include<QWidget>#include<QPaintEvent>#include<QPainter>#include<QString>#include<QDebug>#include<QBrush>myclock::myclock(QWidget *parent) : QWidget(parent){ //update(); s = 0; time = new QTimer; time->start(1000); connect(time,SIGNAL(timeout()),SLOT(paint()));}void myclock::setvalue(int i){ s = i; update();}void myclock::paintEvent(QPaintEvent *event){ setFixedSize(600,600); QPainter pp(this); QBrush b(QColor(Qt::yellow)); QPen p(QColor(Qt::black)); p.setWidth(4); pp.setPen(p); pp.translate(this->width()/2,this->height()/2); pp.drawEllipse(QPoint(0,0),200,200); QPainter pp1(this); QPen p1(QColor(Qt::black)); p1.setWidth(4); pp1.setPen(p1); pp1.translate(this->width()/2,this->height()/2); for(int i = 0;i < 12 ;i++) { pp1.drawLine(0,-190,0,-200); pp1.drawText(0,-170,QString::number(i)); pp1.rotate(30); } QPainter pp2(this); QPen p2(QColor(Qt::black)); p2.setWidth(2); pp2.setPen(p2); pp2.translate(this->width()/2,this->height()/2); for(int j = 0;j < 60 ;j++) { pp2.drawLine(0,-193,0,-200); pp2.rotate(6); } QPainter pp5(this); QPen p5(QColor(Qt::green)); p5.setWidth(6); pp5.setPen(p5); pp5.translate(this->width()/2,this->height()/2); pp5.rotate(s*0.25/60); pp5.drawLine(0,0,0,-70); QPainter pp4(this); QPen p4(QColor(Qt::blue)); p4.setWidth(5); pp4.setPen(p4); pp4.translate(this->width()/2,this->height()/2); pp4.rotate(s*0.5); pp4.drawLine(0,0,0,-120); QPainter pp3(this);//定义一个画家 QPen p3(QColor(Qt::red));//画笔,颜色红 p3.setWidth(4);//粗细10 pp3.setPen(p3);//画家拿到笔 pp3.translate(this->width()/2,this->height()/2); pp3.rotate(s*6); pp3.drawLine(0,0,0,-170); s++; qDebug()<<"s ="<<s;}
#include "widget.h"#include <QVBoxLayout>#include<QDebug>int now = 0;Widget::Widget(QWidget *parent) : QWidget(parent){ click = 0; lcd = new QLCDNumber; lcd->setMinimumHeight(45); sd = new QSlider(this); sd->setOrientation(Qt::Horizontal); sd->setRange(0,864399); clock = new myclock(this); clock->setFixedSize(300,300); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(clock); vbox->addWidget(lcd); vbox->addWidget(sd); setLayout(vbox); connect(sd,SIGNAL(valueChanged(int)),clock,SLOT(setvalue(int))); connect(sd,SIGNAL(valueChanged(int)),this,SLOT(shownum(int)));}void Widget::shownum(int num){ now = num; lcd->display(num);}void Widget::mousePressEvent(QMouseEvent *event){ if( Qt::LeftButton == event->button()) { click++; int c = click + now; sd->setValue(c); if(c == 864399) { click = 0; sd->setValue(1*click); } } else if( Qt::RightButton == event->button()) { click--; sd->setValue(1*click); if(click == 0) { click = 359; sd->setValue(1*click); } }}void Widget::wheelEvent(QWheelEvent *event){ if( Qt::WA_TranslucentBackground == event->delta()) { click++; sd->setValue(1*click); if(click == 359) { click = 0; sd->setValue(1*click); } } else if( -120 == event->delta()) { click--; sd->setValue(1*click); if(click == 0) { click = 359; sd->setValue(1*click); } }}void Widget::keyPressEvent(QKeyEvent *event){ if( (Qt::Key_Up == event->key()) || (Qt::Key_Right == event->key())) { click++; sd->setValue(1*click); if(click == 359) { click = 0; sd->setValue(1*click); } } else if( (Qt::Key_Down == event->key()) || (Qt::Key_Left == event->key())) { click--; sd->setValue(1*click); if(click == 0) { click = 359; sd->setValue(1*click); } }}Widget::~Widget(){}
阅读全文
1 0
- Qt学习之旅---2.绘图,时钟小例子
- Qt学习之旅---3.文件处理,小例子文本编辑器
- QT+OPenGL绘图例子
- QT+OPenGL绘图例子
- android学习之绘图和触摸事件结合的小例子
- android学习之绘图和触摸事件结合的小例子
- Canvas小例子-时钟
- swing绘图小例子
- 绘图小例子
- 【Qt编程】Qt 小时钟
- Qt学习之路(29): 绘图设备
- Qt学习之路(29): 绘图设备
- Qt学习之路(29): 绘图设备
- QT学习 之 QwtPlot(数学绘图)
- Qt学习之路(29): 绘图设备
- Qt学习之路(29): 绘图设备
- QT学习 之 QwtPlot(数学绘图)
- GDI绘图之指针时钟
- xml文件基本格式与解析(一)
- 常见数据结构和算法(下)
- Centos7系统自动安装jdk1.7脚本
- sql初级语句
- 数据库三大范式
- Qt学习之旅---2.绘图,时钟小例子
- SpringMVC集成redis
- 程序员应有的思想
- 几款极好的 JavaScript 文件上传插件
- 【SQL Server学习笔记】5:使用INSERT语句插入数据
- 《php经典实例》第三版1.10去除字符串首尾的空格
- 2017.9.6 复习之 toposort
- java对象和xml的互相转换,JAXB可以轻松实现
- 2017"百度之星"程序设计大赛