Qt - program konsolowy do generowania wykresów słupkowych SVG

Stronę tą wyświetlono już: 122 razy

Prosty program konsolowy, który w zasadzie stworzyłem z myślą przetestowania nowego zestawu narzędzi, jakie na własne potrzeby wykonuję, a które umożliwi mi szybkie, łatwe i przyjemne generowanie plików HTML z elementami grafiki SVG. Program działa na zasadzie podania w konsoli systemowej argumentu pozwalającego wygenerować wykres w HTML-u. Oto przykładowe wywołanie programu pod systemem Windows:

SvgCreator.exe "value={1;opis 1}|value={2;opis 2}|value={3;opis3}|xLabel=Os X|yLabel=Os Y|title=Przykladowy wykres|id=wykres|height=400|width=600"

W systemie Linux:

./SvgCreator "value={1;opis 1}|value={2;opis 2}|value={3;opis3}|xLabel=Os X|yLabel=Os Y|title=Przykladowy wykres|id=wykres|height=400|width=600"

Możliwe jest oczywiście wygenerowanie do jednego pliku HTML kilku takich wykresów:

SvgCreator.exe "value={1;opis 1}|value={2;opis 2}|value={3;opis3}|xLabel=Os X|yLabel=Os Y|title=Przykladowy wykres|id=wykres|height=400|width=600" "value={1;opis 1}|value={2;opis 2}|value={3;opis3}|xLabel=Os X|yLabel=Os Y|title=Przykladowy wykres 2|id=wykres|height=400|width=600"

Powyższe wywołanie spowoduje utworzenie pliku HTML z dwoma wykresami. Przykład wygenerowanego w ten sposób wykresu zamieszczam poniżej.

Przykladowy wykres
Os X Os Y 1 1 2 2 3 3

Legenda wykresu:

  • 1) opis 1 = 1

  • 2) opis 2 = 2

  • 3) opis3 = 3

Sam kod użyty w funkcji main wygląda następująco:

Listing 1
  1. int main(int argc, char *argv[])
  2. {
  3. QCoreApplication a(argc, argv);
  4. qsrand(static_cast<uint>(time(nullptr)));
  5. QHtmlPage *htmlPage = new QHtmlPage("Qt html + svg");
  6. htmlPage->addJavaScriptCode(svg::diagram::SvgDiagramPale::getJavaScriptDiagramCode());
  7. // local css files
  8. for(int i = 1; i < argc; i++){
  9. qDebug() << argv[i];
  10. htmlPage->getBody()->addHtmlChild(svg::diagram::SvgDiagramPale::getSvgDiagramPale(QString::fromLatin1(argv[i]).toUtf8()));
  11. }
  12. htmlPage->addLocalStyle(
  13. "svg.diagram { "
  14. "display: block;"
  15. "margin: auto;"
  16. "max-width: 100%;"
  17. "}"
  18. "figcaption.title { "
  19. "font-size: 14pt;"
  20. "text-align: center;"
  21. "}"
  22. "figcaption.diagramLegend {"
  23. "margin: auto;"
  24. "padding: 0 0 0 0;"
  25. "width: 800px;"
  26. "max-width: 100%;"
  27. "background-color: #aaaaaa;"
  28. "}"
  29. "ul.diagramLegend { "
  30. "list-style-type: none;"
  31. "background-color: #aaaaaa;"
  32. "width: 100%;"
  33. "margin: auto;"
  34. "padding: 0;"
  35. "}"
  36. "ul.diagramLegend > li {"
  37. "display: inline-table;"
  38. "width: 25%;"
  39. "margin: 0 0 0 0;"
  40. "padding: 0 0 0 0;"
  41. "}"
  42. "ul.diagramLegend > li > p { "
  43. "margin-left: 10px;"
  44. "margin-right: 10px;"
  45. "}"
  46. "ul.diagramLegend > li:hover { "
  47. "color: white;"
  48. "}"
  49. "figcaption.diagramLegend > p { "
  50. "padding: 10px 0 0 10px;"
  51. "background-color: #aaaaaa;"
  52. "}"
  53. );
  54. QFile file("htmlWithSvg.html");
  55. file.open(QIODevice::WriteOnly);
  56. QTextStream textStream(&file);
  57. textStream << htmlPage;
  58. file.close();
  59. delete htmlPage;
  60. return a.exec();
  61. }

Dokładny przykład generowanego pliku można zobaczyć tutaj.

Załączniki:

Wersja na Windowsa programu SvgCreator przeznaczonego do generowania wykresów SVG osadzonych w pliku HTML

Komentarze