QT: QGraphicsTextItem выравнивание символа по левому верхнему углу
Я хочу нарисовать символ, выровненный по верхнему левому углу родительского.
QGraphicsTextItem * tItem = new QGraphicsTextItem(parent);
tItem->setPlainText("a");
tItem->setPos(QPointF(0,0));
На рисунке ниже представлен вывод моего кода (серый прямоугольник является родителем QGraphicsTextItem)
Результат:
Я хочу получить такой результат:
Результат моей мечты:
Я пытался использовать Qt::AlignLeft и Qt::AlignTop, но безрезультатно.
1 ответ
Решение
Решение заключается в использовании setDocumentMargin(0)
к QTextDocument
Если вы поставите только букву "а", кажется, что это не решение, так как кажется, что есть вертикальное смещение, но в действительности это не смещение, а заглавные буквы имеют более высокую высоту.
Пример:
#include <QApplication>
#include <QGraphicsTextItem>
#include <QGraphicsView>
#include <QTextDocument>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
auto parent = scene.addRect(QRectF(0, 0, 100, 100), QPen(Qt::red), QBrush(Qt::blue));
auto * tItem = new QGraphicsTextItem(parent);
tItem->setPlainText("aAbB");
tItem->document()->setDocumentMargin(0);
view.show();
return a.exec();
}