1

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

1 回答 1

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))
{...}
于 2013-05-10T15:39:53.197 回答