Seite 1 von 1

Svg Animations Problem

Verfasst: 17. August 2010 15:29
von danielp1000
Hallo,
Ich war gerade dabei, ein Spiel zu programmieren. Als Einleitungsvideo habe ich mir eine animierte Svg Datei zusammengebastelt(siehe Unten). Als Test hab ich ein kleines Programm geschrieben(auch Unten).Das mag jetzt vielleicht blöd klingen, aber ich sehe immer nur ein schwarzes Bild und hab keine Ahnung, wie ich die Animation zum Laufen bringe.
Danke im voraus für antworten.

ui-datei
(menu usw. sind nur nicht gelöscht)

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGraphicsView" name="graphicsView"/>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>
mainwindow.cpp
(loadImage wir in main nach dem konstruktor aufgerufen "#include <QtSvg>" in main.h)

Code: Alles auswählen

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

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

void MainWindow::loadImage()
{
    QString fName;
    if(qApp->arguments().size()<2)
        fName=QFileDialog::getOpenFileName(0,tr("Auswahl"),QDir::toNativeSeparators("/"),tr("SVG-Dateien(*.svg)"));
    else
        fName=qApp->arguments()[1];
    QSvgRenderer *R=new QSvgRenderer(QDir::toNativeSeparators(fName));
    QGraphicsSvgItem *I=new QGraphicsSvgItem();
    I->setSharedRenderer(R);
    R->setViewBox(ui->graphicsView->rect());
    QGraphicsScene *S=ui->graphicsView->scene();
    if(!S)S=new QGraphicsScene();
    S->clear();
    S->addItem(I);
    ui->graphicsView->setScene(S);
    ui->graphicsView->setT
    connect(R,SIGNAL(repaintNeeded()),S,SLOT(update()));
}

MainWindow::~MainWindow()
{
    delete ui;
}
Svg Datei

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="297mm"
   height="210mm"
   id="svg2826"
   version="1.1"
   inkscape:version="0.47 r22583"
   sodipodi:docname="Logo.svg">
  <defs
     id="defs2828">
    <inkscape:perspective
       sodipodi:type="inkscape:persp3d"
       inkscape:vp_x="0 : 372.04724 : 1"
       inkscape:vp_y="0 : 1000 : 0"
       inkscape:vp_z="1052.3622 : 372.04724 : 1"
       inkscape:persp3d-origin="526.18109 : 248.03149 : 1"
       id="perspective2835" />
    <filter
       id="filter3149"
       inkscape:label="Neon"
       inkscape:menu="Bevels"
       inkscape:menu-tooltip="Neon light effect"
       x="-0.25"
       y="-0.25"
       width="1.5"
       height="1.5"
       color-interpolation-filters="sRGB">
      <feGaussianBlur
         id="feGaussianBlur3151"
         stdDeviation="1"
         result="result1" />
      <feComposite
         id="feComposite3153"
         in2="result1"
         in="result1"
         result="result4"
         operator="in" />
      <feGaussianBlur
         id="feGaussianBlur3155"
         stdDeviation="7"
         result="result6"
         in="result4" />
      <feComposite
         id="feComposite3157"
         in2="result4"
         operator="over"
         in="result6"
         result="result8" />
      <feComposite
         id="feComposite3159"
         in2="result8"
         operator="in"
         result="fbSourceGraphic"
         in="result6" />
      <feSpecularLighting
         id="feSpecularLighting3161"
         specularExponent="45"
         specularConstant="2"
         surfaceScale="2.5"
         lighting-color="rgb(255,255,255)"
         result="result1"
         in="fbSourceGraphic">
        <fePointLight
           id="fePointLight3163"
           z="20000"
           y="-10000"
           x="-5000" />
      </feSpecularLighting>
      <feComposite
         id="feComposite3165"
         in2="fbSourceGraphic"
         operator="in"
         result="result2"
         in="result1" />
      <feComposite
         id="feComposite3167"
         in2="result2"
         k3="1.5"
         k2="1.2"
         operator="arithmetic"
         result="result4"
         in="fbSourceGraphic" />
      <feComposite
         id="feComposite3169"
         in2="result4"
         operator="over"
         in="result9"
         result="result9" />
      <feBlend
         id="feBlend3171"
         in2="result9"
         mode="screen" />
    </filter>
	<linearGradient id="glow" x1="0%" x2="50%" y1="0%" y2="0%" spreadMethod="reflect">
		<stop offset="20%" stop-color="black"/>
		<stop offset="50%" stop-color="red"/>
		<stop offset="80%" stop-color="black"/>
	</linearGradient>-
  </defs>
  <sodipodi:namedview
     inkscape:document-units="mm"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="0.43415836"
     inkscape:cx="490"
     inkscape:cy="403.03307"
     inkscape:current-layer="layer1"
     id="namedview2830"
     showgrid="true"
     showguides="false"
     inkscape:snap-page="true"
     inkscape:snap-grids="true"
     inkscape:snap-global="false"
     inkscape:window-width="1440"
     inkscape:window-height="880"
     inkscape:window-x="-8"
     inkscape:window-y="-8"
     inkscape:window-maximized="1" />
  <metadata
     id="metadata2832">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
    <rect
       style="fill:#000000"
       id="rect2889"
       width="1061.8246"
       height="750.87805"
       x="2.3033071"
       y="0.12631376" />
    <text
       xml:space="preserve"
       style="font-size:180px;font-style:normal;font-weight:normal;fill:#000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial;filter:url(#filter3149);fill:url(#glow);fill-opacity:0"
       x="60"
       y="285"
       id="text2865"><set attributeName="fill" to="#dcb42c" begin="3s"/><animate attributeName="fill-opacity" from="0.00" to="1.00" begin="0s" dur="3s" fill="freeze"/><tspan
         sodipodi:role="line"
         id="tspan2867"
         x="80"
         y="285"
         style="font-size:180px;text-decoration:underline">text      </tspan><tspan
         sodipodi:role="line"
         x="55"
         y="520"
         id="tspan2869"
         style="font-size:180px">text       </tspan></text>
    <flowRoot
       xml:space="preserve"
       id="flowRoot2873"
       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Arial;font-style:normal;font-weight:normal;font-size:40px;-inkscape-font-specification:Arial"><flowRegion
         id="flowRegion2875"><rect
           id="rect2877"
           width="785.42767"
           height="140.50172"
           x="175.05133"
           y="313.37607" /></flowRegion><flowPara
         id="flowPara2879"></flowPara></flowRoot>    <flowRoot
       xml:space="preserve"
       id="flowRoot2881"
       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Arial;font-style:normal;font-weight:normal;font-size:40px;-inkscape-font-specification:Arial"><flowRegion
         id="flowRegion2883"><rect
           id="rect2885"
           width="419.20187"
           height="43.762833"
           x="515.9408"
           y="417.02487" /></flowRegion><flowPara
         id="flowPara2887"></flowPara></flowRoot>  </g>

Verfasst: 17. August 2010 15:56
von franzf
*) das SVG ist nicht komplett
*) die viewBox in deinem Renderer kann daneben liegen,
*) die scene setzt du am besten gleich im Konstruktor, dann kannst du dir das Gefummel sparen (am besten gleich die scene als Member)
*) Was sagt QSvgRenderer::animated()?
*) toNativeSeparators() ist überflüssig
*) Es scheint du lädst nur das eine SVG in die scene, ich denke du fährst mit nem QSvgWidget besser.

Wenn du längeren Code postest, pack bitte dein Projekt samt allen wichtigen Dateien OHNE Binaries wie die .exe oder die Qt-Libs in ein .zip (oder halt .tar.gz oder ein anderes unterstütztes Format), damit man sofort kompilieren und rumprobieren kann.

Verfasst: 18. August 2010 12:45
von danielp1000
Danke für die schnelle antwort.
1.:wo meinst du ist der fehler?
4.:qDebug()<<R.animated(); gibt false aus...
6.: ich habe oben geschieben dass es ein spiel werden soll und dies ein test für die svg animation war.

Verfasst: 18. August 2010 13:01
von franzf
danielp1000 hat geschrieben:1.:wo meinst du ist der fehler?
Es fehlt mindestens das schließende </svg>. Kann ja auch ein c&p-Fehler deinerseits sein ;)

Verfasst: 18. August 2010 14:05
von danielp1000
c&p fehler