Я новичок в Qt и пытаюсь реализовать игру жизни Конвея со счетчиком «живых клеток» — клетка жива, когда она окрашена.
Мне интересно, как я могу посчитать количество цветных клеток в QTableWidget
,
Я имею в виду, что я не могу сделать это, используя цикл if, потому что компилятор не может конвертировать QTableWidgetItem::backroundColor
в bool
переменная. Как мне это сделать?
компилятор не может преобразовать 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;
Предоставив код для того, что вы хотите, я бы предложил пересмотреть этот дизайн в будущем.
Я бы использовал другое «базовое» представление с пользовательским интерфейсом, чтобы он был должным образом отделен и мог даже сохраняться в базе данных напрямую или повторно использоваться в грязной игре на основе командной строки, и др.
Кроме того, что если в другой день вы решите не делать различий по цвету, а по разным рисункам?
Я бы лично не пользовался QTableWidget
для этой цели, даже если это может сработать, это огромные накладные расходы. Особенно с учетом того, что «ячейка» может быть эффективно представлена одним пикселем растрового изображения. Вы можете использовать растровое растровое изображение для «холста», а затем нарисовать его масштабированным без сглаживания, чтобы сделать пиксели «больше». И что лучше всего, вы можете использовать растровое изображение непосредственно как значение bool, и оно будет даже более эффективным, чем использование bool
член, поскольку он будет использовать только один бит, чтобы указать, мертвая или живая ячейка, что также будет графическим представлением таблицы. 2 птицы одним камнем. Не говоря уже о том, насколько более дружественным к кешу будет это представление, чем куча тяжелых и толстых QWidget
основанные объекты разбросаны в памяти.
Кроме того, прохождение всей таблицы, чтобы получить количество живых клеток, звучит как пустая трата. Вы бы лучше отслеживать количество, отслеживая изменения. Вы можете изменить переменную count или даже вести реестр с живыми клетками, если это необходимо.