标签:style blog http io ar color os sp for
1 新建项目
A 修改pro中的内容如下:
HEADERS += \ MyWidget.h
SOURCES += \ MyWidget.cpp
QT += gui widgets printsupport |
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 = 0);
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;
//这个转换效果可以旋转30度
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);
//在1秒内,移动到200,200这个位置
animation->setTranslationAt(1, 200, 200);
//开始执行
timeline->start();
/**************上面代码是可以独立运行的****************/
//下面的方式定义一个定时器
_timer = new QTimer();
//每隔1秒钟执行一次
_timer->setInterval(1000);
//使信号和槽函数联系起来执行
connect(_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
_timer->start();
//下面的方法让定时器只执行一次
//QTimer::singleShot(1000, this, SLOT(slotTimeout()));
}
/**
* @brief MyWidget::slotTimeout 每隔1秒钟会执行下面的函数一次
*/
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.fillRect(QRect(0, 0, 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绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览
标签:style blog http io ar color os sp for
原文地址:http://blog.csdn.net/tototuzuoquan/article/details/41913621