Я хочу создать макет сетки с текстовыми элементами, и я хочу, чтобы этот макет обновлялся после добавления текста в текстовый элемент, но это не работает.Вот фрагмент моего исходного кода:
MyItem::MyItem(const QString &text, QGraphicsLayout* layout, QGraphicsItem *parent):
QGraphicsLayoutItem(),
QGraphicsTextItem(parent),
mLayout(layout)
{
setGraphicsItem(this);
setHtml(text);
setFlag(QGraphicsItem::ItemIsSelectable, true);
}
void MyItem::setGeometry(const QRectF &geom)
{
prepareGeometryChange();
QGraphicsLayoutItem::setGeometry(geom);
setPos(geom.topLeft());
}
QSizeF MyItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
{
return boundingRect().size();
}
void MyItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if (event->button() == Qt::LeftButton && textInteractionFlags() == Qt::NoTextInteraction) {
setTextInteractionFlags(Qt::TextEditorInteraction);
}
QGraphicsTextItem::mousePressEvent(event);
}
void MyItem::focusOutEvent(QFocusEvent *event)
{
setTextInteractionFlags(Qt::NoTextInteraction);
auto cursor = textCursor();
cursor.clearSelection();
setTextCursor(cursor);
QGraphicsTextItem::focusOutEvent(event);
}
void MyItem::keyPressEvent(QKeyEvent *event)
{
QGraphicsTextItem::keyPressEvent(event);
qDebug() << boundingRect();
updateGeometry();
mLayout->activate();
}
В результате, когда я добавляю текст к текстовому элементу и его ширина увеличивается, следующая ячейка не перемещается, чтобы создать место для первой ячейки:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
auto scene = new QGraphicsScene;
auto layout = new QGraphicsGridLayout;
auto t1 = new MyItem("cell1", layout);
layout->addItem(t1, 0, 0);
auto t2 = new MyItem("cell2", layout);
layout->addItem(t2, 0, 1);
auto container = new QGraphicsWidget;
container->setLayout(layout);
scene->addItem(container);
auto view = new QGraphicsView(scene);
setCentralWidget(view);
resize(800, 600);
}