我有以下代码:
在这个按钮中,我在 QListWidget 中加载图像文件列表
QObject::connect(ui->pushButton_4, &QPushButton::clicked, this, [&](){
auto folderPath = QFileDialog::getExistingDirectory(this, "Seleccione una carpeta:", QDir::rootPath());
if(folderPath.isEmpty())
return;
QDir folder{folderPath};
// QStringList filters = {"*.jpg","*.png","*.bmp"};
auto files = folder.entryList(QStringList{"*.jpg","*.png","*.bmp"}, QDir::Files);
// qInfo() << files << '\n';
for(const auto& file: files){
ui->listWidget->addItem(folder.absoluteFilePath(file));
}
});
获取 QString 中文件的日期和时间的函数:
QString Widget::getImageDateAndTime(QStringView file) const noexcept{
QString fileName{file.toString()};
QFileInfo fInfo{fileName};
auto dateTime = fInfo.metadataChangeTime().toString("dd/MM/yyyy h:m:ss AP");
return dateTime;
}
在图像上绘制带有日期和时间的文本的功能:
bool Widget::paintInfoToImage(QStringView fileName, const QString& toSave)const noexcept
{
QImage newImage{fileName.toString()};
auto dateTime = getImageDateAndTime(fileName.toString());
if(newImage.isNull()){
qInfo() << "Error!!";
return false;
}
QPainter painter{&newImage};
// painter.setOpacity(0.5);
painter.setPen(Qt::white);
painter.setBrush(Qt::SolidPattern);
auto fontSize = (12* newImage.height())/700;
painter.setFont(QFont("Arial", fontSize));
painter.drawText(newImage.rect(), Qt::AlignBottom | Qt::AlignRight, dateTime);
painter.end();
return newImage.save(toSave);
}
我调用该函数的按钮,用于在我的 QListWidget 控件中列出的每个图像上绘制日期和时间。这就是问题所在,它很好地完成了它的工作,但是当进程结束时,应用程序崩溃了,我的问题是;为什么会发生这种情况,任何建议将不胜感激,谢谢!!
QObject::connect(ui->pushButton_3, &QPushButton::clicked, this, [&](){
auto rowCount = ui->listWidget->count();
for(auto row=0; row<= rowCount; ++row){
auto file = ui->listWidget->item(row)->data(Qt::DisplayRole).toString();
paintInfoToImage(file, tr("D:/newimages%1").arg(file.mid(file.lastIndexOf("/"))));
}
qInfo()<<"Echo!!";
});
我曾尝试将其放在不同的线程中,以便进程与应用程序线程分开,但结果更糟,因此,我还尝试放置一个等待图标来通知用户正在完成工作,但我也没有成功,所以你能给我的任何建议都会受到欢迎。