刚刚开始想学习Qt,不是很了解,做居中操作的时候看了很多大佬的写法不是非常理解,这里按照自己的理解写的比较简单的实现,具体需要boundingRect()函数获取宽度信息,就可以以给定参数定位。
二话不说,先上代码:
1 QGraphicsTextItem* MainWindow::createTextItem(QString text, int fontSize, int alignState, QPointF pos)
2 {
3 /*
4 0 ------- align left
5 1 ------- align center
6 2 ------- align right
7 */
8
9 QGraphicsTextItem *item = new QGraphicsTextItem(text);
10 item->setFont(QFont("宋体", fontSize));
11 qreal width = item->boundingRect().width();
12
13 if(alignState == 1)
14 {
15 item->setPos(pos.x() - width / 2, pos.y());
16 qDebug() << item->textWidth();
17 return item;
18 }else if(alignState == 2)
19 {
20 item->setPos(pos.x() - width, pos.y());
21 return item;
22 }else // default is align left
23 {
24 item->setPos(pos);
25 return item;
26 }
27
28 }
用法非常简单。传入的pos表示定位,alignState表示以什么情况定位。如果是居中定位,则定位pos只需要给出父容器中间位置即可。
原理如下图,左对齐和右对齐原理同上。