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
本文暂时没有评论,来添加一个吧(●'◡'●)