[QT]QT视图标尺功能实现

本文介绍了一种在QT中实现视图标尺的方法,通过继承QFrame类并重载paintEvent来绘制坐标,同时在另一层继承QGraphicsView并重载drawBackground绘制基线。文中提供了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现了QT的视图的标尺功能

首先一个继承视图QFrame的类,重载paintEvent,其中用于绘制坐标,坐标的计算是根据绘制间隔线的数据得到的

在里面一层继承视图QGraphicView,重载drawBackground绘制基线,并记录相关数据,比如(线间距离,线段数,缩放比例等)

部分实现代码:

 

ExpandedBlockStart.gif代码

    
int     cn = scene->coordinateNumber();
    
int     cofs = scene->coordinateOffset();
    
int     sceneHeight = height();
    QRectF  rect;

    
//ver
    forint i = 0 ; i < cn ; i += 5 )
    {
        painter
->setFont( maxFont );
        QPointF pt( 
0 ,  i * cofs );

        pt 
= scene->viewportTransform().map( pt );//将坐标转换成scene的viewport坐标系中
        
//小于0或大于当前窗口大小都不需要显示
        if( pt.y() < 0 )
            
continue;

        
if( pt.y() > sceneHeight )
            
break;

        rect.setTop( pt.y() 
+ 16.0f );
        rect.setLeft( 
0 );
        rect.setWidth( 
12.0f );
        rect.setHeight( 
12.0f );
        painter
->drawText( rect  , Qt::AlignCenter , tr("%1").arg(i) );
    }

 

 

转载于:https://www.cnblogs.com/olswcsr/archive/2010/08/05/1793583.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值