1. 程式人生 > >QT學習---輸出文字(動態測試文字寬度)

QT學習---輸出文字(動態測試文字寬度)

1、使用QFontMetrics類:

void Circle::paintEvent(QPaintEvent* event)
{
	QPainter painter(this);

	int width = this->width();
	int height = this->height();

	QFont font("Times",  16, QFont::Normal, false);
	painter.setFont(font);

	// 動態顯示
	QString longtext = GBK::ToUnicode("陸地面積約960萬平方千米,東部和南部大陸海岸線1.8萬多千米");
	QFontMetrics metric(font);
	QRect boundingRect = metric.boundingRect(0, 0,width, height, 	
		Qt::AlignHCenter | Qt::AlignVCenter, 	
		longtext);

	qDebug("width: %d , height: %d (%d,%d)\n", 
		boundingRect.width(), boundingRect.height(),
		width, height);
	if(boundingRect.width() <= width)
	{
		painter.drawText(0, 0,width, height,   // 指定位置
			Qt::AlignHCenter | Qt::AlignVCenter, // 指定對齊等屬性
			longtext
			);
	}
	else
	{
		// 逐步縮短嘗試
		for(int i=longtext.length()-1; i>= 0 ; i--)
		{
			QString substr = longtext.left(i);
			QString showtext = substr + "...";
			QRect bounding = metric.boundingRect(0, 0,width, height, 	
				Qt::AlignHCenter | Qt::AlignVCenter, 	
				showtext);
			if(bounding.width() < width)
			{
				painter.drawText(0, 0,width, height,   // 指定位置
					Qt::AlignHCenter | Qt::AlignVCenter, // 指定對齊等屬性
					showtext
					);
				break;
			}
		}
	}

	
}