QT學習---輸出文字(動態測試文字寬度)
阿新 • • 發佈:2019-02-16
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; } } } }