Я использую QTableView для реализации интерактивной настольной игры.Изображения должны отображаться в ячейках таблицы.Я использую QStyledItemDelegate с функцией рисования для рисования изображений внутри ячеек таблицы.
Поскольку изображения должны отображаться только в определенных ячейках таблицы и обновляться, когда пользователь нажимает на ячейку таблицы, используется массив double int, который имеет те же размеры, что и таблица.В зависимости от значений массива, художник должен рисовать изображения в определенных ячейках таблицы.Первоначально в 4 ячейках таблицы есть только 4 изображения, и, когда пользователь нажимает на ячейку таблицы, массив обновляется, что должно означать, что то, что нарисовано и отображено внутри ячеек таблицы, должно быть изменено.
Обычно пользователь нажимает на пустую (белую) ячейку, которая успешно обновляется, и в ячейке отображается конкретное изображение.Однако, если есть другие ячейки, которые содержат изображение и должны быть обновлены, обновление не отображается, хотя массив double int обновляется.Я также увидел странную вещь: когда я щелкаю по ячейкам, в которых их отображение должно было быть обновлено, происходит обновление.Это, конечно, происходит независимо от того, как я обновляюсь, когда кто-то нажимает на ячейку.
Я пытался сначала стереть то, что находится внутри ячейки, перед перерисовкой, но она все еще не работает.Работает ли делегат непрерывно в потоке, а функция живописца вызывается с индексом каждой ячейки в таблице?Я не понимаю, как обновление в ячейке, содержащей изображение, не обновляется автоматически, хотя художник должен был перерисовать область ячейки, и это происходит только после того, как был сделан щелчок по ячейке.Или, конечно, каждый раз к функции художника обращается новый художник?!
Ну, вот моя реализация функции делегата художника:
void Sphere::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if(tb1[index.row()][index.column()] == 1)
{
QImage Q1("Red Sphere.jpg");
QRectF source(0.0, 0.0, 72.0, 70.0);
painter->eraseRect(option.rect);
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
painter->drawImage(option.rect, Q1, source);
}
else if(tb1[index.row()][index.column()] == 2)
{
QImage Q1("Blue Sphere.jpg");
QRectF source(0.0, 0.0, 72.0, 70.0);
painter->eraseRect(option.rect);
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
painter->drawImage(option.rect, Q1, source);
}
else
{
painter->eraseRect(option.rect);
QStyledItemDelegate::paint(painter, option, index);
}
}
Я могу дать вам любойбольше информации, если вам нужно решить мою проблему.Заранее спасибо.