[geloest]_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

Alles rund um die Programmierung mit Qt
Antworten
Karldin Shinowa
Beiträge: 30
Registriert: 3. Mai 2006 18:12

[geloest]_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

Beitrag 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
Zuletzt geändert von Karldin Shinowa am 29. April 2007 16:40, insgesamt 1-mal geändert.
Wer früher stirbt ist länger tot
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Zwei Probleme: Was sind Referenzen und warum lege ich Ableitungen von QObject nicht auf dem Stack ab Doku
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

und warum das umständliche Konvertieren zwischen QImage und QPixmap?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Karldin Shinowa
Beiträge: 30
Registriert: 3. Mai 2006 18:12

Beitrag 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?
Wer früher stirbt ist länger tot
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Richtig. Und die QImage member var ist auch total überflüssig
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Karldin Shinowa
Beiträge: 30
Registriert: 3. Mai 2006 18:12

Beitrag von Karldin Shinowa »

Wie sollte ich es sonst eleganter lösen wenn ich ein Image in ein QLabel laden will?
Wer früher stirbt ist länger tot
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QPixmap hat auch eine load-Funktion...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

upsala hat geschrieben:QPixmap hat auch eine load-Funktion...
Ach man du doofer Spielverderber! ;)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten