我是 Qt 的新手,我正在尝试用“活细胞”的计数器来实现康威的生命游戏——当细胞被着色时,它是活的。我想知道如何计算QTableWidget
. 我的意思是我不能使用“if loop”来做到这一点,因为编译器无法转换QTableWidgetItem::backroundColor
为bool
变量。我该怎么做?
2 回答
编译器无法将 QTableWidgetItem::backroundColor 转换为 bool 变量。
首先,类中没有这样的成员。
此外,您还没有显示 backgroundColor 的具体数据类型,所以我假设它是 QColor 而不是 QString,等等。
在这种情况下,例如这两种QColor
方法将有助于您的工作:
QColor::QColor(Qt::GlobalColor 颜色)
这是一个过载功能。
构造颜色值为 color 的新颜色。
和以下运算符:
bool QColor::operator==(const QColor & color) const
如果此颜色与颜色具有相同的 RGB 和 alpha 值,则返回 true;否则返回假。
所以,你可以这样写:
const QColor redColor = QColor(Qt::red); // constant, initialized once
然后你会像这样进行比较:
QBrush tableWidgetItemBrush = tableWidgetItem->background();
if (tableWidgetItemBrush.color() == redColor)
++livingCells;
提供了您想要的代码后,我建议将来重新考虑这种设计。
我会在 UI 中使用不同的“核心”表示,以便正确解耦,甚至可以直接存储在数据库中,或者在基于命令行的泥浆游戏等中重用。
另外,如果另一天,您决定不根据颜色来区分,而是根据不同的图案来区分呢?
我个人不会QTableWidget
为此目的使用,即使它可以解决问题,但这是一个巨大的开销。特别是考虑到“单元”可以有效地由位图的单个像素表示。您可以将位图像素图用于“画布”,然后将其缩放而不平滑以使像素“更大”。最重要的是,您可以直接将位图用作布尔值,它甚至比使用bool
成员更有效,因为它只使用一个位来表示一个单元格是死的还是活的,这也是表的图形表示。一石二鸟。更不用说这种表示比QWidget
散布在内存中的一堆沉重和肥胖的对象对缓存更友好了。
此外,通过整个表格获取活细胞计数听起来完全是浪费。您最好通过跟踪更改来跟踪计数。如果需要,您可以更改计数变量,甚至可以保留活细胞的注册表。