Seite 1 von 1

[geloest]_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

Verfasst: 27. April 2007 19:12
von Karldin Shinowa
Ich bekomme bei einem Programm nachdem ich es schleiße ein en Assertion Error:
...\Debug\MyLegoViewer.exe
File:dbgdel.cpp
Line:52
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

Nach googlen hab ich herausgefunden dass dieser Fehler kommt wenn ich ein objekt 2 mal deleten will. allerdings find ich nix in meinem code:

Code: Alles auswählen

//MyLegoViewer.h
#ifndef MYLEGOVIEWER_H
#define MYLEGOVIEWER_H

#include<QWidget>
#include<QLabel>
#include<QPixmap>
#include<QImage>
#include<QVBoxLayout>
#include<QGridLayout>
#include<QString>
#include<QPushButton>

class vector;

class MyLegoViewer: public QWidget
{
   Q_OBJECT

   public:
      MyLegoViewer(QWidget* parent=0);
      ~MyLegoViewer();
       
   private:
      QLabel imageholder;
      QImage image;

      std::vector<QString> filenames;
      int counter;

      QPushButton back;
      QPushButton forward;

      QGridLayout gridLayout;
      QVBoxLayout boxLayout;

   public slots:
      void sBack();
      void sForward();
     
};
#endif

Code: Alles auswählen

//MyLegoViewer.cpp
#include"MyLegoViewer.h"
#include<vector>

MyLegoViewer::MyLegoViewer(QWidget* parent)
:QWidget(parent)
{
   back.setText("<<");
   forward.setText(">>");
   filenames.push_back("lego.bmp");
   filenames.push_back("lego2.bmp");
   
   counter=0;

   image.load(filenames[0]);
   imageholder.setPixmap(QPixmap::fromImage(image));

   connect(&forward,SIGNAL(clicked()),this,SLOT(sForward()));
   connect(&back,SIGNAL(clicked()),this,SLOT(sBack()));

   gridLayout.addWidget(&back,0,0);
   gridLayout.addWidget(&forward,0,1);

   boxLayout.addWidget(&imageholder);
   boxLayout.addLayout(&gridLayout);

   setLayout(&boxLayout);
}

MyLegoViewer::~MyLegoViewer()
{}

void MyLegoViewer::sForward()
{
   if(counter+1==filenames.size()) return;
   else
   {
      image.load(filenames[++counter]);
      imageholder.setPixmap(QPixmap::fromImage(image));
   }
}

void MyLegoViewer::sBack()
{
   if((counter-1)==-1) return;
   else
   {
      image.load(filenames[--counter]);
      imageholder.setPixmap(QPixmap::fromImage(image));
   }
}

Code: Alles auswählen

//main.cpp
#include <QApplication>
#include"MyLegoViewer.h"

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
        
   MyLegoViewer window;
   window.show();
        
   return app.exec();
 }
Könnt ihr mir helfen? Es sicher wieder irgendein doofer fehler aber ich find nix....

Mfg Karldin

Verfasst: 27. April 2007 20:19
von upsala
Zwei Probleme: Was sind Referenzen und warum lege ich Ableitungen von QObject nicht auf dem Stack ab Doku

Verfasst: 27. April 2007 20:39
von Christian81
und warum das umständliche Konvertieren zwischen QImage und QPixmap?

Verfasst: 27. April 2007 20:48
von Karldin Shinowa
Dh. Meine Stackobjekte werden in diesem Fall schon vom Parent Objekt zerstört und dann durch normale Zerstörung versucht nochmal zu zerstören. Das heißt ich sollte alle QObjekt Erber dynamisch erzeugen? Und brauche sice dann aber nicht mehr im Destruktor zu zerstören da das schon übernommen wird?

Verfasst: 27. April 2007 20:49
von Christian81
Richtig. Und die QImage member var ist auch total überflüssig

Verfasst: 27. April 2007 20:55
von Karldin Shinowa
Wie sollte ich es sonst eleganter lösen wenn ich ein Image in ein QLabel laden will?

Verfasst: 27. April 2007 20:58
von upsala
QPixmap hat auch eine load-Funktion...

Verfasst: 27. April 2007 21:28
von Christian81
upsala hat geschrieben:QPixmap hat auch eine load-Funktion...
Ach man du doofer Spielverderber! ;)