gpt4 book ai didi

c++ - 在已编译的 ROOT (CERN) 应用程序中将 TCanvas 绘制到屏幕上

转载 作者:可可西里 更新时间:2023-11-01 14:17:56 26 4
gpt4 key购买 nike

绘制到屏幕的规则是什么?

我的最终目标是将 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 的这些定义中的任何一个,在后来调用的 UpdateDraw 方法上使用适当的成员访问运算符,应用程序就会崩溃在屏幕上打印一个空白的 TCanvas 窗口之后。如果我将 apph 更改为指针,它也会崩溃。

如果我尝试使用任何类型的 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 *+对象#p85329 .

最佳答案

我通常使用如下所示的 TApplication 来让 TCanvas 在屏幕上真正显示为窗口。

#include "TApplication.h"
// other stuff

int main(int argc, char** argv) {
TApplication theApp("App",&argc, argv);
// your code
// here you can Draw() things
theApp.Run();
return 0;
}

然后程序就停止在 Run() 处,我用 ^C 结束进程。

关于c++ - 在已编译的 ROOT (CERN) 应用程序中将 TCanvas 绘制到屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30932725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com