Каковы правила рисования на экране?
Моя конечная цель — поместить TCanvas в класс и рисовать оттуда, но сейчас я думаю, что может помочь рассмотрение менее сложного примера. Ниже приведен код, который компилируется и выводится на экран на моем компьютере.
# include <TApplication.h>
# include <TCanvas.h>
# include <TH1D.h>
# include <thread>
# include <chrono>
//TCanvas canvas ("fCanvas", "fCanvas", 600, 400);
int main ( int argc, char* argv[] )
{
TApplication app ("app",&argc,argv);
TCanvas canvas ("fCanvas", "fCanvas", 600, 400);
//TCanvas* canvas = new TCanvas("fCanvas", "fCanvas", 600, 400);
TH1D h ("h","h",10,0,10);
h.Fill(1);
h.Fill(2);
h.Fill(2);
h.Fill(2);
h.Fill(3);
h.Fill(3);
h.Draw();
canvas.Update();
canvas.Draw();
std::this_thread::sleep_for( std::chrono::seconds(3) );
return 0;
}
Вы можете заметить некоторые закомментированные строки. Если я использую любое из этих определений canvas
, используя соответствующие операторы доступа к элементам в позже названных методах Update
и Draw
, приложение аварийно завершает работу после вывода на экран пустого окна TCanvas. Он также падает, если я изменяю app
и h
на указатели.
Если я попытаюсь создать экземпляр класса, используя какой-либо объект ROOT, это приведет к сбою приложения.
Прямо сейчас я компилирую с помощью MSVC++ cl.exe
и связываю с link.exe
. Я работаю над 64-битной Windows 7 Enterprise N. Я пытаюсь портировать приложение, которое я создал в Unix, для которого простая new TApplication("name",0,0);
в начале main
заставляла все работать.
Итак, повторюсь: как вывести свои гистограммы на экран в этой ОС, а может и в других? Я сомневаюсь, что смогу понять «почему», но было бы неплохо написать что-нибудь об этом для тех, кто это читает. В противном случае просто пошаговое описание того, как использовать эти объекты для рисования, было бы замечательно.
Большое спасибо за любую помощь в этом; Я с удовольствием предоставлю дополнительную информацию/примеры, если это окажется полезным.
Обновление: это работает в моем конкретном случае, если я компилирую что-то вроде
cl -nologo -DWIN32 -W3 -D_WINDOWS -Z7 -MDd -GR -EHsc main.cxx -I %ROOTSYS%\include -FIw32pragma.h /link -debug -LIBPATH:%ROOTSYS%\lib libCore.lib libRIO.lib libHist.lib libGpad.lib
Не уверен, почему.
См. https://root.cern.ch/phpBB3/viewtopic.php?f=3&t=3402&p=85329&hilit=Vector+stl+of+TH1F*+Objects#p85329 .
TApplication
, если вы его не запускаете? root.cern.ch/root/html/TApplication.html#TApplication: Выполнить - person Ruggero Turra   schedule 14.07.2015TApplication
- person Ruggero Turra   schedule 15.07.2015