#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>
#include <QFileDialog>
#include <QNetworkAccessManager>
#include <QHttpMultiPart>
#include <QNetworkRequest>
#include <QVariant>
#include <QJsonDocument>
#include <QJsonObject>
#include <QPainter>
#include <QPen>
#include <QAction>
#include <typeinfo>
#include <QPainter>
#include <QMessageBox>
#include <filesystem>
#include <type_traits>
#include <QList>
#include <QMap>
#include "imageuploader.h"
#include <iostream>
namespace fs = std::filesystem;
#define PREDICT_SERVER "https://potato.lzfblog.cn:8080/predict"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->toolButton_open->installEventFilter(this);
ui->toolButton_folder->installEventFilter(this);
ui->toolButton_next->installEventFilter(this);
ui->toolButton_pre->installEventFilter(this);
ui->toolButton_save->installEventFilter(this);
ui->image->setScaledContents(true);
ui->pushButton_predict->installEventFilter(this);
#if 0
auto uploader1 = new ImageUploader(this);
auto path = QString("/Users/luckyfang/Downloads/testing/Healthy_25.jpg");
uploader1 ->upload(path);
connect(uploader1,&ImageUploader::uploadFinished,this,[](auto a,auto b){
qDebug()<<a;
});
#endif
uploader = new ImageUploader(this);
connect(uploader,&ImageUploader::uploadFinished,this,&MainWindow::finishUpload);
fileList =new QStringList();
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
#if 0
if(obj==ui->label && event->type() == QEvent::MouseButtonPress){
auto mouseEvent = static_cast<QMouseEvent*>(event);
if(mouseEvent->button()==Qt::LeftButton){
this->fileName = QFileDialog::getOpenFileName(this,"选择图片","ImageFiles(*.jpg *.png)");
ui->label->setPixmap(QPixmap(fileName));
ui->label->setScaledContents(true);
}
}
#endif
// offset(3,3)
if(obj->inherits("QToolButton")){
auto object = qobject_cast<QToolButton*>(obj);
auto rect = object->geometry();
if(event->type()==QEvent::Enter){
object->setGeometry(rect.x()+3,rect.y()+3,rect.width(),rect.height());
}
if(event->type()==QEvent::Leave){
object->setGeometry(rect.x()-3,rect.y()-3,rect.width(),rect.height());
}
}
if(obj->inherits("QPushButton")){
auto object = qobject_cast<QPushButton*>(obj);
auto rect = object->geometry();
if(event->type()== QMouseEvent::MouseButtonPress){
object->setGeometry(rect.x()+2,rect.y()+2,rect.width(),rect.height());
}
if(event->type()==QMouseEvent::MouseButtonRelease){
object->setGeometry(rect.x()-2,rect.y()-2,rect.width(),rect.height());
}
}
return false;
}
MainWindow::~MainWindow()
{
delete ui;
}
// 切换当前显示图片
void MainWindow::setCurrentIndex(const int idx)
{
currentIndex = idx;
auto filePath = fileList->at(idx);
ui->current_step->setText(QString("%1/%2").arg(idx+1).arg(fileList->size()));
ui->label_filepath->setText(filePath);
ui->image->setPixmap(QPixmap(filePath));
ui->image->setResult(Result{});
update();
}
// 结果预测
void MainWindow::predict(QString filePath)
{
uploader->upload(filePath);
}
void MainWindow::finishUpload(QString,Result result)
{
ui->image->setResult(result);
ui->label_result->setText(result.getType()+","+result.getConf());
ui->pushButton_predict->setDisabled(false);
}
// 打开单个文件
void MainWindow::on_toolButton_open_clicked()
{
auto fileName = QFileDialog::getOpenFileName(this,"选择图片",".",tr("Image Files(*.png *.jpg *.jpeg)"));
if(fileName.length()==0){
return;
}
fileList->clear();
fileList->append(fileName);
setCurrentIndex(0);
QMessageBox::information(this,"提示",QString("加载完成,共%1个文件!").arg(fileList->size()));
}
// 打开文件夹
void MainWindow::on_toolButton_folder_clicked()
{
QString directory = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(this,"选择一个文件夹",QDir::currentPath()));
if(directory.length()==0){
return;
}
auto dir = QDir(directory);
fileList->clear();
// for (auto const &p : fs::directory_iterator(directory.toStdString())){
// std::cout<<p.path().string()<<std::endl;
// if(p.path().has_relative_path()){
// auto path = QString::fromLocal8Bit(p.path().c_str());
// qDebug()<<path;
// if(path.indexOf(".jpg")==-1){
// continue;
// }
// fileList->append(path);
// }
// }
auto fileInfoList = dir.entryInfoList(QDir::Files);
foreach(auto fileInfo,fileInfoList){
if(fileInfo.isDir()){
continue;
}
if(!(fileInfo.fileName().indexOf(".jpg"))){
continue;
}
if(!(fileInfo.fileName().indexOf(".png"))){
continue;
}
if(!(fileInfo.fileName().indexOf(".jpeg"))){
continue;
}
fileList->append(fileInfo.absoluteFilePath());
}
setCurrentIndex(0);
QMessageBox::information(this,"提示",QString("加载完成,共%1个文件!").arg(fileList->size()));
}
// 下一张图片
void MainWindow::on_toolButton_next_clicked()
{
if(currentIndex+1>=this->fileList->size()){
QMessageBox::information(this,"提示","已是最后一张图片!");
return;
}
this->setCurrentIndex(currentIndex+1);
}
// 上一张图片
void MainWindow::on_toolButton_pre_clicked()
{
if(currentIndex-1<0){
QMessageBox::information(this,"提示","已是第一张图片!");
return;
}
this->setCurrentIndex(currentIndex-1);
}
// 保存图片
void MainWindow::on_toolButton_save_clicked()
{
ui->image->pixmap().save("./temp.png");
QMessageBox::information(this,"提示","保存图片成功!");
// 根据平台调用不同的打开方式
#ifdef Q_OS_WIN
system(QString("start %1").arg(QApplication::applicationDirPath()).toStdString().c_str());
#endif
#ifdef Q_OS_MAC
system(QString("open %1").arg(QApplication::applicationDirPath()).toStdString().c_str());
#endif
}
void MainWindow::on_pushButton_predict_clicked()
{
if((currentIndex==0&&fileList->length()==0)||currentIndex<0||currentIndex>=fileList->length())
return;
ui->pushButton_predict->setDisabled(true);
auto path = fileList->at(currentIndex);
predict(path);
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++和QT开发的马铃薯病变叶片识别源码(桌面客户端)比赛项目.zip
共22个文件
png:6个
cpp:5个
h:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 112 浏览量
2023-04-23
19:07:57
上传
评论
收藏 235KB ZIP 举报
温馨提示
基于C++和QT开发的马铃薯病变叶片识别源码(桌面客户端)比赛项目.zip 【项目说明】 本项目为全国大学生程序设计大赛参赛作品 《基于深度学习马铃薯病变叶片识别》 PC 客户端 技术栈 Qt6.x c++17 本项目为全国大学生程序设计大赛参赛作品 《基于深度学习马铃薯病变叶片识别》 PC 客户端 技术栈 Qt6.x c++17 本项目为全国大学生程序设计大赛参赛作品 《基于深度学习马铃薯病变叶片识别》 PC 客户端 技术栈 Qt6.x c++17
资源推荐
资源详情
资源评论
收起资源包目录
基于C++和QT开发的马铃薯病变叶片识别源码(桌面客户端)毕设项目.zip (22个子文件)
src
torch_leaf.pro.user.7010f03 32KB
mainwindow.h 1013B
result.cpp 875B
torch_leaf.pro.user.39403c3 19KB
mainwindow.cpp 7KB
main.cpp 172B
mainwindow.ui 12KB
imageuploader.h 497B
result.h 1KB
imageview.h 435B
res.qrc 243B
imageview.cpp 3KB
torch_leaf.pro.user 32KB
imageuploader.cpp 2KB
torch_leaf.pro 781B
说明文档.md 205B
images
folder.png 902B
pre.png 1KB
file.png 413B
next.png 1KB
save.png 686B
demo.png 213KB
共 22 条
- 1
资源评论
onnx
- 粉丝: 9444
- 资源: 5594
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#基于WPF的绘图工具.zip,可以保存,打开文件,导入图片,擦除,类似于画板,有exe导出文件(双击即可使用)和源码
- docker安装应用(完整版)PDF
- 在UOS服务器系统上部署Oracle 19c的方法
- Docker Desktop Installer (4.35.1-Windows-ARM64).zip
- 基于混沌系统和DNA编码运算的图像分块加密算法matlab代码
- 开源的证件照微信小程序源码带流量主
- html 通过 threed 预览3d 文件,通过HBuilderX 工具加载即用
- DNA-混沌-混沌图像加密-混沌图像加密-matlabn系统源码.zip
- 1 多语言支持 13e5fe4604d5805c811bc6305098f671
- 精选微信小程序源码:律师帮法律咨询小程序(含源码+源码导入视频教程&文档教程,亲测可用)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功