我想创建一个QGraphicsRectItem并使用QGraphicsSimpleTextItem显示其名称。我希望文本的大小不受缩放的影响。我还希望文本的位置集中在QGraphicsRectItem上。
这是我到目前为止的尝试:
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QPen>
#include <QWheelEvent>
#include <cmath>
#include <QDebug>
class MainView : public QGraphicsView {
public:
MainView(QGraphicsScene *scene) : QGraphicsView(scene) { setBackgroundBrush(QBrush(QColor(255, 255, 255)));}
protected:
void wheelEvent(QWheelEvent *event) {
double scaleFactor = pow(2.0, event->delta() / 240.0);
scale(scaleFactor, scaleFactor);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene;
scene.setSceneRect(0, 0, 800, 800);
QGraphicsRectItem* rectItem = new QGraphicsRectItem(QRectF(0, 0, 400, 200));
rectItem->setPos(200, 200);
rectItem->setBrush(QColor(255, 0, 0));
scene.addItem(rectItem);
QGraphicsSimpleTextItem *nameItem = new QGraphicsSimpleTextItem("name", rectItem);
QFont f = nameItem->font();
f.setPointSize(12);
nameItem->setFont(f);
nameItem->setFlag(QGraphicsItem::ItemIgnoresTransformations);
nameItem->setPos(rectItem->rect().center());
MainView view(&scene);
view.show();
return a.exec();
}
不幸的是你可以看到:on捕获当我取消缩放(在右边)时,文本不会留在矩形内。
如何将文本保留在矩形内并居中?谢谢。
我还希望文本的位置集中在QGraphicsRectItem上
你所看到的是正确的,因为你正在缩放QGraphicsView
的左上角,文本项目放在矩形的中心。
如果你缩小你的QGraphicsRectItem
的中心,你会看到文本将保持在rect的中心位置。
另一种看待这种情况的方法是将文本放在矩形的左上角。您会注意到,当您在此处缩放时,文本将显示正确,直到它不再适合矩形。
继续缩放,你会看到文本的左上角仍然在中心,但由于文本不服从变换,它被推到外面
可能看起来文本的左上角位于矩形下方,但文本的边界矩形需要考虑重音(例如è)。
因此,通过使文本位于rect的中心而不是左上角,文本在rect之外的外观会加剧。
一旦你缩小到目前为止,矩形的变换处理点大小的一小部分,但非变换文本不受影响,因此像素的0.6和0.9之间的差异是无关紧要的,并且将是位于同一像素。
你需要考虑你想要实现的目标。是否真的有必要缩放到这个范围,还是可以将其限制在某一点以外,你不会注意到这个问题?