1. 程式人生 > 其它 >Qt-QPainter實現圖片的繪圖、平移、縮放、旋轉、扭曲

Qt-QPainter實現圖片的繪圖、平移、縮放、旋轉、扭曲

相關資料:

https://download.csdn.net/download/zhujianqiangqq/85500981     csdn程式碼包下載

.pro

 1 QT       += core gui
 2 
 3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 4 
 5 CONFIG += c++11
 6 
 7 # The following define makes your compiler emit warnings if you use
 8 # any Qt feature that has been marked deprecated (the exact warnings
9 # depend on your compiler). Please consult the documentation of the 10 # deprecated API in order to know how to port your code away from it. 11 DEFINES += QT_DEPRECATED_WARNINGS 12 13 # You can also make your code fail to compile if it uses deprecated APIs. 14 # In order to do so, uncomment the following line.
15 # You can also select to disable deprecated APIs only up to a certain version of Qt. 16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 17 18 SOURCES += \ 19 main.cpp \ 20 mainwindow.cpp 21 22 HEADERS += \ 23 mainwindow.h 24 25 FORMS += \
26 mainwindow.ui 27 28 # Default rules for deployment. 29 qnx: target.path = /tmp/$${TARGET}/bin 30 else: unix:!android: target.path = /opt/$${TARGET}/bin 31 !isEmpty(target.path): INSTALLS += target 32 33 RESOURCES += \ 34 QtQPixmap.qrc
View Code

main.cpp

 1 #include "mainwindow.h"
 2 
 3 #include <QApplication>
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8     MainWindow w;
 9     w.show();
10     return a.exec();
11 }
View Code

 mainwindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QPainter>
 6 
 7 QT_BEGIN_NAMESPACE
 8 namespace Ui { class MainWindow; }
 9 QT_END_NAMESPACE
10 
11 class MainWindow : public QMainWindow
12 {
13     Q_OBJECT
14 
15 public:
16     MainWindow(QWidget *parent = nullptr);
17     ~MainWindow();
18     void paintEvent(QPaintEvent *);
19 
20 private:
21     Ui::MainWindow *ui;
22 };
23 #endif // MAINWINDOW_H
View Code

 mainwindow.cpp

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent)
 5     : QMainWindow(parent)
 6     , ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9 
10     setWindowTitle(QStringLiteral("QPainter實現圖片的繪圖、平移、縮放、旋轉、扭曲"));
11 }
12 
13 MainWindow::~MainWindow()
14 {
15     delete ui;
16 }
17 
18 void MainWindow::paintEvent(QPaintEvent *)
19 {
20     // 繪圖
21     QPainter painter(this);
22     QPixmap pix;
23     pix.load(":/new/prefix1/abc.png");
24     painter.drawPixmap(0,0,100,100,pix);
25 
26     // 利用更改座標原點實現平移
27     painter.translate(100,100); //將(100,100)設為座標原點
28     painter.drawPixmap(0,0,100,100,pix);
29     painter.translate(-100, -100); //讓圖片的中心作為旋轉的中心
30 
31     // 實現圖片的縮放
32     painter.translate(100,100); //將(100,100)設為座標原點
33     qreal width = pix.width(); //獲得以前圖片的寬和高
34     qreal height = pix.height();
35 
36     pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);
37     //將圖片的寬和高都擴大兩倍,並且在給定的矩形內保持寬高的比值
38     painter.drawPixmap(100,100,pix);
39     painter.translate(-100, -100); //讓圖片的中心作為旋轉的中心
40 
41     // 實現圖片的旋轉
42     painter.translate(500, 400); //讓圖片的中心作為旋轉的中心
43     painter.rotate(90); //順時針旋轉90度
44     painter.drawPixmap(0,0,100,100,pix);
45     painter.rotate(-90); //順時針旋轉90度
46     painter.translate(-500, -400); //讓圖片的中心作為旋轉的中心
47 
48     // 實現圖片的扭曲
49     painter.translate(500, 500); //讓圖片的中心作為旋轉的中心
50     painter.shear(0.5,0); //橫向扭曲
51     painter.drawPixmap(0,0,100,100,pix);
52     painter.translate(-500, -500); //讓圖片的中心作為旋轉的中心
53 }
View Code

 mainwindow.ui

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ui version="4.0">
 3  <class>MainWindow</class>
 4  <widget class="QMainWindow" name="MainWindow">
 5   <property name="geometry">
 6    <rect>
 7     <x>0</x>
 8     <y>0</y>
 9     <width>800</width>
10     <height>600</height>
11    </rect>
12   </property>
13   <property name="windowTitle">
14    <string>MainWindow</string>
15   </property>
16   <widget class="QWidget" name="centralwidget"/>
17   <widget class="QMenuBar" name="menubar">
18    <property name="geometry">
19     <rect>
20      <x>0</x>
21      <y>0</y>
22      <width>800</width>
23      <height>22</height>
24     </rect>
25    </property>
26   </widget>
27   <widget class="QStatusBar" name="statusbar"/>
28  </widget>
29  <resources/>
30  <connections/>
31 </ui>
View Code

搜尋

複製