テキストが常に QGraphicsItem の境界内に含まれるようにQGraphicsItem
、特定の長さに基づいてa のサイズを変更する最も効果的な方法を探しています。テキストを読みやすいサイズで表示しながら、 をできるだけ小さくQString
するという考え方です。QGraphicsItem
特定の幅のしきい値で複数の行に折り返すことも理想的です。例えば、
TestModule::TestModule(QGraphicsItem *parent, QString name) : QGraphicsPolygonItem(parent)
{
modName = name;
// what would be the best way to set these values?
qreal w = 80.0;
qreal h = 80.0;
QVector<QPointF> points = { QPointF(0.0, 0.0),
QPointF(w, 0.0),
QPointF(w, h),
QPointF(0.0, h) };
baseShape = QPolygonF(points);
setPolygon(baseShape);
}
void TestModule::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QBrush *brush = new QBrush(Qt::gray, Qt::SolidPattern);
painter->setBrush(*brush);
painter->drawPolygon(baseShape);
painter->drawText(QPointF(0.0, 40.0), modName);
}
要件を機能させるためにコンストラクターに追加できるコードは何ですか? 文字列の全長に基づいて幅を設定し、各文字が占めるピクセル スペースを推測することが最も明白な解決策ですが、もう少しエレガントなものを探しています。何か案は?よろしくお願いします。