C++ Qt计数彩色细胞

C++ Qt计数彩色细胞,c++,qt,qtablewidget,qtgui,qtablewidgetitem,C++,Qt,Qtablewidget,Qtgui,Qtablewidgetitem,我是Qt新手,我正试图用“活细胞”计数器来实现康威的生命游戏——当细胞着色时,它是活的。 我想知道如何计算QTableWidget中彩色单元格的数量。 我的意思是,我不能使用“if loop”来实现它,因为编译器无法将QTableWidgetItem::backroundColor转换为bool变量。我怎么做 编译器无法将QTableWidgetItem::backroundColor转换为bool变量 首先,班上没有这样的成员 此外,您还没有显示backgroundColor的具体数据类型,因

我是Qt新手,我正试图用“活细胞”计数器来实现康威的生命游戏——当细胞着色时,它是活的。 我想知道如何计算
QTableWidget
中彩色单元格的数量。 我的意思是,我不能使用“if loop”来实现它,因为编译器无法将
QTableWidgetItem::backroundColor
转换为
bool
变量。我怎么做

编译器无法将QTableWidgetItem::backroundColor转换为bool变量

首先,班上没有这样的成员

此外,您还没有显示backgroundColor的具体数据类型,因此我假设它是QColor而不是QString,等等

在这种情况下,例如,这两种
QColor
方法将有助于您的工作:

这是一个重载函数

使用颜色值color构造新颜色

和下列操作员:

如果此颜色的RGB和alpha值与颜色相同,则返回true;否则返回false

你可以这样写:

const QColor redColor = QColor(Qt::red); // constant, initialized once
QBrush tableWidgetItemBrush = tableWidgetItem->background();
if (tableWidgetItemBrush.color() == redColor)
    ++livingCells;
然后你会做这样的比较:

const QColor redColor = QColor(Qt::red); // constant, initialized once
QBrush tableWidgetItemBrush = tableWidgetItem->background();
if (tableWidgetItemBrush.color() == redColor)
    ++livingCells;
提供了您希望的代码后,我建议将来重新考虑此设计

我会在UI中使用不同的“核心”表示,这样它就可以适当地解耦,甚至可以直接存储在数据库中,或者在基于命令行的mud游戏中重用,等等


另外,如果有一天,你决定不根据颜色而根据不同的图案来改变,那会怎么样?

我个人不会为此使用
QTableWidget
,即使它可以做到这一点,这也是一个巨大的开销。特别是考虑到“单元”可以有效地由位图的单个像素表示。您可以将位图pixmap用于“画布”,然后在不进行平滑的情况下按比例绘制,以使像素“更大”。最重要的是,您可以直接使用位图作为bool值,它甚至比使用
bool
成员更有效,因为它只使用一个位来表示单元格是死的还是活的,这也是表的图形表示。一石二鸟。更不用说,这种表示方式比散落在内存中的一堆重而胖的
QWidget
对象更便于缓存


而且,翻阅整张桌子来获取活细胞计数听起来完全是浪费。你最好通过跟踪变化来跟踪计数。如果需要,您可以更改计数变量,甚至可以保留一个包含活细胞的注册表。

我想说,您必须认真重新考虑图形表示策略。同意,您应该使用isLive布尔数据表示,而不是使其紧跟颜色。如果有一天,你决定不根据颜色而改变,而是根据不同的图案,比如单元格中的网格,等等,会怎么样?