刚刚开始想学习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只需要给出父容器中间位置即可。
原理如下图,左对齐和右对齐原理同上。