为什么我的应用程序在多次调用函数时关闭?

问题描述 投票:0回答:0

我有以下代码:

在这个按钮中,我在 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!!";

  });

我曾尝试将其放在不同的线程中,以便进程与应用程序线程分开,但结果更糟,因此,我还尝试放置一个等待图标来通知用户正在完成工作,但我也没有成功,所以你能给我的任何建议都会受到欢迎。

c++ qt qthread qprocess qtwidgets
© www.soinside.com 2019 - 2024. All rights reserved.