显示每个方块作为对象的棋盘 - C ++ QT

时间:2011-08-24 21:10:22

标签: c++ qt

我是Qt的新手,但不是C ++。我正在尝试创建一个棋盘/棋盘,每个方格都是一个对象。我想弄清楚的是如何让每个方形对象成为我声明并在屏幕上显示的板对象的一部分。我可以通过在主类中使用MyWidget.show()在屏幕上显示一个小部件。但我想做一些像Board.show()这样的东西,并且让所有方形对象成为该类的成员(具有高度,宽度和颜色)。有了代码,我尝试了什么都没有出现,虽然我能够得到一个正方形,而不是在董事会班级。

的main.cpp

#include <qtgui>
#include "square.h"
#include "board.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    //Square square;
    //square.show();
    Board board;
    board.show();
    return app.exec();
}

board.h和board.cpp

#ifndef BOARD_H
#define BOARD_H

#include <QWidget>

class Board : public QWidget
{
public:
    Board();
};

#endif // BOARD_H

#include "board.h"
#include "square.h"

Board::Board()
{
    Square square;
    //square.show();
}

square.h和square.cpp

#ifndef SQUARE_H
#define SQUARE_H

#include <QWidget>

class Square : public QWidget
{
public:
    Square();

protected:
    void paintEvent(QPaintEvent *);
};

#endif // SQUARE_H

#include "square.h"
#include <QtGui>

Square::Square()
{
    QPalette palette(Square::palette());
    palette.setColor(backgroundRole(), Qt::white);
    setPalette(palette);
}

void Square::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setBrush(QBrush("#c56c00"));
    painter.drawRect(10, 15, 90, 60);
}

同样,我是Qt的菜鸟,所以我的代码猜测工作的大部分内容以及我在google上可以找到的内容。

2 个答案:

答案 0 :(得分:3)

  1. 使用QGridLayout登录
  2. 每个方块
  3. set fixed size(可能是size policy)。
  4. 将棋盘设为每个方格的父级Square square(this);)。

答案 1 :(得分:3)

代码中出现了一些问题:

  
      
  1. 您正在堆栈上创建Square对象。在里面   Board::Board()构造函数。当它离开构造函数时,会立即创建和删除该正方形。所以在堆上创建它。
  2.   
  3. 广场需要父母,所以当你创建一个正方形时   square = new Square(this);
  4.   
  5. 你的棋盘基本上是一个正方形的集合所以创建一个   董事会私人成员中的变量QVector<Square*> squaresVec   类。现在在Board()构造函数中创建尽可能多的正方形   需要并将它们插入到QGridLayout中(同时保存   squaresVec变量中的指针用于将来的目的)。然后用   this->setLayout(gridLayout);
  6.   
  7. 此外,您的方形小部件没有大小所以设置大小(简单地说   使用resize()
  8.