gpt4 book ai didi

c++ - Qt - child 设置字体中断定位

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:09 25 4
gpt4 key购买 nike

好的,所以我已经开始使用 Qt 制作游戏,这样我就可以同时学习 Qt 和 C++ :D但是,我现在遇到了一个问题。

我正在尝试使用 QGraphicsRectItem 作为容器(父)和 QGraphicsTextItem 作为文本本身(子)制作文本框。我面临的问题是 child 与 parent 的相对位置。如果我在 QGraphicsTextItem 上设置字体,定位将完全错误,因此它会流出容器。

TextBox.h:

#ifndef TEXTBOX_H
#define TEXTBOX_H

#include <QGraphicsTextItem>
#include <QGraphicsRectItem>
#include <QTextCursor>
#include <QObject>

#include <qDebug>
class TextBox: public QObject, public QGraphicsRectItem {
Q_OBJECT
public:
TextBox(QString text, QGraphicsItem* parent=NULL);

void mousePressEvent(QGraphicsSceneMouseEvent *event);

QString getText();

QGraphicsTextItem* playerText;
};

#endif // TEXTBOX_H

TextBox.cpp

#include "TextBox.h"

TextBox::TextBox(QString text, QGraphicsItem* parent): QGraphicsRectItem(parent) {
// Draw the textbox
setRect(0,0,400,100);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
brush.setColor(QColor(157, 116, 86, 255));
setBrush(brush);

// Draw the text
playerText = new QGraphicsTextItem(text, this);
int xPos = rect().width() / 2 - playerText->boundingRect().width() / 2;
int yPos = rect().height() / 2 - playerText->boundingRect().height() / 2;
playerText->setPos(xPos,yPos);
}

void TextBox::mousePressEvent(QGraphicsSceneMouseEvent *event) {
this->playerText->setTextInteractionFlags(Qt::TextEditorInteraction);
}

Game.cpp (where the code for creating the object and such is located - only included the relevant part):

// Create the playername textbox
for(int i = 0; i < players; i++) {
TextBox* textBox = new TextBox("Player 1");
textBox->playerText->setFont(QFont("Times", 20));
textBox->playerText->setFlags(QGraphicsItem::ItemIgnoresTransformations);
scene->addItem(textBox);
}

Using the default font & size for the QGraphicsTextItem:

Default font & size

Setting a font & size for the QGraphicsTextItem:

Setting a font & size

如您所见,问题是当我设置字体和大小时,文本不再位于父元素的中心。 (请不要因为糟糕的代码而对我大发雷霆,我对 Qt 和 C++ 都很陌生,我这样做只是为了学习目的)。

最佳答案

您正在调用构造函数中的 boundingRect() 方法,因此在将字体设置为其最终值之前设置位置。如果您创建一个方法来设置位置并在设置字体后调用它,或者在构造函数中设置位置之前设置字体,它应该可以工作。

关于c++ - Qt - child 设置字体中断定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891366/

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