Qt — дети устанавливают позиционирование разрывов шрифта

Итак, я начал создавать игру с использованием Qt, чтобы я мог одновременно изучать и Qt, и C ++: D
Тем не менее, я застрял с проблемой на данный момент.

Я пытаюсь сделать текстовое поле, используя QGraphicsRectItem как контейнер (родитель), и QGraphicsTextItem как сам текст (ребенок). Проблема, с которой я сталкиваюсь, — это относительное положение ребенка по отношению к родителю. Если я установлю шрифт на 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 (где находится код для создания объекта и тому подобное — включена только соответствующая часть):

// 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);
}

Использование шрифта по умолчанию & размер для QGraphicsTextItem:

Стандартный шрифт & amp; размер

Установка шрифта & размер для QGraphicsTextItem:

Установка шрифта & amp; размер

Проблема, как вы можете видеть, заключается в том, что когда я устанавливаю шрифт и размер, текст больше не находится в центре родительского элемента. (Пожалуйста, не пускай меня в ад за плохой код, я очень плохо знаком с Qt и C ++ и делаю это только для целей обучения).

1

Решение

Вы звоните boundingRect() метод в конструкторе, поэтому позиция устанавливается до того, как шрифт устанавливается в его окончательное значение. Если вы либо создаете метод для установки позиции и вызываете его после установки шрифта, либо устанавливаете шрифт перед установкой позиции в конструкторе, он должен работать.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]