JAN
3
2011
|
Rendering UI files to SVGIn response to a question on IRC yesterday, here's a quick example for the New The main program loads the UI file shows it, it also sets up our SVG int main( int argc, char **argv ) { QApplication app( argc, argv ); QString filename = QString::fromLocal8Bit( argv[1] ); QUiLoader loader; QFile f( filename ); if ( !f.open(QIODevice::ReadOnly) ) return 1; QWidget *ui = loader.load( &f ); if ( !ui ) return 1; QString svgFile = filename.remove(".ui"); svgFile = svgFile.append(".svg"); Renderer render; render.setTarget(ui); render.setSvgFile(svgFile); QTimer::singleShot( 1000, &render, SLOT(start())); ui->show(); app.exec(); } The implementation of the actual capture is simple too, and is all handled by bool Renderer::renderToSvg() { if (svgFile.isEmpty()) { qDebug() << "No svg file set"; return false; } QSvgGenerator svg; svg.setFileName(svgFile); QPainter p; p.begin(&svg); target->render(&p); p.end(); return true; }
The result of running this on a simple UI file can be seen at http://xmelegance.org/devel/networkrequests.svg. When I first wrote the above code, I tried to get the widget to render QSvgGenerator svg; svg.setFileName(svgFile); target->render(&svg); So if I were you, I'd create the painter myself! |
![]() |