剛剛開始想學習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只需要給出父容器中間位置即可。
原理如下圖,左對齊和右對齊原理同上。