基于QT坐标轴刻度的实现
通过QT graphicsview实现坐标轴刻度绘制。
void plot::grid(double minx,double maxx,int numticksx,double miny,double maxy,int numticksy,QGraphicsScene *scene){
//plotsettings settings;
settings.maxX=maxx;
settings.minX=minx;
settings.numticksx=numticksx;
settings.maxY=maxy;
settings.minY=miny;
settings.numticksy=numticksy;
settings.adjust();
QPen pen;
pen.setBrush(QBrush(Qt::gray));//设置笔刷,你可以不用设置
QVector<<span style=" color:#800080;">qreal> dashes;
qreal space = 3;
dashes << 5 << space << 5 <<space;
pen.setDashPattern(dashes);
double width=this->viewport()->width();
double height=this->viewport()->height();
QRect rect(margin,margin,width-2*margin,height-2*margin);
for(int i=0;i<<span style=" color:#800000;">settings.numticksx;++i){
double x=i*rect.width()/settings.numticksx+rect.left();
double label=settings.minX+i*(settings.maxX-settings.minX)/settings.numticksx;
scene->addLine(x,rect.bottom(),x,rect.top(),pen);
QGraphicsTextItem *txtitem = new QGraphicsTextItem();
txtitem->setPlainText(QString::number(label));
txtitem->setPos(x,rect.top()-5);
txtitem->setTransform(QTransform().rotate(-180,Qt::XAxis));
scene->addItem(txtitem);
}
QGraphicsTextItem *txtitem = new QGraphicsTextItem();
txtitem->setPlainText(QString::number(settings.maxX));
txtitem->setPos(rect.left()+rect.width(),rect.top()-5);
txtitem->setTransform(QTransform().rotate(-180,Qt::XAxis));
scene->addItem(txtitem);
for(int i=0;i<<span style=" color:#800000;">settings.numticksy;++i){
double y=rect.top()+i*rect.height()/settings.numticksy;
scene->addLine(rect.left(),y,rect.right(),y,pen);
double label=settings.minY+i*(settings.maxY-settings.minY)/settings.numticksy;
QGraphicsTextItem *txtitem = new QGraphicsTextItem();
txtitem->setPlainText(QString::number(label));
txtitem->setPos(rect.left()-35,y+10);
txtitem->setTransform(QTransform().rotate(-180,Qt::XAxis));
scene->addItem(txtitem);
}
QGraphicsTextItem *txtitemy = new QGraphicsTextItem();
txtitemy->setPlainText(QString::number(settings.maxY));
txtitemy->setPos(rect.left()-35,rect.bottom()+10);
txtitemy->setTransform(QTransform().rotate(-180,Qt::XAxis));
scene->addItem(txtitemy);
}
实现效果图:
http://s9/mw690/004iYJMZzy7e1qL9K8E78&690
前一篇:用c++重写 logit
后一篇:聚类分析-K-Means

加载中…