Svg Animations Problem

Alles rund um die Programmierung mit Qt
Antworten
danielp1000
Beiträge: 8
Registriert: 24. Mai 2010 18:41

Svg Animations Problem

Beitrag 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>
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
danielp1000
Beiträge: 8
Registriert: 24. Mai 2010 18:41

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 ;)
danielp1000
Beiträge: 8
Registriert: 24. Mai 2010 18:41

Beitrag von danielp1000 »

c&p fehler
Antworten