Qt:在一个int变量,我想保持颜色信息

Qt: in an int variable i want to keep colour information

本文关键字:信息 颜色 变量 int 一个 Qt      更新时间:2023-10-16

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

如果你决定这样做,成员声明必须被"拆分":

QVector< QVector<QColor> > glass_array;

然后初始化构造函数:

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