#include "vmerge.h" #include "ui_vmerge.h" #include "qtoolbar.h" #include "QVBoxLayout" #include "QDir" #include "QFileDialog" #include "QDebug" #include #include #include #include #include VMerge::VMerge(QWidget *parent) : QWidget(parent), ui(new Ui::VMerge) { ui->setupUi(this); //使用UI设计的Actions设计工具栏 QToolBar* locToolBar = new QToolBar(tr("图片"),this); //创建工具栏 locToolBar->addAction(ui->saveAction); connect (ui->saveAction,SIGNAL(triggered(bool)),this,SLOT(imageSave())); locToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); QVBoxLayout *Layout = new QVBoxLayout();//图片合成主界面垂直布局 Layout->addWidget(locToolBar); //设置工具栏和编辑器上下布局 label1=new QLabel(); label1->setStyleSheet("border:1px solid red;"); label1->installEventFilter(this);//安装事件过滤器 label2=new QLabel(); label2->setStyleSheet("border:1px solid red;"); label2->installEventFilter(this);//安装事件过滤器 Layout->addWidget(label1); Layout->addWidget(label2); this->setLayout(Layout); //设置布局 } void VMerge::imageSave(){ QString filename1 = QFileDialog::getSaveFileName(this,tr("Save Image"),"",tr("Images (*.jpg)")); //选择路径 QVector vector1; QImage q1=label1->pixmap()->toImage(); vector1.append(label1->pixmap()->scaled(1083, 1378, Qt::KeepAspectRatio, Qt::SmoothTransformation).toImage()); vector1.append(label2->pixmap()->scaled(1083, 1378, Qt::KeepAspectRatio, Qt::SmoothTransformation).toImage()); QImage q= MergeImageV(vector1,filename1); } VMerge::~VMerge() { delete ui; } bool VMerge::eventFilter(QObject *obj, QEvent *event) { if (obj == label1)//指定某个QLabel { if (event->type() == QEvent::MouseButtonPress)//mouse button pressed { QMouseEvent *mouseEvent = static_cast(event); if(mouseEvent->button() == Qt::LeftButton) { QString curPath=QDir::currentPath();//获取系统当前目录 //获取应用程序的路径 QString dlgTitle="选择一个文件"; //对话框标题 QString filter="图片文件(*.jpg *.jpeg *.gif *.png)"; //文件过滤器 QString LocalFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter); QImage Image; Image.load(LocalFileName); double dpiX = QApplication::desktop()->physicalDpiX(); double dpiY = QApplication::desktop()->physicalDpiY(); int physicalX=(int)(dpiX*5.5/2.54+0.5f); int physicalY=(int)(dpiY*7/2.54+0.5f); QPixmap pixmap = QPixmap::fromImage(Image); QPixmap fitpixmap = pixmap.scaled(physicalX, physicalY, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 饱满填充 // label1->setScaledContents(true); label1->setAlignment(Qt::AlignCenter); label1->setPixmap(fitpixmap); // qDebug() << pixmap.width()<setPixmap(fitpixmap); return true; } else { return false; } } else { return false; } } if (obj == label2)//指定某个QLabel { if (event->type() == QEvent::MouseButtonPress)//mouse button pressed { QMouseEvent *mouseEvent = static_cast(event); if(mouseEvent->button() == Qt::LeftButton) { QString curPath=QDir::currentPath();//获取系统当前目录 //获取应用程序的路径 QString dlgTitle="选择一个文件"; //对话框标题 QString filter="图片文件(*.jpg *.jpeg *.gif *.png)"; //文件过滤器 QString LocalFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter); QImage Image; Image.load(LocalFileName); double dpiX = QApplication::desktop()->physicalDpiX(); double dpiY = QApplication::desktop()->physicalDpiY(); int physicalX=(int)(dpiX*5.5/2.54+0.5f); int physicalY=(int)(dpiY*7/2.54+0.5f); QPixmap pixmap = QPixmap::fromImage(Image); QPixmap fitpixmap = pixmap.scaled(physicalX, physicalY, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 饱满填充 // label1->setScaledContents(true); label2->setAlignment(Qt::AlignCenter); label2->setPixmap(fitpixmap); update(); // qDebug() << pixmap.width()<setPixmap(fitpixmap); return true; } else { return false; } } else { return false; } } } QImage VMerge::MergeImageV(QVectorimage, QString filename){ int max_width = 0; int image_height=0; QVector ::iterator it; for(it = image.begin();it!=image.end();++it) { int height = (*it).height(); image_height += height; if((*it).width() > max_width) { max_width =(*it).width(); } } QImage result_image_v(max_width,image_height+100,QImage::Format_RGB32); result_image_v.fill(Qt::white); QPainter painter_v; painter_v.begin(&result_image_v); int y_number=0; for(it = image.begin();it!=image.end();++it) { qDebug()<