Qt:在int变量中我想保留颜色信息

时间:2013-05-10 15:25:00

标签: c++ qt

我正在写一个俄罗斯方块。 这是我对玻璃的实施。我只想画出里面的东西。 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));
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我建议使用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))
{...}