一起看代码来玩玩QT之10 Graphics
2016-02-24 15:25
357 查看
interval :间隔
render:粉刷,渲染
pro 工程中需要 + QT += widgets gui printsupport printsupport是为了打印用,
MyWidget.h
MyWidget.cpp
render:粉刷,渲染
pro 工程中需要 + QT += widgets gui printsupport printsupport是为了打印用,
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
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 = new QGraphicsView(this); // _view->setViewport(); // _view->setBackgroundBrush(Qt::red); _view->setScene(_scene = new QGraphicsScene); _scene->addItem(lineItem = new QGraphicsLineItem(QLineF(QPointF(0, 0), QPointF(100, 100)))); _scene->addItem(textItem = new QGraphicsTextItem("Hello world")); _scene->addItem(pixmapItem = new QGraphicsPixmapItem(QPixmap("../aaa.png"))); QTransform trans; trans.rotate(30); textItem->setPos(QPointF(200, 300)); textItem->setTransform(trans); textItem->setFont(QFont("aaa", 50, 700, true)); pixmapItem->setPos(100, 100); // Animation == cocos Action QGraphicsItemAnimation* animation = new QGraphicsItemAnimation; animation->setItem(pixmapItem); QTimeLine* timeline = new QTimeLine(3000); timeline->setLoopCount(2); animation->setTimeLine(timeline); animation->setTranslationAt(1, 200, 200); // timeline->start(); #if 0 _timer = new QTimer(); _timer->setInterval(1000); connect(_timer, SIGNAL(timeout()), this, SLOT(slotTimeout())); _timer->start(); #endif QTimer::singleShot(1000, this, SLOT(slotTimeout())); //定时一次 } void MyWidget::slotTimeout() { qDebug() << "Time out"; // sender().deleteLater(); shi fang timer } 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 QPixmap pixmap(size()); //应该给一个大小,否则渲染会出问题 QPainter painter(&pixmap); painter.fillRect(QRect(0, 0, size().width(), size().height()), Qt::white); //先画一个白底; 或者 pixmap.fill(Qt::white); _view->render(&painter); //渲染 view 或者 scene 都可以 pixmap.save("../bbb.png"); #endif #if 0 // print preview QPrintPreviewDialog dlg; connect(&dlg, SIGNAL(paintRequested(QPrinter*)), this, SLOT(slotPaintRequested(QPrinter*))); dlg.exec(); #endif QPrintDialog dlg; connect(&dlg, SIGNAL(accepted(QPrinter*)), this, SLOT(slotPaintRequested(QPrinter*))); dlg.exec(); } } void MyWidget::slotPaintRequested(QPrinter *printer) { QPainter painter(printer); _scene->render(&painter); painter.drawText(QPoint(100, 100), "Fuck"); } int main(int argc, char* argv[]) { QApplication app (argc,argv); MyWidget w; w.showMaximized(); return app.exec(); }
相关文章推荐
- qt自定义搜索框(超简单,带效果图)
- mp4格式文件转码后处理(qt-faststart).md
- qt5-qmake
- PyCharm+QT Designer整合
- Qt构建工具QBS之一 ——从一个简单的工程开始
- 《转》PyQt之自定义无边框窗口遮盖任务栏显示问题
- Qt构建工具QBS之零 —— QBS 概览
- QT5 MSVC2013数据库SQLserver操作中文显示乱码问题
- QT Creator 两种创建项目的方法
- Qt浅谈之窗体缩放(仅增加测试代码)
- Qt上截取中英文混合字符串的指定长度内容
- 用Qt实现一个桌面弹幕程序(六)-- -- 桌面客户端实现②
- opencv + Qt5.5 + cmake(你遇到的问题,我知道)
- qt的tabwidget在button点击下,切换页面
- PyQt4入门教程(5)_事件与信号
- Qt对话框QDialog的返回值
- Ubuntu14下OpenCV3和QT5的安装及联合使用
- 一起看代码来玩玩QT之09 Signal and SLOT ( 信号和槽)
- Qt实践之2048:
- VS2010 编译64位Qt