在做一些应用的时候,可能会随时动态的改变一些控件的大小(比如QLabel),如果控件里的文字的大小不随之变化的话,就很容易出现太小,或者超出控件的情况发生。
可以使用下面的代码来调整控件字体的大小:
int cellwidth=26;
int fontsize=1;
while(true)
{
QFont tmp("Arial",fontsize);
tmp.setPointSize(fontsize);
QFontMetricsF fm(tmp);
qreal pixelsWide = fm.width("8");
qreal pixelsHigh = fm.height();
if(pixelsWide>=cellwidth || pixelsHigh >= cellwidth)
break;
++fontsize;
}
QFont font("Arial",fontsize);
int fontsize=1;
while(true)
{
QFont tmp("Arial",fontsize);
tmp.setPointSize(fontsize);
QFontMetricsF fm(tmp);
qreal pixelsWide = fm.width("8");
qreal pixelsHigh = fm.height();
if(pixelsWide>=cellwidth || pixelsHigh >= cellwidth)
break;
++fontsize;
}
QFont font("Arial",fontsize);
上面的代码是要求一个存放个位数字的方形控件的字体大小。假定控件的宽和高背限制为cellwidth变量的值。
然后逐次循环创建fontsize大小的字体,通过QFontMetricsF类取得该字体应用到某一段文字(这里用了“8”)的宽和高。再与之前的cellwidth进行比较,超过时结束循环。
此时fontsize存的就是符合要求的字体大小了。。。。
很简单的代码,很简单的需求,似乎不值得一提。:)不过且抛出这个砖块看看。。