gpt4 book ai didi

c++ - 缩放时保持 QGraphicsSimpleTextItem 居中

转载 作者:行者123 更新时间:2023-11-30 05:04:04 24 4
gpt4 key购买 nike

我想创建一个 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();
}

不幸的是你可以看到:enter image description here在我取消缩放(在右侧)时捕获的文本不会留在矩形内。

如何让文字保持在矩形内并居中?谢谢。

最佳答案

I also want the position of the text to be centered on the QGraphicsRectItem

您看到的是正确的,因为您正在缩放 QGraphicsView 的左上角并且文本项位于矩形的中心。

如果围绕 QGraphicsRectItem 的中心进行缩放,您会看到文本将保持其在矩形中心的位置。

另一种查看方式是将文本放置在矩形的左上角。您会注意到,当您在此处缩放时,文本将显示正确,直到它不再适合矩形。

enter image description here

继续缩放,你会看到文本的左上角仍然在中心,但由于文本不服从变换,它被推到了外面

enter image description here

文本的左上角可能看起来在矩形下方,但文本的边界矩形考虑了重音符号(例如 è)。

因此,通过将文本放置在矩形的中心而不是左上角,文本在矩形之外的外观会恶化。

一旦你缩小到现在,矩形的变换处理的是点大小的分数,但未变换的文本不受影响,因此像素的 0.6 和 0.9 之间的差异是无关紧要的并将位于同一像素。

您需要考虑要实现的目标。是否真的有必要缩放到那个程度,或者您可以将其限制在某个点之外,您不会注意到这个问题吗?

关于c++ - 缩放时保持 QGraphicsSimpleTextItem 居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49112700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com