c++ - Qt:在一个 int 变量中我想保留颜色信息

标签 c++ qt

我正在写俄罗斯方 block 。 这是我对玻璃的实现。我只想画出里面的东西。 Int 表示一种颜色 (int glass_array[10][22];)。

现在我想了解如何使用这些颜色。出于学习目的,我创建了两个 立方体并希望它们具有不同的颜色。说,红色和绿色。但事实证明它们都是蓝色的。

你能帮帮我吗?

QtGlass.h

class QtGlass : public QFrame {
    Q_OBJECT

public:
    void paintEvent(QPaintEvent * event);
    QtGlass(QWidget *parent);
    bool key_pressed;
    void keyPressEvent(QKeyEvent* event);
protected:
    void glassRedraw(QPainter &painter);
    int glass_array[10][22];
};

QtGlass.cpp

QtGlass::QtGlass(QWidget *parent): QFrame(parent) {

    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 22; j++) {
            glass_array[i][j] = 0; //0 - Default color (grey);
        }
    }

    for (int i = 8; i < 10; i++) {
        for (int j = 20; j < 22; j++) {
            glass_array[i][j] = QColor(Qt::green).value(); // green 
        }
    }
    for (int i = 0; i < 2; i++) {
        for (int j = 20; j < 22; j++) {
            glass_array[i][j] = QColor(Qt::red).value(); // red 
        }
    }    
}




void QtGlass::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    Figure Falcon;

    glassRedraw(painter);
    painter.setPen(QPen(Qt::red, 4));

    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 22; j++) {
            if (glass_array[i][j] > 0) {
                painter.fillRect(i* 31+ 1, j * 31 + 1, 29, 29,
                        QBrush(QColor(glass_array[i][j]), Qt::SolidPattern));
            }
        }
    }
}

最佳答案

我建议您使用 Qt 提供的一些 C++ 功能:

如果声明QVector< QVector<QColor> > glass_array;你会得到更多的安全:例如,在这个声明之后

QVector< QVector<QColor> > glass_array(10, QVector<QColor>(22));
glass_array[9][21] = Qt::red;  // this is OK
// this causes 
// ASSERT failure in QVector<T>::operator[]: "index out of range", file ../../QtSDK/Desktop/Qt/4.8.1/gcc/include/QtCore/qvector.h, line 359
glass_array[9][22] = Qt::blue;

如果您决定采用这种方式,则该成员声明必须“拆分”:在 QtGlass 类中声明

QVector< QVector<QColor> > glass_array;

然后在构造函数中初始化:

QtGlass::QtGlass(QWidget *parent):
   QFrame(parent),
   glass_array(10, QVector<QColor>(22))
{...}

关于c++ - Qt:在一个 int 变量中我想保留颜色信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485644/

相关文章:

c++ - 什么是 C++ 中的可追踪指针?

javascript - QT:Javascript 执行缓慢(除非我登录到控制台)

c++ - 我可以使用 Qt 线程 ID 为每个线程创建唯一的缓存吗?

c++ - Qt:当你没有子类化 QThread 时如何清理它?

c++ - 模板中的三元运算符评估规则不同?

c++ - 是否可以遍历结构或类中的所有元素?

c++ - 不能对 void 指针使用指针运算,那么 void 指针数组是如何工作的呢?

具有复杂结构的 C++ 初始化列表

qt - Qt中gluLookAt的头文件是什么?

c++ - QTcpSocket的write()方法为什么不能发送数据?