SetLine QGraphicsLineItem не обновляет sh строку - PullRequest
0 голосов
/ 03 марта 2020

Я вложил в подкласс 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, чтобы он отображался с заданным размером?

...