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