Отображение шахматной доски с каждым квадратом в качестве объекта - C ++ QT - PullRequest
4 голосов
/ 25 августа 2011

Я новичок в 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 ]

3 голосов
/ 25 августа 2011

Несколько ошибок в коде:

  1. Вы создаете объект Square в стеке.в конструкторе Board::Board().Квадрат создается и удаляется сразу же после выхода из конструктора.Так что создайте его в куче.
  2. Квадрату нужен родитель, поэтому, когда вы создаете квадрат, делайте
    square = new Square(this);
  3. Ваша доска - это в основном набор квадратов, поэтому создайте переменную QVector<Square*> squaresVec в частных членах совета класса.Теперь в конструкторе Board () создайте столько квадратов, сколько необходимо, и вставьте их в QGridLayout (одновременно сохраните указатели в переменной squaresVec для будущих целей).Затем используйте this->setLayout(gridLayout);
  4. Кроме того, ваш квадратный виджет не имеет размера, поэтому установите размер (просто используйте resize())
3 голосов
/ 25 августа 2011
  1. используйте QGridLayout для платы
  2. установите фиксированный размер для каждого квадрата (и может быть политика размера ).
  3. установить доску в качестве родителя для каждого квадрата (Square square(this);).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...