天宫鹤

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

// 打开图片文件
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.");
}
}
}

 

posted on 2023-01-09 09:18  GoGrid  阅读(297)  评论(0编辑  收藏  举报

导航