2013-05-10 96 views
1

我在写俄罗斯方块。 这是我对玻璃的实施。我只是想画出它里面的东西。 Int表示颜色(int glass_array [10] [22];)。Qt:在一个int变量中,我想保留颜色信息

现在我想知道如何使用这些颜色。为了学习目的,我创建了两个 立方体,并希望它们具有不同的颜色。说,红色和绿色。但他们都变成了蓝色。

你能帮我吗?

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)); 
      } 
     } 
    } 
} 
+2

为什么不'的QColor glass_array [10] [22];'? – CapelliC 2013-05-10 15:30:47

+0

我想他想保留内存使用情况,我想他没有做对。保持它们为QColor将使他无法创建和销毁每个绘画事件中的QColor对象:D – 2013-05-10 15:33:04

回答

0

我会建议使用一些C++的功率使用Qt把你的处置:

如果你声明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)) 
{...} 
+0

如上所述,QColor类型的数组完美地工作。你能否澄清一下你的方法是什么? – Trts 2013-05-10 15:56:16

+0

支持索引检查 - 在调试时,正如我在超出边界时显示的那样 – CapelliC 2013-05-10 17:59:20