[Gelöst]Qt Creator und QGraphicsView/QGraphicsScene

Alles rund um die Programmierung mit Qt
Antworten
DoktorAgony
Beiträge: 6
Registriert: 8. Oktober 2013 12:21

[Gelöst]Qt Creator und QGraphicsView/QGraphicsScene

Beitrag von DoktorAgony »

Hallo liebe Qt- Gemeinde,

erstmal danke für dieses wunderbare Forum, aber nun zur Sache:

Ich habe vor mit dem Creator auf einem Basis-Widget drei GraphicsView-Felder zu setzen, die ich jeweils mit einem Bild füllen möchte (Genauer: Vorderansicht, Seitenansicht, Draufsicht). Anschließend sollen darauf unterschiedliche Klötzchen ein- oder ausschaltbar sein, die man dann auch bewegen kann, und die sich in den anderen Ansichten ebenfalls mitbewegen sollen (z.B. die analoge Darstellung eines Motors als Klötzchen).

Soweit die Theorie, was ich da machen will. Nun hab ich mir das ganze in einzelne Teile aufgeteilt und möchte erstmal, dass ich auf einem QGraphicsView-Ansichtenfeld erstmal ein Bild aufrufen möchte. Öffnen der Bilddatei funktioniert schon mal, aber die Ansicht des Bildes eben nicht.

Ich hab das ganze Internet schon durchforstet und habe irgendwo einen Denkfehler. Zwischendurch hatte ich es schon dass plötzlich Scrollbalken angezeigt wurden, aber kein Bild.

Hier mal der Code: Falls was fehlt, bitte schreien! :shock:

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

     connect(this->ui->actionVorderansicht, SIGNAL (triggered()), this, SLOT (openVorder()));
}


void MainWindow::openVorder()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Vorderansicht Oeffnen"),QDir::currentPath(), tr("Bilddateien (*.png *.jpg *.bmp *.gif"));
    if (!fileName.isEmpty())
    {
        QImage image(fileName);
        if (image.isNull())
        {
            QMessageBox::information(this, tr("Designer"), tr("Bild kann nicht geladen werden").arg(fileName));
            return;
        }

       //Hiermit wird das Bild der Vorderansicht angezeigt
        QGraphicsScene scene_v;
        scene_v.setSceneRect(10, 30, 500, 354);
        QGraphicsPixmapItem item(QPixmap::fromImage(image));
        scene_v.addItem(&item);

        ui->graphicsView_Vorder->setScene(&scene_v);
        ui->graphicsView_Vorder->fitInView(scene_v.sceneRect(), Qt::IgnoreAspectRatio);
        ui->graphicsView_Vorder->show();

       }
}
Wie gesagt, ich kanns Kompilieren, keine Fehlermeldungen, nichts. Ich kann oben auf mein Flyout klicken und die Vorderansicht laden und ein Bild auswählen, aber nichts wird angezeigt. Hat jemand einen Rat? :o (Ich arbeite mit Qt 4.8 auf Ubuntu)
Sobald das läuft, kommen die beiden anderen Ansichten dazu und es wird in eine andere *.cpp-Datei geschrieben, für mehr Übersicht.

Danke schon mal für die Ideen und möglichen Hilfen im Vorraus.
Zuletzt geändert von DoktorAgony am 24. Oktober 2013 16:28, insgesamt 1-mal geändert.
DoktorAgony
Beiträge: 6
Registriert: 8. Oktober 2013 12:21

Re: Qt Creator und QGraphicsView/QGraphicsScene

Beitrag von DoktorAgony »

Na gut, wirds halt ein dokumentiertes Selbstgespräch. :)
Jetzt hab ich mich noch mal durch die Dokumentation gehangelt, die da lautet:

Code: Alles auswählen

 QGraphicsScene scene;
 scene.addText("Hello, world!");

 QGraphicsView view(&scene);
 view.show();
bzw.

Code: Alles auswählen

 QGraphicsScene scene;
 myPopulateScene(&scene);

 QGraphicsView view(&scene);
 view.show();
Meine Ableitung daraus für die Programmierung mit dem QtCreator lautet daher:

Code: Alles auswählen

 QGraphicsScene scene_v;
QGraphicsPixmapItem item(QPixmap::fromImage(image));
scene_v.addItem(&item);
QGraphicsView graphicsView_Vorder(&scene_v); 
ui->graphicsView_Vorder->show();
scene_v ist hierbei scene aus dem Beispiel, selbes gilt für graphicsView_vorder, das ist hier das view aus dem Beispiel.

Compilieren geht ohne Fehler, Bild wird nach Öffnen noch immer nicht angezeigt.
Ich finde den Fehler einfach nicht. :oops:
DoktorAgony
Beiträge: 6
Registriert: 8. Oktober 2013 12:21

Re: Qt Creator und QGraphicsView/QGraphicsScene

Beitrag von DoktorAgony »

Und weiter gehts im Selbstgespräch.
Immerhin ein Teilerfolg.

Code: Alles auswählen

void MainWindow::openVorder()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Vorderansicht Oeffnen"),QDir::currentPath(), tr("Bilddateien (*.png *.jpg *.bmp *.gif"));
    if (!fileName.isEmpty())
    {
        QImage image(fileName);
        if (image.isNull())
        {
            QMessageBox::information(this, tr("Designer"), tr("Bild kann nicht geladen werden").arg(fileName));
            return;
        }

       //Hiermit wird das Bild der Vorderansicht angezeigt
        QGraphicsScene *scene_v = new QGraphicsScene();
        QGraphicsView *graphicsView_Vorder = new QGraphicsView(scene_v);
        QGraphicsPixmapItem *item_v = new QGraphicsPixmapItem(QPixmap::fromImage(image));
        scene_v->addItem(item_v);
        graphicsView_Vorder->show();    
    }
}
So, das würde funktionieren, es taucht aber ein einzelnes Bild in einem neuen Fenster/Widget auf. Das soll aber nicht so sein, denn ich habe via Qt Creator ein QGraphicsView-Rahmen erzeugt, mit dem Namen "graphicsView_vorder. Und da soll das Bild auch angezeigt werden.

Setze ich aber die unterste Zeite um in

Code: Alles auswählen

 ui->graphicsView_Vorder->show();
wird nichts angezeigt.

Langsam aber stet komme ich dem Problem näher...
DoktorAgony
Beiträge: 6
Registriert: 8. Oktober 2013 12:21

Re: Qt Creator und QGraphicsView/QGraphicsScene

Beitrag von DoktorAgony »

Selbstgespräche helfen tatsächlich.

Fehler gefunden.

Code: Alles auswählen

QGraphicsScene *scene_v = new QGraphicsScene();
//QGraphicsView *graphicsView_Vorder = new QGraphicsView(scene_v); //Das fällt raus, da ich das schon durch den QtCreator das Fenster deklariert habe
QGraphicsPixmapItem *item_v = new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene_v->addItem(item_v);
ui->graphicsView_Vorder->setScene(scene_v);
ui->graphicsView_Vorder->fitInView(scene_v->sceneRect(), Qt::IgnoreAspectRatio);
Danke dennoch fürs mitlesen. :D
Antworten