【问题标题】:QT : QGraphicsTextItem alignment char to top-left cornerQT:QGraphicsTextItem对齐字符到左上角
【发布时间】:2018-08-15 00:57:29
【问题描述】:

我想绘制一个与父级左上角对齐的字符。

QGraphicsTextItem * tItem = new QGraphicsTextItem(parent);
tItem->setPlainText("a"); 
tItem->setPos(QPointF(0,0));

下图展示了我的代码输出(灰色矩形是 QGraphicsTextItem 的父级)

结果:

我想得到这样的结果:

我的梦想结果:

我尝试使用 Qt::AlignLeft 和 Qt::AlignTop 但无济于事。

【问题讨论】:

    标签: qt position alignment qgraphicstextitem


    【解决方案1】:

    解决办法是用setDocumentMargin(0)QTextDocument,如果你只放字母“a”似乎不是解决办法,因为似乎有垂直偏移,但实际上它不是偏移,但大写字母的高度更高。

    例子:

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

    【讨论】:

    • 感谢您的帮助。对我来说,解决方案是使用 QGraphicsSimpleTextItem 并按 QFontMetricsF::tightBoundingRect / QFontMetricsF::boundingRect 计算的值进行翻译。
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多