Qt中如何计算字体的内部间隔

懒懒的吉他手 2014-05-06 09:54:04
即TEXTMETRIC结构体中的tmInternalLeading属性,如果用GDI是可以获得的,但是如果想用纯Qt,即使用QFont和QFontMetrics,算出来的值总有偏差,如何解决?


现在的代码类似这样

int realHeight = font.pointSize();
QFontMetrics fm(font);
int pixelsHigh = fm.height();
int pixelsLeading = fm.leading();
int pixelsDescent = fm.descent();
int nInternalLeading = pixelsHigh - realHeight - pixelsLeading - pixelsDescent - 1;


按照某外国论坛的代码来看,这个代码理论上是正确的,可是实际上跑起来由于 font.pointSize()的值其实是不准确的,导致了最后计算出来的nInternalLeading 不准确,有没有别的办法获得准确的 font.pointSize()值?
...全文
273 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒懒的吉他手 2014-05-06
  • 打赏
  • 举报
回复
引用 5 楼 jiangcaiyang123 的回复:
int QFont::pixelSize() const Returns the pixel size of the font if it was set with setPixelSize(). Returns -1 if the size was set with setPointSize() or setPointSizeF(). 是会返回-1的,因为你调用了setPointSize()。
是的,构造函数就这样 QFont ( const QString & family, int pointSize = -1, int weight = -1, bool italic = false )。。。
懒懒的吉他手 2014-05-06
  • 打赏
  • 举报
回复
引用 4 楼 dbzhang800 的回复:
首先,使用它之前,你的QApplication或QGuiApplication有没有已经初始化完毕? 如果和系统API提供的数值真的不一样,你可以去提交一个bug
这个值只是和计算出来的值有一个单位的偏差,不是每次都出现,所以应该还算算法有问题,每个字体的偏差不一样,有的有,有的就没有,英文字体偏差小,中文字体偏差大,所以我想说的是这个值会不会存在是原数值是浮点数这里简单取整了导致的偏差,就这个意思
彩阳 2014-05-06
  • 打赏
  • 举报
回复
int QFont::pixelSize() const Returns the pixel size of the font if it was set with setPixelSize(). Returns -1 if the size was set with setPointSize() or setPointSizeF(). 是会返回-1的,因为你调用了setPointSize()。
dbzhang800 2014-05-06
  • 打赏
  • 举报
回复
首先,使用它之前,你的QApplication或QGuiApplication有没有已经初始化完毕? 如果和系统API提供的数值真的不一样,你可以去提交一个bug
懒懒的吉他手 2014-05-06
  • 打赏
  • 举报
回复
引用 2 楼 jiangcaiyang123 的回复:
QFont除了有pointSize()这个函数外还有pixelSize()。
一个有值的同时另一个会返回-1
彩阳 2014-05-06
  • 打赏
  • 举报
回复
QFont除了有pointSize()这个函数外还有pixelSize()。
lin-chang 2014-05-06
  • 打赏
  • 举报
回复
围观学习学习

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧