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();
}

Другие вопросы по тегам