2. Fenster läd Image nicht

Verschiedenes zu Qt
Antworten
JohnR
Beiträge: 42
Registriert: 3. Dezember 2011 12:23

2. Fenster läd Image nicht

Beitrag von JohnR »

Hi

John hat mal wieder ne geistige Blockade......

Ich öffne in meiner Hauptanwendung ein 2. Fenster, abgeleitet von QDialog, dieses habe ich auf ein Kontextmenü innerhalb eines QlistWidgets connected, das Funktioniert alles wunderbar.

Das laden eines Images in ein QLabel wil mir aber einfach nicht gelingen.

hier der Code der betreffenden Funktion

Code: Alles auswählen

void PictureViewer::createwindow(QStringList globallist,int i)
{

    fileName = globallist[i];
    image.load(fileName);
    if (image.isNull())
    {
      QMessageBox::information(this, tr("Image Viewer"),
      tr("Cannot load %1.").arg(fileName));
      qDebug() << "image wont load";
    }
    pictureview.label_2->setPixmap(QPixmap::fromImage(image));
    pictureview.label->setText("test");



    qDebug() << image.depth() ;

    PictureViewer p;
    p.exec();
und die .h

Code: Alles auswählen

#ifndef PICTUREVIEWER_H
#define PICTUREVIEWER_H

#include <QDialog>
#include "ui_Pictureviewer.h"


class PictureViewer : public QDialog
{
    Q_OBJECT
public:
    explicit PictureViewer(QWidget *parent = 0);
    QImage image;
private:
    Ui::Pictureviewer pictureview;
    QString fileName;
    QStringList globallist;
    int i;
    void close();
signals:
    
public slots:
    void createwindow(QStringList globallist, int i);
    void picture();
    
    
};

#endif // PICTUREVIEWER_H

Globallist ist eine QStringlist die die Dateipfade vorhält, die int ist die row der Qlistview.

Das Bild wird auch definitiv geladen, qDebug() << image.depth() ; gibt mir 32 aus......


Wenn ich meinen Fehler mal selbst versuchen darf einzugrenzen

es liegt doch bestimmt an der Erzeugung des Fensters via .exec() bzw. an dessen "Zeitpunkt" im Ablauf das die Sache nicht will.

Kann durchaus sein das ich hier wieder eine elementare Sache nicht begriffen habe, also franzf und christian Biiiittttteeee nicht an mir verzweifeln :D
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: 2. Fenster läd Image nicht

Beitrag von brax »

In Deiner createwindow Methode erzeugst Du am Ende einen neuen PicureViewer (p) und führt diesen dann über exec() aus. Dieser neue PictureViewer hat natürlich nicht das Label gesetzt, das Du vorher an der Membervariable "pictureview" von "this" gesetzt hat.

Ich bin mir nicht 100% sicher, ob man innerhalb einer Methode von einem QDialog diesen dann über exec() ausführen kann (wobei ich nicht direkt wüßte, warum nicht), aber versuch doch einfach mal am Ende der createwindow Methode das hier:

Code: Alles auswählen

PictureViewer p;
p.exec();
durch das hier:

Code: Alles auswählen

exec();
zu ersetzen.

Schöner fände ich allerdings den Code vom Initialisieren des PictureViewers vom exec() zu trennen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: 2. Fenster läd Image nicht

Beitrag von Christian81 »

Stimmt der Pfad denn auch (Debugausgabe!) bzw. ist er evtl. relativ angegeben?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JohnR
Beiträge: 42
Registriert: 3. Dezember 2011 12:23

Re: 2. Fenster läd Image nicht

Beitrag von JohnR »

Der Pfad ist o.k. , also c:/test/blume.jpg bspw. das Bild wird ja auch geladen und ich kann per debug auch die Farbtiefe bspw. ausgeben.

was mir nicht in den Kopf will ist wenn ich pictureview.label->setText("test"); angebe, siehe cpp oben wird dies auch nicht ausgeführt O.o

es liegt demzufolge also weniger an dem image sondern ist ein generelles Problem was ich mit meinen begrenzten Wissen halt auf die p.exec(); schieben würde (soll nicht heißen es wäre ein bug sondern eher das ich hier irgendwas nicht gerafft bzw. falsch mache)....

das mit dem exec(); probier ich nachher mal aus, habe atm keine Möglichkeit es zu testen
JohnR
Beiträge: 42
Registriert: 3. Dezember 2011 12:23

Re: 2. Fenster läd Image nicht

Beitrag von JohnR »

wenn ich nur exec(); schreibe geht es einwandfrei :D

das trennen des execs vom code mache ich noch, war auch ursprünglich in 2 seperaten Funktionen, aber bei der ganzen testerei hatte ich es in eine Funktion geschmissen

Danke Brax
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: 2. Fenster läd Image nicht

Beitrag von brax »

Schön, dass es funktioniert.

Nur nochmal als Erklärung, damit Dir sowas in der Art nicht nochmal passiert:
JohnR hat geschrieben: was mir nicht in den Kopf will ist wenn ich pictureview.label->setText("test"); angebe, siehe cpp oben wird dies auch nicht ausgeführt O.o
Das liegt daran, dass Du mit zwei PictureViewer Objekten arbeitest. Einmal das, das Du in den ersten 11 Zeilen der Methode benutzt und "befüllst" (nennen wir es einfach mal "this") und dann ist da noch dieses zweite Objekt mit dem unscheinbaren Namen "p". Und dieses ist dann das Objekt was angezeit wurde, denn genau auf diesem Objekt hast Du bisher das exec() aufgerufen. Dass aber "p" nichts von dem QPixmap weiß, das Du dem label_2 von "this->pictureview" gesetzt hast ist leider so, denn "p" hat sein ganz eigenes pictureview und damit auch sein ganz eigenes label_2.
JohnR
Beiträge: 42
Registriert: 3. Dezember 2011 12:23

Re: 2. Fenster läd Image nicht

Beitrag von JohnR »

aaaah ja das macht Sinn, ist aber für einen Neuling recht schwer zu erkennen

Danke Dir vielmals!


John
Antworten