Erledigt: Fehler im Konstruktor?
Verfasst: 25. Januar 2014 20:04
Mein Konstruktor macht Probleme, das Programm stürzt ab, und ich sehe keinen Grund.
Der Code von QExifImageHeader stammt von Qt den ich (aus Git) als Quelltext vorliegen habe.
Den versuche ich etwas zu erweitern durch einen neuen Konstruktor und eine dazu passende Funktion.
Jeder Versuch meinen Konstruktor aufzurufen scheitert. Das Programm crasht.
Was aber geht ist
Kommt das durch Q_DISABLE_COPY(QExifImageHeader) ? Was genau macht denn das?
Gruß Sig
Code: Alles auswählen
class QExifImageHeader
{
Q_DISABLE_COPY(QExifImageHeader)
public:
QExifImageHeader();
explicit QExifImageHeader(const QString &fileName);
explicit QExifImageHeader(QByteArray *exifData);
~QExifImageHeader();
bool loadFromData(QByteArray *exifData);
....
}
Code: Alles auswählen
QExifImageHeader::QExifImageHeader()
: d( new QExifImageHeaderPrivate )
{
d->byteOrder = QSysInfo::ByteOrder;
d->size = -1;
}
/*!
Constructs a new EXIF image data editor and reads the meta-data from a JPEG image with the given \a fileName.
*/
QExifImageHeader::QExifImageHeader(const QString &fileName)
: d(new QExifImageHeaderPrivate)
{
d->byteOrder = QSysInfo::ByteOrder;
d->size = -1;
loadFromJpeg(fileName);
}
/*!
Constructs a new EXIF image data editor and reads the exif meta-data from a QByteArray.
*/
QExifImageHeader::QExifImageHeader(QByteArray *exifData){
d->byteOrder = QSysInfo::ByteOrder;
d->size = -1;
loadFromData(exifData);
}
/*!
Destroys an EXIF image data editor.
*/
QExifImageHeader::~QExifImageHeader()
{
clear();
delete d;
}
/*!
Reads meta-data from a EXIF or META section of an JPEG image.
Returns true if the data was successfully parsed and false otherwise.
*/
bool QExifImageHeader::loadFromData(QByteArray *exifData) {
QBuffer buffer(exifData);
readOk = buffer.open(QIODevice::ReadOnly) && read(&buffer);
return readOk;
}
Den versuche ich etwas zu erweitern durch einen neuen Konstruktor und eine dazu passende Funktion.
Code: Alles auswählen
explicit QExifImageHeader(QByteArray *exifData);
bool loadFromData(QByteArray *exifData);
Code: Alles auswählen
QByteArray data = "a.dfjkjbjknjgnbjnb"; // inhalt beliebig
QExifImageHeader *exifHeader = new QExifImageHeader(&data);
Code: Alles auswählen
QByteArray data = "gksgbkjjbkjnkajnbvk" // inhalt beliebig
QExifImageHeader exifHeader = new QExifImageHeader();
exifHeader->loadFromData(&data)
Gruß Sig