Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. 3rd Party Software
  4. Saving the contents of a Qwt widget as SVG
QtWS25 Last Chance

Saving the contents of a Qwt widget as SVG

Scheduled Pinned Locked Moved Unsolved 3rd Party Software
qwtsvgqtsvgvector graphicsplot
1 Posts 1 Posters 886 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    O Offline
    onat
    wrote on 15 Apr 2019, 11:33 last edited by
    #1

    Hello,
    I am trying to build a function to my program that will save the image of a Qwt plot as an SVG file. This is the code that does the conversion:

    QSvgGenerator averageChargesGraphGenerator;
    QString averageChargesFileName;
    averageChargesFileName.append(directoryName).append(forwardSlash ? QString("/") : QString("\\")).append(QString("averagechargetestvoltagegraph.svg"));
    averageChargesGraphGenerator.setFileName(averageChargesFileName);
    
    averageChargesGraphGenerator.setSize(ui.averageChargeTestVoltageWidget->size());
    averageChargesGraphGenerator.setViewBox(ui.averageChargeTestVoltageWidget->rect());
    
    QPainter averageChargesGraphPainter(&averageChargesGraphGenerator);
    ui.averageChargeTestVoltageWidget->render(&averageChargesGraphPainter);
    	
    averageChargesGraphPainter.setPen(pen);
    averageChargesGraphPainter.drawLine(QPoint(0, 0), QPoint(0, 500));
    averageChargesGraphPainter.drawLine(QPoint(0, 500), QPoint(500, 500));
    averageChargesGraphPainter.drawLine(QPoint(500, 500), QPoint(500, 0));
    averageChargesGraphPainter.drawLine(QPoint(500, 0), QPoint(0, 0));
    
    1. I create a QSvgGenerator object. I set the file name. Then I set the size to the size of the widget. I set the viewBox to the rect() of the widget.
    2. I create a QPainter object, passing a pointer to the QSvgGenerator object in the constructor.
    3. I call the render() method of the Qwt widget, passing it a pointer to the QPainter object.
    4. Then I draw some lines to draw an enclosing box around the image.

    So, I did everything according to the online guide. However, it seems that the contents of the plot (such as lines, points etc.) have not been saved in vector graphic format. Instead, they have been saved like a PNG image that has been embedded into the SVG file. This is from the XML source of the generated SVG file:

    <image x="0" y="0" width="480" height="445" preserveAspectRatio="none" xlink:href="data:image/png;base64,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QANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QJRAA0QJNECUQANECTRAlEADRAk0QNSvy+VyvV5HbwYAn73dbrfR2wDAHf8BvpgJm7p+1C0AAAAASUVORK5CYII=" />
    

    Notice that at the beginning of the xlink:href field, it says "data:image/png". One interesting thing is that only the contents of the plot have been saved like this. The legends, axes, numerations etc. of the graph have been saved in vector graphic format.
    So what did I do wrong and what do I need to change to save the contents of the graph in the vector graphics format? Thanks in advance.

    1 Reply Last reply
    0

    1/1

    15 Apr 2019, 11:33

    • Login

    • Login or register to search.
    1 out of 1
    • First post
      1/1
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved