加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

基于QT坐标轴刻度的实现

(2017-09-06 12:40:06)
  通过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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有