在编译的根 (CERN) 应用程序中将 TCanvas 绘制到屏幕上
Painting a TCanvas to the screen in a compiled ROOT (CERN) application
着屏幕绘画的规则是什么?
我的最终目标是将 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 中构建的应用程序,main
开始时的简单new TApplication("name",0,0);
使一切正常。
所以,重申一下:我怎样才能在这个操作系统中将我的直方图放到屏幕上,也许还有其他操作系统?我怀疑我是否能够理解"为什么",但为阅读本文的其他人写一些关于这一点的东西可能会很好。否则,只需逐步描述如何使用这些对象进行绘画就太好了。
非常感谢对此的任何帮助;如果有用,我很乐意提供更多信息/示例。
更新:如果我使用类似的东西进行编译,它在我的特定情况下有效
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
,以使TCanvas
es真正显示为屏幕上的窗口。
#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
结束该过程。
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 绘制文本问题
- 在 QT C++中绘制/操作多边形
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 在现代OpenGL中,绘制GL_TRIANGLE奇怪的z轴行为的填充圆
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 在编译的根 (CERN) 应用程序中将 TCanvas 绘制到屏幕上