计算机系统应用教程网站

网站首页 > 技术文章 正文

Qt 加载cern-root库 并调用root类

btikc 2024-09-08 12:03:39 技术文章 23 ℃ 0 评论

cern-root是欧洲核子研究中心CERN开发的基于C++,可与python,R,Fortran等语言进行绑定的数据处理框架。cern-root最初基于Qt开发,在root5之前可通过Qt来开发root的界面,后续版本qtroot项目被废弃。经历过手写root GUI软件的痛苦,一直想着能否通过Qt来写root的界面。近期重拾Qt学习,因而对这个问题进行了进一步的研究。

首先在项目的.pro文件中载入ROOT库头文件和链接库

NCLUDEPATH += \
 /usr/local/opt/root6/include
LIBS += \
 -L/usr/local/opt/root6/lib -lCore -lImt -lRIO -lNet -lHist -lGraf \
 -lGraf3d -lGpad -lTree -lTreePlayer -lRint -lPostscript -lMatrix \
 -lPhysics -lMathCore -lThread -lMultiProc -pthread -lm -ldl -rdynamic

随后即可在项目中调用root的类。如在mainWindow构造函数添加下列代码。

 TString s("nihao");
 s.Append("hello");
 s.Data();
 ui->setupUi(this);
 ui->label->setText(QString::number(TMath::Pi()+Int_t(32),10,10)+s.Data());
 TFile *f=new TFile("test.root","recreate");
 TTree *tree=new TTree("tree","tree");
 TGraph *gg=new TGraph();
 for (int i = 0; i < 100; ++i) {
 gg->SetPoint(i,TMath::Sin(i),TMath::CosH(i));
 }
 gg->Write();
 gg->Draw();
 tree->Write();
 f->Close();

运行结果如下:

第一图可以看出Qt的界面类与root函数的交互,第二张图为生成的文件内容,第三张图可以看出TGraph类在Qt程序中运行正常。

到目前为止,可以估计root常用功能已经在Qt中被调用,唯一缺失的是root的图形库,这一点还有待测试。

项目地址:https://github.com/mission-young/QtRoot

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表