1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览
1
新建项目
A
修改pro中的内容如下:
HEADERS MyWidget.h SOURCES MyWidget.cpp QT |
B
编写MyWidget.h
#ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QGraphicsScene> #include <QGraphicsLineItem> #include <QGraphicsPixmapItem> #include <QGraphicsTextItem> #include <QGraphicsPixmapItem> #include <QGraphicsItemAnimation> #include <QTimeLine> #include <QPrintPreviewDialog> // preview #include <QPrintDialog> // print // display scene #include <QGraphicsView> #include <QTimer> #include <QDateTime> class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent); void paintEvent(QPaintEvent *); QGraphicsScene* _scene; // data model QGraphicsView* _view; // show the data model void resizeEvent(QResizeEvent *); void mousePressEvent(QMouseEvent *); QTimer* _timer; signals: public slots: void slotPaintRequested(QPrinter*); void slotTimeout(); }; #endif // MYWIDGET_H |
C
编写MyWidget.cpp,内容如下:
#include "MyWidget.h" #include <QApplication> #include <QVBoxLayout> #include <QMouseEvent> #include <QDebug> #include <QPrinter> MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { QGraphicsLineItem* lineItem; QGraphicsTextItem* textItem; QGraphicsPixmapItem* pixmapItem; //定义一个view _view = new QGraphicsView(this); //让view的背景颜色编程黄色的 _view->setBackgroundBrush(Qt::yellow); //在view中添加scene _view->setScene(_scene = new QGraphicsScene); //在scene中添加一条线 _scene->addItem(lineItem = new QGraphicsLineItem(QLineF(QPointF(0, 0), QPointF(100, 100)))); //在scene中画线 _scene->addItem(textItem = new QGraphicsTextItem("Hello world")); //在scene中添加一个pixmap _scene->addItem(pixmapItem = new QGraphicsPixmapItem(QPixmap("../aaa.png"))); //定义一个转换 QTransform trans; //度 trans.rotate(30); textItem->setPos(QPointF(0, 300)); textItem->setTransform(trans); textItem->setFont(QFont("aaa", 50, 700, true)); pixmapItem->setPos(100, 100); //Animation 等价于 cocos2dx中的Action(动作) QGraphicsItemAnimation* animation = new QGraphicsItemAnimation; animation->setItem(pixmapItem); //设置一个事件线,表示执行一次动作所需要的时间,以毫秒值为参数 QTimeLine* timeline = new QTimeLine(3000); //表示这个动作循环执行多少次 timeline->setLoopCount(2); //这个动画开始以timeline为配置执行动作 animation->setTimeLine(timeline); //秒内,移动到200,200这个位置 animation->setTranslationAt(1, 200, 200); //开始执行 timeline->start(); /**************上面代码是可以独立运行的****************/ //下面的方式定义一个定时器 _timer = new QTimer(); //秒钟执行一次 _timer->setInterval(1000); //使信号和槽函数联系起来执行 connect(_timer, SIGNAL(timeout()), this, SLOT(slotTimeout())); _timer->start(); //下面的方法让定时器只执行一次 //QTimer::singleShot(1000, this, SLOT(slotTimeout())); } /** * @brief MyWidget::slotTimeout 秒钟会执行下面的函数一次 */ void MyWidget::slotTimeout() { qDebug() << "Time out"; } //上面运行出的结果如下: void MyWidget::resizeEvent(QResizeEvent *) { // set the size of _view = MyWidget::size _view->setGeometry(QRect(QPoint(0, 0), size())); } void MyWidget::paintEvent(QPaintEvent *) { } /* * QPixmap 平台优化了的一种图,人看起来是一样的,但是在不同的平台,调用的不同平台的底层接口 * QImage 在所有的平台都是一样的,这里是一个位图 * QBitmap 灰度图 * QPicture 说白了就是一个轨迹图,通过这个轨迹图能够画图图像 */ void MyWidget::mousePressEvent(QMouseEvent *ev) { if(ev->button() == Qt::RightButton) { #if 0 //只需放开下面的代码即可执行,放开这里的时候,当右击鼠标的 //时候发现在相应的目录下出现了图片 // save the view 通过下面的一段代码实现了将窗口中的内容保存到图片上了 // 这里的size()是窗口的大小 QPixmap pixmap(size()); QPainter painter(&pixmap); painter, size().width(), size().height()), Qt::white); _view->render(&painter); pixmap.save("../bbb.png"); //这里运行的结果如下: #endif #if 0 //下面是打印预览的功能,放开此处的时候右击鼠标的时候会出现打印预览的功能 QPrintPreviewDialog dlg; connect(&dlg, SIGNAL(paintRequested(QPrinter*)), this, SLOT(slotPaintRequested(QPrinter*))); dlg.exec(); //这里的运行结果如下: #endif #if 0 //下面的打印的功能,放开此处会出现让选择打印机的窗口 QPrintDialog dlg; connect(&dlg, SIGNAL(accepted(QPrinter*)), this, SLOT(slotPaintRequested(QPrinter*))); dlg.exec(); //这里的运行结果如下: #endif } } void MyWidget::slotPaintRequested(QPrinter *printer) { QPainter painter(printer); _scene->render(&painter); //说明直接可以通过painter打印出文字 painter.drawText(QPoint(100, 100), "Fuck"); } int main(int argc, char* argv[]) { QApplication app (argc,argv); MyWidget w; w.showMaximized(); return app.exec(); } |
1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览的更多相关文章
- Qt Creator中的3D绘图及动画教程(参照NeHe)
Qt Creator中的3D绘图及动画教程(参照NeHe) http://blog.csdn.net/cly116/article/details/47184729 刚刚学习了Qt Creator,发 ...
- vue开发中vue-resource + canvas 图片压缩、上传、预览
1.使用vue-resource上传,也可以自定义ajax上传: 2.使用<input type="file" @change="submit()" na ...
- github 上如何直接预览仓库中的html,搭建自己的主页
前言:最近在写vue+element ui 的一些demo,就在github上建了个仓库来管理,但是希望能直接在github上就能预览效果,所以才有了这篇文章.转载请注明出处:https://www. ...
- 解决vue-router中this.$router.push无法在新窗口中打开
解决vue-router中this.$router.push无法在新窗口中打开 let routeData = this.$router.resolve({ path: '/consult', que ...
- spyder中让生成的图像单独在窗口中显示
IPython 支持两种形式的绘图 终端输出图像新窗口输出图像方式 1 能够非常方便的保存输出记录(如将`IPython 终端输出转换成 Html 文件) 方式 2 则可以交互式的放大.拖动图片,并且 ...
- 在附件管理模块中增加对FTP 上传和预览的支持
在之前介绍的附件管理模块里面<Winform开发框架之通用附件管理模块>以及<Winform开发框架之附件管理应用>,介绍了附件的管理功能,通过对数据库记录的处理和文件的管理, ...
- vue中实现图片全屏缩放预览,支持移动端
# 安装 npm install vue-photo-preview --save # 引入 import preview from 'vue-photo-preview' import 'vue-p ...
- form表单系列中文件上传及预览
文件上传及预览 Form提交 Ajax 上传文件 时机: 如果发送的[文件]:->iframe, jQurey(),伪Ajax 预览 import os img_path = os.path.j ...
- OpenGL编程逐步深入(三)在窗口中显示一个三角形
这一节教程的内容会比较少,我们仅仅是对上一节教程中的代码进行扩展,在窗口中渲染一个三角形出来. 本节我们以下图所示正方形来讲解OpenGl中的坐标系统.当沿着Z轴负方向看时,可见顶点的坐标必须在这个正 ...
随机推荐
- [AHOI2005]洗牌
题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...
- [Apio2009]Atm
题目描述 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每 ...
- hdu 5885 FFT
XM Reserves Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)T ...
- 【tyvj】刷题记录(1001~1099)(64/99)
1001:排序完按照题意做即可. #include<cstdio> #include<iostream> #include<cmath> #include<a ...
- 51Nod 1555 布丁怪
题目描述: 布丁怪这一款游戏是在一个n×n 的矩形网格中进行的,里面有n个网格有布丁怪,其它的一些格子有一些其它的游戏对象.游戏的过程中是要在网格中移动这些怪物.如果两个怪物碰到了一起,那么他们就会变 ...
- Windows下使用notepad++对文本进行行列转换
行转列: Ctrl + F 选择替换 查找目标:填写指定的内容 替换为:\r\n 查找模式:正则表达式 单击替换或全部替换按钮 列转行: Ctrl + F 选择替换 查找目标:\r\n 替换为:不 ...
- C语言程序设计第四次作业-选择结构
(一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...
- 腾讯云H5语音通信QoE优化
本文首发在云+社区,未经许可,不得转载. 云+导语:4月21日,腾讯云+社区在京举办"'音'你而来,'视'而可见--音视频技术开发实战沙龙",腾讯音视频实验室高级工程师张轲围绕网络 ...
- 一口一口吃掉Hibernate(七)——继承映射
前几篇博文中讲到了常用的几种关联映射.其实hibernate中还有一种"省劲儿"的映射,那就是--"继承映射". 学了这么多的关系映射了,继承映射,从字面上也能 ...
- windows下cmd中命令操作
windows下cmd中命令: cls清空 上下箭头进行命令历史命令切换 ------------------------------------------------------------- ...