Хорошо, поэтому я начал делать игру с использованием Qt, чтобы одновременно изучить как Qt, так и C++: D Однако в настоящий момент я застрял в проблеме ,Qt - дети устанавливают разрывы шрифтов позиционирования
Я пытаюсь сделать текстовое поле с использованием 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
:
Установка шрифт & размера для
QGraphicsTextItem
:
Проблема, как вы можете видеть, является то, что, когда я установил шрифт и размер, текст больше не находится в центре родительского элемента. (Пожалуйста, не развязывай мне ад для плохого кода, я очень новичок в Qt и C++, и я делаю это только для обучения).
С стилистической точки зрения, не наследуйте от QObject или не добавляйте макрос Q_OBJECT, если они вам не нужны. Они добавляют лишние накладные расходы. – RobbieE
RobbieE, классу может понадобиться сигнал/слот позже, поэтому я решил добавить его, чтобы я не забыл его. Если он не используется, я удалю QObject: P – Kodemikkel