Save canvas to pdf in standalone code

Hi Everyone,

I am using the “simple_canvas” code by @bellenot.

Everything works fine until I want to save the content from the canvas to a vector graphic supported file type (e.g. pdf) using the “saveas” command.
The generated pdf file has a white background, which size is changeable with “SetWindowSize()”, but the histogram is missing.

My guess is, that there is a conflict between the TApplication and the QApplication because in the following example the histogram is drawn in the first pdf and not in the second one. Is this a known issue and exists therefor a workaround?

Thanks.

int main(int argc, char *argv[]) {
    TApplication *rootapp = new TApplication("Simple Qt ROOT Application", &argc, argv);

    TCanvas *canvas = new TCanvas("canvas", "canvas title", 800, 600);
    canvas->cd();

    TFormula *form1 = new TFormula("form1","abs(sin(x)/x)");

    TF1 *sqroot = new TF1("sqroot","x*gaus(0) + [3]*form1", 0, 10);
    sqroot->SetParameters(10, 4, 1, 20);
    TH1F *hist = new TH1F("h1f","Test random numbers", 200, 0, 10);
    hist->FillRandom("sqroot", 100000);
    hist->Draw("HIST");

    canvas->SaveAs("hist_a.pdf");

    QApplication app(argc,argv);

    canvas->SaveAs("hist_b.pdf");

    QMainCanvas m(0);

    m.resize(m.sizeHint());
    m.setWindowTitle("Qt Example - Canvas");
    m.setGeometry( 100, 100, 699, 499 );
    m.show();
    m.resize(700, 500);

    QObject::connect( qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit()) );

    return app.exec();
}

ROOT: Version: 6.06.02
Platform: Not Provided
Compiler: Not Provided


Saving with SaveAs works for me with ROOT v5.34, I’ll need time to try with ROOT 6…

I have still the same issue using ROOT 5.34.23, 5.34.28 and 5.34.36.

With the simple_canvas example? It works just fine for me…

Unfortunately yes. If I choose png as file type, I get the desired output.

Well, here is what I get with ROOT v5.34/39, Visual Studio 2012, and Qt 5.5.1: tesdt.pdf (15.4 KB)
And the one with ROOT v6.19/01, Visual Studio 2019, and Qt 5.12.2: test2.pdf (15.4 KB)

Thanks a lot. I am using Qt 5.11.2 with the above mentioned ROOT versions on ubuntu 14.04. Also, I get the same empty pdf on ubuntu 16.04.

Since the code is correct, I assume my ROOT or Qt installation is faulty. Do I need some special build options for ROOT or Qt?

Then it might be a platform dependent issue. I’ll try on a Linux box and let you know.

Nope

Here is what I get with ROOT 6.19/01, gcc 6.2.0, Qt 5.9.2 on CentOS 7: testcc7.pdf (15.4 KB)

I noticed a strange behavior, maybe this can help: In the embedded pdf viewer from Visual Studio Code I get a non-empty pdf, see the attached screenshot.


But, it is only black and white.
If I open it in several other pdf viewers, it is still the same result. hist.pdf (15.3 KB)

I see the same thing with your file… Unfortunately our graphics expert, @couet is away and I can’t tell what is wrong with this pdf…

Oh wow, changing the system language from German to English solves the problem. After investigating a svg file with an editor, I noticed the wrong decimal separator.

Thanks for your support.

Wow! Thanks, good to know! (and weird side effect…)