01--QT GUI视频教程
2016-05-14 06:27
645 查看
A:QT可以用来干什么:
B:QT是或平台的一种方案,一次编写随处编译。C++与QT的关系类似于C++与MFC的关系。但是QT是跨平台的
C++配合QT编写的程序可以不怎么修改的就移植到Windows,Linux,MAC,IOS,Android,WP,WinCE上,
特别是学了C++但是不想学Java却想开发安卓程序的同学就可以学习QT了
第一节课:制作一个类似于Windows的时钟
课程持续更新,欢迎加扣扣讨论:1085081059
视频教程和工程文件链接:
http://pan.baidu.com/s/1pLSXJjP
B:QT是或平台的一种方案,一次编写随处编译。C++与QT的关系类似于C++与MFC的关系。但是QT是跨平台的
C++配合QT编写的程序可以不怎么修改的就移植到Windows,Linux,MAC,IOS,Android,WP,WinCE上,
特别是学了C++但是不想学Java却想开发安卓程序的同学就可以学习QT了
第一节课:制作一个类似于Windows的时钟
课程持续更新,欢迎加扣扣讨论:1085081059
视频教程和工程文件链接:
http://pan.baidu.com/s/1pLSXJjP
#ifndef CLOCK_H #define CLOCK_H #include <QWidget> class Clock : public QWidget { Q_OBJECT public: Clock(QWidget *parent = 0); ~Clock(); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; }; #endif // CLOCK_H
#include "clock.h" #include "QTimer" #include "QPainter" #include "QTime" Clock::Clock(QWidget *parent) : QWidget(parent) { //创建一个定时器,等会每秒跟新下界面 QTimer *timer = new QTimer(this); //将定时器时间到了和时间更新两个函数联系起来 connect(timer, SIGNAL(timeout()), this, SLOT(update())); //启动定时器,时间间隔为1000毫秒 timer->start(1000); //设置窗体标题 setWindowTitle(tr("教主送你们一块手表")); //设置窗体大小 resize(200, 200); } Clock::~Clock() { } void Clock::paintEvent(QPaintEvent *) { //用来画时针的三个点 static const QPoint hourHand[3] = { QPoint(7, 8), QPoint(-7, 8), QPoint(0, -40) }; //用来画分针的三个点 static const QPoint minuteHand[3] = { QPoint(7, 8), QPoint(-7, 8), QPoint(0, -70) }; //用来画秒针的三个点 static const QPoint secHand[3] = { QPoint(7,8), QPoint(-7,8), QPoint(0,-80) }; //分别定义用来画三个指针的颜色 //参数(Red,Green,Blue,透明度) QColor hourColor(127, 0, 127); QColor minuteColor(0, 127, 127, 191); QColor secColor(255,0,0); //获得窗体宽度和高度,然后取最小的那个 int side = qMin(width(), height()); QTime time = QTime::currentTime(); //定义一个画笔用来画指针和表盘 QPainter painter(this); //类似于抗锯齿之类的 painter.setRenderHint(QPainter::Antialiasing); //将坐标中心转移到窗体中心 painter.translate(width() / 2, height() / 2); //定义刻度大小,就是把刚刚得到的比较短的那边除以200得到 painter.scale(side / 200.0, side / 200.0); painter.setPen(Qt::NoPen); painter.setBrush(hourColor); painter.save(); //通过旋转坐标轴得到图形的旋转,每小时正好30度 painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); painter.drawConvexPolygon(hourHand, 3); painter.restore(); painter.setPen(hourColor); //通过旋转12次坐标轴画出小时分割线 for (int i = 0; i < 12; ++i) { painter.drawLine(88, 0, 96, 0); painter.rotate(30.0); } painter.setPen(Qt::NoPen); painter.setBrush(minuteColor); painter.save(); //通过旋转坐标轴的到分针的旋转,每分钟正好6度 painter.rotate(6.0 * (time.minute() + time.second() / 60.0)); painter.drawConvexPolygon(minuteHand, 3); painter.restore(); painter.setPen(minuteColor); //对5取余,跳过已经画过的小时分割线 for (int j = 0; j < 60; ++j) { if ((j % 5) != 0) painter.drawLine(92, 0, 96, 0); painter.rotate(6.0); } painter.setPen(Qt::NoPen); painter.setBrush(secColor); painter.save(); painter.rotate(time.second() * 6); painter.drawConvexPolygon(secHand, 3); painter.restore(); }
#include "clock.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Clock w; w.show(); return a.exec(); }
相关文章推荐
- 深入理解Java PriorityQueue
- vueJs入门实践遇到的坑和一些想法
- Provisioning Services 7.8 入门系列教程之十四 UEFI支持和BOOTPTAB 编辑器
- Provisioning Services 7.8 入门系列教程之十四 UEFI支持和BOOTPTAB 编辑器
- rocketmq 消费者负载均衡-分布式下的messageQueue的分配和锁定
- LeetCode 272. Closest Binary Search Tree Value II
- 通过委托与事件监听状态改变来更新UI
- POJ 1053 Integer Inquiry (大数加法,还是Java大法好)
- UIImagePickerController调用相册/相机
- UESTC-2016dp专题 F 柱爷与三叉戟不得不说的故事
- how to build libigl in unbuntu(on 13 may 2016)
- UESCTC-2016dp专题 D 柱爷的恋爱
- 解决git clone时报错:The requested URL returned error: 401 Unauthorized while accessing
- SPOJ 375 QTREE Query on a tree 树链剖分
- 225. Implement Stack using Queues (用队列模拟栈)
- iOS给UIView添加常用的Extension
- [LeetCode]Top K Frequent Elements
- Java实验5 GUI编程
- marquee 笔记
- 奇异值分解(We Recommend a Singular Value Decomposition)