Ein SVG Bild innerhalb eines GraphicsView per maus bewegen
Klar, gibts was besseres -> Linux. Oder meintest du was anderes...
Wenn du schreibst du willst eine SVG-Datei darstellen, warum erstellst du die Grafik dann wieder manuell. Deine Aufgabenstellungen passen nicht ganz zueinander... Mal davon abgesehen, daß auch noch andere QGraphicsItem's gibt (außer eins für QPicture, aber das ist auch nicht wirklich viel Arbeit...)
Wenn du schreibst du willst eine SVG-Datei darstellen, warum erstellst du die Grafik dann wieder manuell. Deine Aufgabenstellungen passen nicht ganz zueinander... Mal davon abgesehen, daß auch noch andere QGraphicsItem's gibt (außer eins für QPicture, aber das ist auch nicht wirklich viel Arbeit...)
Wegen Eclipse und Qt:
Da gibts eigentlich schon einen (mehrere) Thread(s) in diesem Forum, einfach mal suchen hätte geholfen... z.B. gibt es hier sogar eine schöne Anleitung. Wenn du die noch nicht kennst, einfach mal durcharbeiten. Ansonsten mit den Settings experimentieren. wirst es schon zum Laufen bekommen.
Im Fall der Fälle einfach zu Fuß das *.pro bearbeiten (wie gesagt "QT += svg"), ein händisches qmake und make, das sollte in jedem Fall klappen (hier tut es...).
Da gibts eigentlich schon einen (mehrere) Thread(s) in diesem Forum, einfach mal suchen hätte geholfen... z.B. gibt es hier sogar eine schöne Anleitung. Wenn du die noch nicht kennst, einfach mal durcharbeiten. Ansonsten mit den Settings experimentieren. wirst es schon zum Laufen bekommen.
Im Fall der Fälle einfach zu Fuß das *.pro bearbeiten (wie gesagt "QT += svg"), ein händisches qmake und make, das sollte in jedem Fall klappen (hier tut es...).
Jetzt kommt es wieder mit Linux.
Das hab ich auch drauf, ich finde es auch gut (debian etch)
Aber ich soll hier über windows daran arbeiten um so etwaige fehler zu entdecken.
Und ja ich hab schon die suche benutzt, dieses tutorial hat mir vor ein paar tagen auch sehr geholfen.
Einen fehler habe ich schon beheben können, das graphicssvgitem wird schonmal erkannt.
Es lag an dem QT += svg im .pro file. danke dafür
nur der svggenerator wird noch nicht erkannt, da ich die qt 4.2.3 habe es aber anscheinend wie du meintest erst in der 4.3 enthalten ist.
Muss mich also erstmal um die 4.3 bemühen.
*edit
nun hab ich mir meinen code schon x mal angeschaut und finde den fehler nicht.
Da ich ja nun schonmal eine .svg laden kann und ich ja auch eine kleine .svg habe, dachte ich mir, startest du es mal zum testen.
Startet auch mit graphicsview, nur fehlt jede spur von einer svg...
Warum auch immer.
Hier mein verwendeter code:
hier der code der .svg datei (es wird ein schwarzes quadrat):
Und die .svg liegt direkt im wurzelverzeichnis des projektes
Weis einer rat?
Das hab ich auch drauf, ich finde es auch gut (debian etch)
Aber ich soll hier über windows daran arbeiten um so etwaige fehler zu entdecken.
Und ja ich hab schon die suche benutzt, dieses tutorial hat mir vor ein paar tagen auch sehr geholfen.
Einen fehler habe ich schon beheben können, das graphicssvgitem wird schonmal erkannt.
Es lag an dem QT += svg im .pro file. danke dafür
nur der svggenerator wird noch nicht erkannt, da ich die qt 4.2.3 habe es aber anscheinend wie du meintest erst in der 4.3 enthalten ist.
Muss mich also erstmal um die 4.3 bemühen.
*edit
nun hab ich mir meinen code schon x mal angeschaut und finde den fehler nicht.
Da ich ja nun schonmal eine .svg laden kann und ich ja auch eine kleine .svg habe, dachte ich mir, startest du es mal zum testen.
Startet auch mit graphicsview, nur fehlt jede spur von einer svg...
Warum auch immer.
Hier mein verwendeter code:
Code: Alles auswählen
#include <QGraphicsScene>
#include <QApplication>
#include <QGraphicsView>
#include <QPainter>
#include <QGraphicsSvgItem>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QGraphicsScene *scene=new QGraphicsScene();
QGraphicsView *view=new QGraphicsView();
QGraphicsSvgItem *item=new QGraphicsSvgItem("quadrat.svg");
scene->addItem(item);
item->setFlags(QGraphicsItem::ItemIsMovable);
view->show();
view->setScene(scene);
return app.exec();
Code: Alles auswählen
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/PR-SVG-20010904/DTD/svg10.dtd">
<svg>
<rect x="2" y="2" width="100" height="100"/>
</svg>
Weis einer rat?
Schau mal bitte nochmal genau nach. Hier funktioniert es. Wenn ich aber im Quelltext ein Datei angeb, die nicht existiert, seh ich auch nur ein weißes Feld. Aber in der Konsole kommt der Output, dass die Datei nicht gefunden wird.
Du kannst jetzt mal versuchen, den absoluten Pfad zur Datei zu ermitteln:
QString QCoreApplication::applicationDirPath () [static]
gibt dir hierfür den Pfad zum Verzeichnis deines Executable, mit welchem du dann einfach den Pfad zu deinem SVG zusammenbasteln kannst.
Evtl. lag ja daran der Fehler.
Du kannst jetzt mal versuchen, den absoluten Pfad zur Datei zu ermitteln:
QString QCoreApplication::applicationDirPath () [static]
gibt dir hierfür den Pfad zum Verzeichnis deines Executable, mit welchem du dann einfach den Pfad zu deinem SVG zusammenbasteln kannst.
Evtl. lag ja daran der Fehler.
kannst du mir bitte nochmals hilfestellung leisten?
Ich hab bis jetzt noch nicht gecheckt wie ich diese funktionen nutzen kann.
Ich habe mir die doku mit hoffen auf ein bsp durchstöbert aber leider nicht.
Allerdings habe ich gesehen das es auch die funktion:
QString QCoreApplication::applicationFilePath () [static]
gibt. Die würde mir dann ja alles ausgeben was ich bräuchte, in bezug auf den pfad.
Also bitte erkläre mir kurz, wie ich denn das überhaupt verwende.
Danke dir
Ich hab bis jetzt noch nicht gecheckt wie ich diese funktionen nutzen kann.
Ich habe mir die doku mit hoffen auf ein bsp durchstöbert aber leider nicht.
Allerdings habe ich gesehen das es auch die funktion:
QString QCoreApplication::applicationFilePath () [static]
gibt. Die würde mir dann ja alles ausgeben was ich bräuchte, in bezug auf den pfad.
Also bitte erkläre mir kurz, wie ich denn das überhaupt verwende.
Danke dir
applicationDirPath() gibt dir das Verzeichnis, in welchem dein binary liegt.
applicationFilePath() gibt dir den ganzen Pfad inklusive! binary.
Also ein Beispiel:
Dein Binary liegt in /usr/bin/progg.
Dann gilt folgendes:
applicationDirPath() = /usr/bin
applicationFilePath() = /usr/bin/progg
Das angewandt auf dein Beispiel:
applicationFilePath() gibt dir den ganzen Pfad inklusive! binary.
Also ein Beispiel:
Dein Binary liegt in /usr/bin/progg.
Dann gilt folgendes:
applicationDirPath() = /usr/bin
applicationFilePath() = /usr/bin/progg
Das angewandt auf dein Beispiel:
Code: Alles auswählen
[...]
QString fileName = "quadrat.svg";
QString absoluteFileName = QCoreApplication::applicationDirPath() + fileName;
[...]
QGraphicsSvgItem *item = new QGraphicsSvgItem( absoluteFileName );
[...]
achso jetzt verstehe ich, dank dir
aber er zeigt mir es trotzdem nicht an, dann muss das an dem svg file liegen.
hmm aber der IE zeigt mir das svg richtig an, der Mozilla allerdings nicht...
Ich schau mal ob ich den fehler finde, oder ob ich irgendwie den svggenerator unter 4.2.3 zum laufen bekomme
*edit:
hab grade gesehen das er den path falsch auflöst, ganz am ende nach dem projektordnernamen kommt ja ein \ und dann steht da noch release
und dahinter hat er dann natürlich noch den FileName..
Weist du woran das liegen kann?
aber er zeigt mir es trotzdem nicht an, dann muss das an dem svg file liegen.
hmm aber der IE zeigt mir das svg richtig an, der Mozilla allerdings nicht...
Ich schau mal ob ich den fehler finde, oder ob ich irgendwie den svggenerator unter 4.2.3 zum laufen bekomme
*edit:
hab grade gesehen das er den path falsch auflöst, ganz am ende nach dem projektordnernamen kommt ja ein \ und dann steht da noch release
und dahinter hat er dann natürlich noch den FileName..
Weist du woran das liegen kann?
Die 4.3.0 ist halt noch beta. Wenn die Software auf produktiv-Systemen laufen soll, wird da wohl keine Beta-Software laufen.
Wenn du es bei dir lokal einfach mal ausprobieren willst:
Hier downloaden.
Mich wundert es aber echt, dass es nicht funktioniert :/ Bin auch etwas hilflos bei deinem Problem.
Du bist dir aber absolut sicher, dass die Datei so heißt wie du es im Quelltext stehen hast? Kann es sein dass irgend ein tolles Windows-Programm noch eine andere Endung angehängt hat und du im Explorer die Anzeige derselbigen abgestellt hast?
Wenn du es bei dir lokal einfach mal ausprobieren willst:
Hier downloaden.
Mich wundert es aber echt, dass es nicht funktioniert :/ Bin auch etwas hilflos bei deinem Problem.
Du bist dir aber absolut sicher, dass die Datei so heißt wie du es im Quelltext stehen hast? Kann es sein dass irgend ein tolles Windows-Programm noch eine andere Endung angehängt hat und du im Explorer die Anzeige derselbigen abgestellt hast?
Oopsnibbel hat geschrieben:hab grade gesehen das er den path falsch auflöst, ganz am ende nach dem projektordnernamen kommt ja ein \ und dann steht da noch release
und dahinter hat er dann natürlich noch den FileName..
Weist du woran das liegen kann?
Ich hab kein Windows, drum weiß ich das auch nicht
Scheinbar packt der das Binary in einen Unterordner "release". Entweder legst du dein svg in den release-Ordner, oder in ein ganz anderes z.B.
Code: Alles auswählen
QDir::homePath() + "/meinProg/Data"Code: Alles auswählen
QString path = QCoreApplication::applicationDirPath();
QDir dir( path );
dir.cdUp();
QString absoluteFileName = dir.dirName() + "/" + fileName;Denke es ist auch was für dich dabei.
Am portabelsten (wenn dein Executable mal den Plath wechselt) ist Lösung 2 + 4.
ja so ziemlich, aber zur sicherheit nochmal nachgeschaut und ich lasse sogar geschütze windows files anzeigen.
Aber damit du das mal mit der datei ausprobieren kannst (wenn du so nett wärst), habe ich die datei mal angehängt.
Ich werd hier noch bescheuert ey, kurz vorm we son scheiß...
Aber damit du das mal mit der datei ausprobieren kannst (wenn du so nett wärst), habe ich die datei mal angehängt.
Ich werd hier noch bescheuert ey, kurz vorm we son scheiß...
- Dateianhänge
-
- quadrat.rar
- (285 Bytes) 166-mal heruntergeladen