QT 中可以加载显示多张图片,如果同时显示多张图片,并且显示图片重叠的效果,就要使用CompositionMode了。
注意:设置模式只能设置图片!
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QImage;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void paintEvent(QPaintEvent *event)override;
private:
Ui::MainWindow *ui;
QImage* firstImage=nullptr;
QImage* secondImage=nullptr;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPainter>
#include <QImage>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow){
ui->setupUi(this);
firstImage = new QImage(500,500,QImage::Format_ARGB32_Premultiplied);
secondImage = new QImage(500,500,QImage::Format_ARGB32_Premultiplied);
}
MainWindow::~MainWindow(){
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *event){
//绘制第一张图片
QPainter painterFirst(firstImage);
firstImage->fill(Qt::transparent);//设置透明
painterFirst.setBrush(Qt::red);
painterFirst.drawRect(50,50,100,100);
//绘制第二张图片
QPainter painterSecond(secondImage);
secondImage->fill(Qt::transparent);
painterSecond.setBrush(Qt::blue);
painterSecond.drawRect(100,100,100,100);
//设置图片的重叠模式
painterFirst.setCompositionMode(QPainter::CompositionMode_SourceOver);
//重叠图片
painterFirst.drawImage(0, 0, *secondImage);
//展示图片
QPainter painter2(this);
painter2.drawImage(0,0,*firstImage);
}
以下是几种重叠模式效果图:
CompositionMode_Source
CompositionMode_Destination
CompositionMode_SourceOver
CompositionMode_DestinationOver
CompositionMode_SourceIn
CompositionMode_DestinationIn
CompositionMode_Plus
aaa