需要在角度a的表盘内侧书写字符串,字符串的位置在图中用文本框示意出来。
将文本框的位置设置为如下位置:该角度的半径经过文本框的中心,文本框的宽和长可以由字体和字符串获得。文本框与半径的交点分别为 j1和j2。
我们实际要获取的是 文本框的位置,我的思路是先获得 j1 到j2的长度, 圆心到j1的长度可以由半径减去刻度线长度得到。知道这两者,即可获得 圆心到矩形中心的距离。
然后根据三角函数公式,计算得到 矩形框中心的 坐标。因矩形框宽、长已知,可以计算得到矩形框的 rect(x,y,w,h)
矩形框与半径相交有以下图中三种情况,
分析三图得到如下代码
painter->translate(0,0);
QFont font = painter->font();
QFontMetricsF fm(font);
double w = fm.size(Qt::TextSingleLine,str).width(); //str 为文本内容
double h = fm.size(Qt::TextSingleLine,str).height();
double length1 = w/cosa;
double length2 = h/sina;
double length = (fabs( length1 )>fabs(length2 )?fabs( length2 ):fabs(length1 ));
double middlex = (m_radius - 15- length /2)*cosa;
double middley = -(m_radius - 15 - length /2)*sina;
QRectF rectf(middlex - w/2,middley-h/2,w,h); painter->drawText(rectf, str);
调试好第一象限,其它象限公式通用,表盘显示效果如下:
目前还没有发现缺陷。