日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览

發布時間:2024/9/27 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


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秒內,移動到200200這個位置 ??? 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绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。