From 4cc40c903c863cffd8a998380a0778460b6df732 Mon Sep 17 00:00:00 2001 From: Norah <30373753+ZESl@users.noreply.github.com> Date: Wed, 5 Feb 2020 10:55:39 +0800 Subject: [PATCH] =?UTF-8?q?ui=200.3=20=E6=B7=BB=E5=8A=A0=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E5=9B=BE=E5=83=8F=E7=AD=89=E5=8A=9F=E8=83=BD=20=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E8=BF=9B=E4=B8=80=E6=AD=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Classes/Reconstruction.cpp | 67 +++++++++++++++++++++++++++++++------- Classes/Reconstruction.h | 5 ++- DisplayPic.cpp | 2 +- DisplayPic.h | 2 +- UI/Reconstruction.ui | 15 ++++++++- 5 files changed, 75 insertions(+), 16 deletions(-) diff --git a/Classes/Reconstruction.cpp b/Classes/Reconstruction.cpp index 29ae4f9..482c587 100644 --- a/Classes/Reconstruction.cpp +++ b/Classes/Reconstruction.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "DisplayPic.h" Reconstruction::Reconstruction(QWidget *parent) @@ -45,16 +46,23 @@ void Reconstruction::on_pushButton_5_clicked() QMessageBox mesg; mesg.warning(this, "WARNING", "Failed to open picture"); return; + }else + { + calPath = fileName; } - - // todo 存储文件或文件路径 } // 相机拍摄 void Reconstruction::on_pushButton_6_clicked() { - // todo 相机拍摄,存储照片集 - + if(calPath.isEmpty()) + { + QMessageBox mesg; + mesg.warning(this, "WARNING", "Haven't uploaded calibration pictures!"); + }else + { + // todo 相机拍摄,存储照片集 + } // 标定日志:显示拍摄照片集存储路径 ui.textBrowser_7->append(""); } @@ -82,7 +90,7 @@ void Reconstruction::on_pushButton_8_clicked() { QFileDialog fileDialog; QString fileName = fileDialog.getSaveFileName(this, "Open File", "", "Text File(*.txt)"); // todo 更改文件类型 - if (fileName == "") + if (fileName.isEmpty()) { return; } @@ -125,10 +133,9 @@ void Reconstruction::on_pushButton_4_clicked() void Reconstruction::on_pushButton_9_clicked() { // todo 相机拍照 - QString picUrl = "Resources/image/test.png"; // 存储拍摄照片 - + picPath = "Resources/image/test.png"; // 该行仅做测试使用 DisplayPic *picDlg = new DisplayPic(); - picDlg->setPicUrl(picUrl); + picDlg->setPicPath(picPath); connect(picDlg, SIGNAL(getPicAction(QString)), this, SLOT(setPicAction(QString))); picDlg->show(); } @@ -138,11 +145,11 @@ void Reconstruction::setPicAction(QString action) if(action=="confirmed") { qDebug("confirmed"); - // todo 存储图片路径 + confirmPic = true; }else if(action=="canceled") { qDebug("canceled"); - // 用户再拍一次 无需操作 + confirmPic = false; } } @@ -150,6 +157,32 @@ void Reconstruction::setPicAction(QString action) void Reconstruction::on_pushButton_10_clicked() { // todo 保存照片 + if(confirmPic) + { + QString fileName = QFileDialog::getSaveFileName(this, + tr("save image"), + "", + tr("*.png;; *.jpg;; *.bmp;; All files(*.*)")); + + if (!fileName.isNull()) + { + QImage iim(picPath);//创建一个图片对象,存储源图片 + QPainter painter(&iim);//设置绘画设备 + QFile file(fileName);//创建一个文件对象,存储用户选择的文件 + if (!file.open(QIODevice::ReadWrite)) { + return; + } + QByteArray ba; + QBuffer buffer(&ba); + buffer.open(QIODevice::WriteOnly); + iim.save(&buffer, "JPG");//把图片以流方式写入文件缓存流中 + file.write(ba);//将流中的图片写入文件对象当中 + } + }else + { + QMessageBox mesg; + mesg.warning(this, "WARNING", "Haven't taken picture!"); + } } #pragma endregion @@ -193,13 +226,23 @@ void Reconstruction::on_pushButton_14_clicked() // 保存截图 void Reconstruction::on_pushButton_15_clicked() { - // todo 保存截图 + QString fileName = QFileDialog::getSaveFileName(this, + tr("save screen shot"), + "", + tr("*.png;; *.jpg;; *.bmp;; All files(*.*)")); + + if (!fileName.isNull()) + { + // 截图所选的控件暂时用 label_17 替代 + QPixmap pix = QPixmap::grabWidget(ui.label_17); + pix.save(fileName); + } } // 颜色选取 void Reconstruction::on_pushButton_16_clicked() { - QColor color = QColorDialog::getColor(Qt::black); + color = QColorDialog::getColor(Qt::black); if (color.isValid()){ // qDebug("x:%f, %f, %f",color.redF(), color.greenF(), color.blueF()); // todo 颜色选取框已选择颜色color,接下来对color进行处理 diff --git a/Classes/Reconstruction.h b/Classes/Reconstruction.h index 8fe59f5..500680d 100644 --- a/Classes/Reconstruction.h +++ b/Classes/Reconstruction.h @@ -12,7 +12,10 @@ public: private: Ui::ReconstructionClass ui; - + QString calPath; // 相机标定:标定图像的存储路径 + QString picPath = "Result/result.png"; // 图案投影:拍摄照片的存储路径 + bool confirmPic = false; // 图案投影:确定是否用所拍照片进行重建 + QColor color = Qt::black; // 三维重建:颜色 private slots: void on_pushButton_clicked(); diff --git a/DisplayPic.cpp b/DisplayPic.cpp index cfd8ba7..5861225 100644 --- a/DisplayPic.cpp +++ b/DisplayPic.cpp @@ -11,7 +11,7 @@ DisplayPic::~DisplayPic() { } -void DisplayPic::setPicUrl(QString pic) +void DisplayPic::setPicPath(QString pic) { picUrl = pic; if(picUrl.isEmpty()) diff --git a/DisplayPic.h b/DisplayPic.h index 1924ee1..1b8d7bf 100644 --- a/DisplayPic.h +++ b/DisplayPic.h @@ -10,7 +10,7 @@ class DisplayPic : public QWidget public: DisplayPic(QWidget *parent = Q_NULLPTR); ~DisplayPic(); - void setPicUrl(QString pic); + void setPicPath(QString pic); private: Ui::DisplayPic ui; diff --git a/UI/Reconstruction.ui b/UI/Reconstruction.ui index f9b92ab..27ad89e 100644 --- a/UI/Reconstruction.ui +++ b/UI/Reconstruction.ui @@ -37,7 +37,7 @@ - 0 + 2 @@ -902,6 +902,19 @@ 淇濆瓨鎴浘 + + + + 280 + 260 + 72 + 15 + + + + TextLabel + +