Я вложил в подкласс QGraphicsLineItem для дополнительной информации. Основная часть выглядит следующим образом:
struct GridLine : public QGraphicsLineItem{
GridLine(unsigned int index, QGraphicsItem* parent) : QGraphicsLineItem(parent), index(index){}
void resize(int windowWidth, int windowHeight) override{
const auto [x1, y1, x2, y2] = calculatePos(windowWidth, windowHeight);
setLine(x1, y1, x2, y2);
}
private:
const int index;
};
Для упрощения предположим, что Calculate Pos () возвращает {0, 0, windowWidth, windowHeight}
. Элементы GridLine хранятся в QGraphicsItemGroup, созданной scene.createItemGroup(QList<QGraphicsItem*>())
, откуда к ним обращается метод childItems()
.
Иногда, когда вызывается removeFromGroup()
, чтобы удалить элемент, и элемент добавляется с помощью:
itemGroup->addToGroup(new GridLine(index, itemGroup));
Я сталкиваюсь с проблемой, когда перебор всех элементов и изменение их размера до нового размера, например
for(auto* item : itemGroup->childItems()){
if(auto* gridLine = dynamic_cast<GridLine*>(item){
gridLine->resize(100, 100);
}
}
, не изменяет размеры всех элементов, особенно самых новых, иногда они застряли с размером от предыдущего изменения размера. Вызов boundingRect()
для каждой строки возвращает правильный размер, который был установлен resize()
.
Как я могу принудительно установить новый размер для моих элементов GridLine или обновить sh, чтобы он отображался с заданным размером?