首页 > 编程语言 >Qt应用程序图片文件相关操作(打开、显示、前一张、下一张、另存为)

Qt应用程序图片文件相关操作(打开、显示、前一张、下一张、另存为)

时间:2023-01-09 09:34:52浏览次数:46  
标签:一张 Qt idx 另存为 image QStringList fileNames current dialog

// 打开图片文件
void MainWindow::openImage()
{
QFileDialog dialog(this);
dialog.setWindowTitle("Open Image");
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setNameFilter(tr("Images (*.png *.bmp *.jpg)"));
//QStringList filePaths;
if (dialog.exec()) {
QStringList filePaths = dialog.selectedFiles();
showImage(filePaths.at(0));
}
}

// 显示图片文件
void MainWindow::showImage(QString path)
{
imageScene->clear();
//imageView->resetMatrix();
imageView->resetTransform();
QPixmap image(path);
currentImage = imageScene->addPixmap(image);
imageScene->update();
imageView->setSceneRect(image.rect());
QString status = QString("%1, %2x%3, %4 Bytes").arg(path).arg(image.width())
.arg(image.height()).arg(QFile(path).size());
mainStatusLabel->setText(status);
currentImagePath = path;
}

// 定位前一张图片
void MainWindow::prevImage()
{
QFileInfo current(currentImagePath);
QDir dir = current.absoluteDir();
QStringList nameFilters;
nameFilters << "*.png" << "*.bmp" << "*.jpg";
QStringList fileNames = dir.entryList(nameFilters, QDir::Files, QDir::Name);
//int idx = fileNames.indexOf(QRegExp(QRegExp::escape(current.fileName())));
int idx = fileNames.indexOf(current.fileName());
if(idx > 0) {
showImage(dir.absoluteFilePath(fileNames.at(idx - 1)));
} else {
QMessageBox::information(this, "Information", "Current image is the first one.");
}
}

// 定位下一张图片
void MainWindow::nextImage()
{
QFileInfo current(currentImagePath);
QDir dir = current.absoluteDir();
QStringList nameFilters;
nameFilters << "*.png" << "*.bmp" << "*.jpg";
QStringList fileNames = dir.entryList(nameFilters, QDir::Files, QDir::Name);
//int idx = fileNames.indexOf(QRegExp(QRegExp::escape(current.fileName())));
int idx = fileNames.indexOf(current.fileName());
if(idx < fileNames.size() - 1) {
showImage(dir.absoluteFilePath(fileNames.at(idx + 1)));
} else {
QMessageBox::information(this, "Information", "Current image is the last one.");
}
}

// 图片文件另存为
void MainWindow::saveAs()
{
if (currentImage == nullptr) {
QMessageBox::information(this, "Information", "Noting to save.");
return;
}
QFileDialog dialog(this);
dialog.setWindowTitle("Save Image As ...");
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setNameFilter(tr("Images (*.png *.bmp *.jpg)"));
QStringList fileNames;
if (dialog.exec()) {
fileNames = dialog.selectedFiles();
if(QRegExp(".+\\.(png|bmp|jpg)").exactMatch(fileNames.at(0))) {
currentImage->pixmap().save(fileNames.at(0));
} else {
QMessageBox::information(this, "Information", "Save error: bad format or filename.");
}
}
}

 

标签:一张,Qt,idx,另存为,image,QStringList,fileNames,current,dialog
From: https://www.cnblogs.com/zdt168/p/17036011.html

相关文章

  • Qt获取内存信息
    原文地址:https://blog.csdn.net/Joker__123/article/details/125064795intMB=1024*1024;MEMORYSTATUSEXmemoryStateEx;memoryStateEx.dwLength......
  • 第一张竖版思维导图:如何做到独立思考
    在跑友群,群主分享了一张竖版卡片图这是我自己一直想尝试做的图,之前不知道在哪个地方看到过类似的图,当时觉得非常惊艳,只是自己不知道怎么做。昨天知道可以用xmind来制作......
  • OpenHarmony开发06 —— 配置EMQX与MQTTX
    OpenHarmony开发06——配置EMQX与MQTTX安装与启动在网站下载EMQX——Windows版解压后,命令行进入解压路径里的bin,启动EMQX./bin/emqxstart浏览器打开http:......
  • QTdouble转QString(各种类型转换)
     每次写代码的时候总是要重新回想用哪个函数(代码写得太少了),今天要总结一下double转QString用下面这个函数   第二个参数charformat默认是gformat 可以传的......
  • QT线程间发送结构体
     QT的信号和槽机制能十分方便的用来传输数据,但是如果数据种类比较多,分类比较多的时候,就需要更好地更高效的来传递数据的方法。以结构体作为参数是个很不错的选择。这几天......
  • Qt-Qt之颜色对照表
    css颜色代码对照FFFFFF#DDDDDD#AAAAAAFFFFFF#DDDDDD#AAAAAA#888888#666666#444444#000000#FFB7DD#FF88C2#FF44AA#FF0088#C10066#A20055#8C0044#F......
  • Qt的内置图标
    enumQStyle::StandardPixmapThisenumdescribestheavailablestandardpixmaps.AstandardpixmapisapixmapthatcanfollowsomeexistingGUIstyleorguidelin......
  • Qt浅谈之一:内存泄露(总结)(转)
    一、简介Qt内存管理机制:Qt在内部能够维护对象的层次结构。对于可视元素,这种层次结构就是子组件与父组件的关系;对于非可视元素,则是一个对象与另一个对象的从属关系......
  • QT技巧 - QT中如何确定new对象是否要释放(转)
    ##1.前言我们都知道C++中的new和delete是需要成对存在的,否则会导致内存泄漏。但是,在QT中,有的时候我们new出来的对象,并不需要delete也会释放掉。那么,究竟什么时候需要手动......
  • 简单测试qt通过odbc方式连接mysql8数据库
    下载数据库mysql8.0.27,SQLyog,mysql-connector-odbc强烈推荐从镜像下载mysql-connector-odbc-8.0.27-winx64.msi​​​https://mirrors.tuna.tsinghua.edu.cn/mysql/do......