Qt5.9绘制文字(QPainter类,drawText函数),以及font字大小和绘制结果大小不成比例
一、背景介绍。本文章是基于QT5.9.3版本来测试和运行。二、利用QTCreator 创建工程文件→新建文件或项目→Application→Qt widgets Application→(位置和名字,版本选择)→Details(选择基类QWidget)然后会生成ui文件和widget.cpp widget.h和main.cpp文件三、在widget.h文件中,添加paintEven...
·
一、背景介绍。本文章是基于QT5.9.3版本来测试和运行。
二、利用QTCreator 创建工程
文件→新建文件或项目→Application→Qt widgets Application→(位置和名字,版本选择)→Details(选择基类QWidget)
然后会生成ui文件和widget.cpp widget.h和main.cpp文件
三、在widget.h文件中,添加paintEvent函数。
并且在widget.cpp中添加实现函数,文字绘制的实现就在这个函数中。
protected:
void paintEvent(QPaintEvent * e);
四、paintEvent函数的实现
QFont CreateQFont(bool b)
{
float size = 9.97386837;//对应的是 420 13
size = 10;
if (b)
size *= 1.2; //对应的是480 16
//问题就在这里。480不是420的1.2倍
// 480/420 = 1.1428571428571428571428571428571
std::string str = u8"宋体";
QFont f(str.c_str(), size);
f.setPointSizeF(size);//当size为float的时候。必须调用这个接口。否则上面构造函数会丢失精度。
#ifdef _DEBUG
auto debugSize = f.pointSizeF();
auto debugFamily = f.family();
#endif // DEBUG
f.setLetterSpacing(QFont::SpacingType::AbsoluteSpacing, 0);
return f;
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
int nFlag = Qt::AlignTop | Qt::AlignLeft;
QString str = "012345678901234567890123456789012345678901234567890123456789";//60个数字
QRectF measureRect, boundingRect;// 函数结束后。左边两个变量会完全相等。但是长度是420
{
QRectF rect(0, 0, 10000, 10000);
painter.setFont(CreateQFont(true));
measureRect = painter.boundingRect(rect, nFlag, str);
painter.drawText(rect, nFlag, str, &boundingRect);
}
QRectF measureRect2, boundingRect2; // 函数结束后。左边两个变量会完全相等。但是长度是480
{
QRectF rect(0, 16, 10000, 10000);// 设置16 是为了绘制在第一次下面,防止重叠
painter.setFont(CreateQFont(false));
measureRect2 = painter.boundingRect(rect, nFlag, str);
painter.drawText(rect, nFlag, str, &boundingRect2);
}
return;
}
五、得出结论
设置的文字大小倍数是1.2倍。但是绘制出的结果并不是1.2倍。详情如下表格。
QFont::pointsizeF | 绘制的大小(长、宽) | |
1 | 9.97386837 | 420、13 |
1 | 9.97386837 * 1.2 | 480、16 |
2 | 10 | 420、13 |
2 | 12 | 480、16 |
很明显480并不是420的1.2倍
480/420 = 1.142857142857142857142857
QT绘制文字大小和QFont字体大小并不是线性相关的。
具体是什么关系,我还没查找到。这个要看qt绘制文字的核心算法
六、注意
如果你跟着前面步骤无法创建成功。你也可以查看附件。然后根据我写的附件下载相关代码。
2019年12月31日 18点52分上传 testQFont.rar
更多推荐
已为社区贡献1条内容
所有评论(0)