C++ 质量保证申请声明“;修改“;程序结果

C++ 质量保证申请声明“;修改“;程序结果,c++,qt,cimg,C++,Qt,Cimg,我目前正在使用Qt编程,我有一个不明白的问题。我不确定这是由Qt引起的 我有以下代码: cimg_library::CImg<float> img = model->convert("photo.jpg", 15); model->save(img, "resIhm.jpg"); cimgu库::cimgimg=model->convert(“photo.jpg”,15); 模型->保存(img,“resim.jpg”); 这很好,但是当我引入一些QT代码(这里是QA

我目前正在使用Qt编程,我有一个不明白的问题。我不确定这是由Qt引起的

我有以下代码:

cimg_library::CImg<float> img = model->convert("photo.jpg", 15);
model->save(img, "resIhm.jpg");
cimgu库::cimgimg=model->convert(“photo.jpg”,15);
模型->保存(img,“resim.jpg”);
这很好,但是当我引入一些QT代码(这里是QApplication对象的声明)时,“convert”方法会有不同的结果

QApplication *app = new QApplication(argc,argv);    
cimg_library::CImg<float> img = model->convert("photo.jpg", 15);
model->save(img, "resIhm.jpg");
QApplication*app=新的QApplication(argc,argv);
cimg_库::cimg img=model->convert(“photo.jpg”,15);
模型->保存(img,“resim.jpg”);
但如果我这样做:

cimg_library::CImg<float> img = model->convert("photo.jpg", 15);
model->save(img, "resIhm.jpg");
QApplication *app = new QApplication(argc,argv); 
cimgu库::cimgimg=model->convert(“photo.jpg”,15);
模型->保存(img,“resim.jpg”);
QApplication*app=新的QApplication(argc,argv);
它又起作用了。事实上,这两行代码通常在Qt插槽中执行,因此我必须在之前声明QApplication对象

我确信如果没有QApplication声明,它是可以工作的。这段代码在我的主函数中,用于调试

此外,当我使用QCoreApplication时,它也可以工作。Qt是否修改C++流? 谢谢你的帮助:)

ps:我的模型课不使用Qt

编辑:使用模型功能(目的是将图像转换为ASCII艺术):

CImg模型::convert(const char*source,int tailecharacters)const throw(ConversionException){
试一试{
CImg图像(源);
图像归一化(0,50);
int nbRef=95;
CImgList参考代码(nbRef,尾字符,尾字符,1,3);
浮动白色[3]={255255};
浮动黑[3]={0,0,0};
int i=0;

对于(char l='';lIn它以什么方式“不工作”/“有不同的结果”?指针
模型中有什么?如何初始化它?模型对应于我的核心函数(如MVC系统),它是用:model*model=new model();(它是我自己的类,不使用Qt)这个程序将一个图像转换成另一个图像,并且使用QApplication声明,图像结果是不同的。那么到底有什么区别呢?结果是错误的,生成的图像是不同的。但是我不确定我是否发现了好的问题。我想我使用Cimg是错误的,而不是Qt。在受保护的环境中(与valgrind一起)它一直在工作。因此我认为我有一个分配问题,我在这里描述的问题只是说明了这一点,因为内存使用不好。
CImg<float> Model::convert(const char* source, int tailleCaracteres) const throw (ConversionException) {
try {
  CImg<float> image(source);

  image.normalize(0,50);
  int nbRef = 95;
  CImgList<float> refCode(nbRef, tailleCaracteres, tailleCaracteres, 1, 3);

  float white[3] = {255,255,255};
  float black[3] = {0,0,0};

  int i = 0;
  for (char l=' '; l<='~'; l++) {
    if(l == '%') {
  char ch[3] = "";
  ch[0] = '%';
  ch[1] = l;
  ch[2] = '\0';
  refCode(i).draw_text(0, 0, ch, white, black, 1, tailleCaracteres);
    } else {
  char ch[2] = "";
  ch[0] = l;
  ch[1] = '\0';
  refCode(i).draw_text(0, 0, ch, white, black, 1, tailleCaracteres);
    }
    i++;
  }
  CImg<float> imgDest;
  CImgList<float> cols = image.get_split('y', -tailleCaracteres);

  for(unsigned int i=0; i<cols.size(); i++) {
    CImgList<float> rows = cols(i).get_split('x', -tailleCaracteres);
    CImg<float> destRows;

    for(unsigned int j=0; j<rows.size(); j++) {
      int indice = recupImgProcheErreur(rows(j), refCode);
  destRows.append(refCode(indice), 'x');
}
    imgDest.append(destRows, 'y');
  }
  return  imgDest;
}
catch (CImgIOException exp) {
  throw ConversionException(std::string(exp.what())); 
}
}


int Modele::calculErreur(CImg<float> img, CImg<float> car) const {
  int erreur = 0;
  cimg_forX(img, i) {
    cimg_forY(img, j) {
        erreur += img(i,j,0,0) - car.atXY(i,j);
    }
  }
  return erreur;
}


void Modele::save(CImg<float> img, const char* pathDestination) const {
  img.save(pathDestination);
}