1

我是 Qt 的新手,我正在尝试用“活细胞”的计数器来实现康威的生命游戏——当细胞被着色时,它是活的。我想知道如何计算QTableWidget. 我的意思是我不能使用“if loop”来做到这一点,因为编译器无法转换QTableWidgetItem::backroundColorbool变量。我该怎么做?

4

2 回答 2

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 中使用不同的“核心”表示,以便正确解耦,甚至可以直接存储在数据库中,或者在基于命令行的泥浆游戏等中重用。

另外,如果另一天,您决定不根据颜色来区分,而是根据不同的图案来区分呢?

于 2014-01-04T12:29:32.853 回答
0

我个人不会QTableWidget为此目的使用,即使它可以解决问题,但这是一个巨大的开销。特别是考虑到“单元”可以有效地由位图的单个像素表示。您可以将位图像素图用于“画布”,然后将其缩放而不平滑以使像素“更大”。最重要的是,您可以直接将位图用作布尔值,它甚至比使用bool成员更有效,因为它只使用一个位来表示一个单元格是死的还是活的,这也是表的图形表示。一石二鸟。更不用说这种表示比QWidget散布在内存中的一堆沉重和肥胖的对象对缓存更友好了。

此外,通过整个表格获取活细胞计数听起来完全是浪费。您最好通过跟踪更改来跟踪计数。如果需要,您可以更改计数变量,甚至可以保留活细胞的注册表。

于 2014-01-04T12:50:50.930 回答