刚刚开始想学习Qt,不是很了解,做居中操作的时候看了很多大佬的写法不是非常理解,这里按照自己的理解写的比较简单的实现,具体需要boundingRect()函数获取宽度信息,就可以以给定参数定位。
二话不说,先上代码:
QGraphicsTextItem* MainWindow::createTextItem(QString text, int fontSize, int alignState, QPointF pos)
{
/*
0 ------- align left
1 ------- align center
2 ------- align right
*/
QGraphicsTextItem *item = new QGraphicsTextItem(text);
item->setFont(QFont("宋体", fontSize));
qreal width = item->boundingRect().width();
if(alignState == 1)
{
item->setPos(pos.x() - width / 2, pos.y());
qDebug() << item->textWidth();
return item;
}else if(alignState == 2)
{
item->setPos(pos.x() - width, pos.y());
return item;
}else // default is align left
{
item->setPos(pos);
return item;
}
}
用法非常简单。传入的pos表示定位,alignState表示以什么情况定位。如果是居中定位,则定位pos只需要给出父容器中间位置即可。
原理如下图,左对齐和右对齐原理同上。
如果理解,欢迎直接copy,同时默念,cv大法好,cv大法保平安,cv大法早下班