Seite 1 von 1

QGraphicsScene-Koordinatensystem bei 0 beginnen lassen

Verfasst: 11. Juli 2014 20:03
von watson007
Hallo zusammen, ich habe mich gerade hier angemeldet.

Ich bin Neueinsteiger in Qt-Programmierung und habe eine Frage. Zunächst mein Quellcode, der Konstruktor der MainWindow-Klasse:

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QGraphicsScene* scene = new QGraphicsScene(0,0,this->width(),this->height());
    scene->addRect(0,0,60,80);
    QGraphicsView* view = new QGraphicsView(this);
    view->setScene(scene);
    setCentralWidget(view);
}
Über diesen Code wird ein Rechteck eingezeichnet, aber in die Mitte des Bildschirms. Ich will dass das Koordinatensystem bei 0,0 beginnt, also 0,0 links oben liegt und nicht mittig. Deswegen habe ich dem Konstruktor von QGraphicsScene ja auch diese Parameter mitgegeben.

Leider ignoriert der Befehl addRect das und zeichnet das Rechteck mittig im Bildschirm ein.
Ich will das Rechteck oben links einzeichnen lassen und nicht mit negativen Koordinaten hantieren.

Wie stelle ich das an?
Oder gibt es eine Umrechnungsfunktion? (hab schon nachgeschaut aber nichts passendes gefunden...)
Ich will eben die Pixelkoordinaten angeben.

Re: QGraphicsScene-Koordinatensystem bei 0 beginnen lassen

Verfasst: 11. Juli 2014 21:31
von Christian81
QGraphicsScene beinhaltet nur die Elemente, die Darstellung übernimmt QGraphicsView. Dort kann man einstellen was aktuell gezeigt werden soll, z.B. über setSceneRect(): http://qt-project.org/doc/qt-4.8/qgraph ... eRect-prop

Re: QGraphicsScene-Koordinatensystem bei 0 beginnen lassen

Verfasst: 11. Juli 2014 21:39
von watson007
ja, aber auch bei QGraphicsScene muss ich doch die Koordinaten angeben, z. B. bei
scene->addRect(0,0,60,80);

ich habe gerade mal diesen Befehl hinzugefügt:
view->setSceneRect(0,0,this->width(),this->height());

aber es ändert nichts. Das Rechteck wird immer noch irgendwo in der Mitte gezeichnet statt links oben.

Ich blicke nicht durch... was für Befehle muss ich einfügen um mein Rechteck oben links beginnen zu lassen? Ohne mit negativen Koordinaten zu arbeiten.

Re: QGraphicsScene-Koordinatensystem bei 0 beginnen lassen

Verfasst: 12. Juli 2014 00:35
von watson007
ich habs...

ich hatte zwar mein Koordinatensystem, welches mit 0,0 links oben beginnt, über den Konstruktor an QGraphicsScene übergeben und dafür die Fenstergröße übergeben...
aber das showFullScreen() erst danach gemacht.

Jetzt bringt er die neuen Elemente korrekt an die richtige Stelle, beginnend von links oben im Koordinatensystem gezählt.

aber dabei ist mir ein Fehler aufgefallen, nämlich translate funktioniert bei mir in Qt 5.2.1 gar nicht auf den QGraphicsView angewandt, siehe den Bugreport:
https://bugreports.qt-project.org/browse/QTBUG-7328

bei bringt es nur etwas die Objekte vor dem hinzufügen einzeln mit translate zu verschieben, aber ein translate auf den QGraphicsView angewandt hat keinen Effekt, auch ein ändern von dx und dy bei der transformationsmatrix hat keinen Einfluss auf den QGraphicsView... aber das ist ein Fehler von Qt
http://qt-project.org/doc/qt-4.8/qtrans ... #translate