Qt — подсчет цветных клеток

Я новичок в Qt и пытаюсь реализовать игру жизни Конвея со счетчиком «живых клеток» — клетка жива, когда она окрашена.
Мне интересно, как я могу посчитать количество цветных клеток в QTableWidget,
Я имею в виду, что я не могу сделать это, используя цикл if, потому что компилятор не может конвертировать QTableWidgetItem::backroundColor в bool переменная. Как мне это сделать?

1

Решение

компилятор не может преобразовать QTableWidgetItem :: backroundColor в переменную bool.

Прежде всего, нет такого члена класса.

Кроме того, вы не указали конкретный тип данных backgroundColor, поэтому я предполагаю, что это QColor, а не QString, и др.

В этом случае, например, эти два QColor методы помогут вашей работе:

QColor :: QColor (Qt :: GlobalColor color)

Это перегруженная функция.

Создает новый цвет со значением цвета.

и следующий оператор:

bool QColor :: operator == (const QColor & цвет) const

Возвращает true, если этот цвет имеет те же значения RGB и альфа, что и цвет; в противном случае возвращает false.

Итак, вы можете написать что-то вроде этого:

const QColor redColor = QColor(Qt::red); // constant, initialized once

и тогда вы бы сравнили вот так:

QBrush tableWidgetItemBrush = tableWidgetItem->background();
if (tableWidgetItemBrush.color() == redColor)
++livingCells;

Предоставив код для того, что вы хотите, я бы предложил пересмотреть этот дизайн в будущем.

Я бы использовал другое «базовое» представление с пользовательским интерфейсом, чтобы он был должным образом отделен и мог даже сохраняться в базе данных напрямую или повторно использоваться в грязной игре на основе командной строки, и др.

Кроме того, что если в другой день вы решите не делать различий по цвету, а по разным рисункам?

2

Другие решения

Я бы лично не пользовался QTableWidget для этой цели, даже если это может сработать, это огромные накладные расходы. Особенно с учетом того, что «ячейка» может быть эффективно представлена ​​одним пикселем растрового изображения. Вы можете использовать растровое растровое изображение для «холста», а затем нарисовать его масштабированным без сглаживания, чтобы сделать пиксели «больше». И что лучше всего, вы можете использовать растровое изображение непосредственно как значение bool, и оно будет даже более эффективным, чем использование bool член, поскольку он будет использовать только один бит, чтобы указать, мертвая или живая ячейка, что также будет графическим представлением таблицы. 2 птицы одним камнем. Не говоря уже о том, насколько более дружественным к кешу будет это представление, чем куча тяжелых и толстых QWidget основанные объекты разбросаны в памяти.

Кроме того, прохождение всей таблицы, чтобы получить количество живых клеток, звучит как пустая трата. Вы бы лучше отслеживать количество, отслеживая изменения. Вы можете изменить переменную count или даже вести реестр с живыми клетками, если это необходимо.

0

По вопросам рекламы [email protected]