Qt5 paintEvent не вызывается внутри QScrollArea

У меня небольшая проблема с Qt. Я пытаюсь создать 2D рисунок ячеек, с QRectперегрузкой paintEvent для пользовательского класса, который наследует QWidget и который находится внутри QScrollArea, Проблема в, paintEvent не срабатывает вообще (не при изменении размера событий, ни когда я звоню repaint() или же update()ни когда я запускаю свою программу). Вот где я перегружаю paintEvent, в GOL.cpp:

void GOL::paintEvent(QPaintEvent *) {

QPainter painter(this);

//painter.setPen(Qt::black);

int x1Rect = rectPaint.x();
int y1Rect = rectPaint.y();
int x2Rect = x1Rect + rectPaint.width();
int y2Rect = y1Rect + rectPaint.height();

int xCell;
int yCell = 0;

for (int i = 0; i < rows; i++) {

xCell = 0;

for (int j = 0; j < cols; j++) {

if (xCell <= x2Rect && yCell <= y2Rect && xCell + cellSize >= x1Rect &&
yCell + cellSize >= y1Rect) {

if (principalMatrix->get(i,j)) {

painter.fillRect(xCell, yCell, cellSize - 1, cellSize - 1, cellColourAlive);
}
else {

painter.fillRect(xCell, yCell, cellSize - 1, cellSize - 1, cellColourDead);
}
}

xCell += cellSize;
}

yCell += cellSize;
}
}

И мой макет выглядит следующим образом, в DisplayGame.cpp:

DisplayGame::DisplayGame(QWidget *parent, int threads_no, int generations, char* file_in, char* file_out) :
QWidget(parent) {

gol = new GOL(threads_no, generations, file_in, file_out);

QHBoxLayout *title = setupTitle();
QHBoxLayout *buttons = setupButtons();
QVBoxLayout *layout = new QVBoxLayout();
scrlArea = new QScrollArea;
scrlArea->setWidget(gol);
layout->addLayout(title);
layout->addWidget(scrlArea);
layout->addLayout(buttons);
setLayout(layout);
}

Я, честно говоря, понятия не имею, почему он ничего не рисует. Есть идеи?

0

Решение

Я исправил это, изменив следующим образом:

DisplayGame::DisplayGame(QWidget *parent, int threads_no, int generations, char* file_in, char* file_out) :
QWidget(parent) {

gol = new GOL(this, threads_no, generations, file_in, file_out);

QSize *adjustSize = new QSize(gol->cellSize, gol->cellSize); //QSize object that is as big as my QRect matrix
adjustSize->setWidth(gol->cellSize * gol->rows);
adjustSize->setHeight(gol->cellSize * gol->cols);
gol->setMinimumSize(*adjustSize);

QVBoxLayout *layout = new QVBoxLayout;

QHBoxLayout *title = setupTitle();
layout->addLayout(title);

QHBoxLayout *buttons = setupButtons();
layout->addLayout(buttons);

QPalette pal(palette()); //Setting the background black, so the white spaces between QRect items cannot be seen (though I could have modified the margins?)
pal.setColor(QPalette::Background, Qt::black);

scrlArea = new QScrollArea(this);
scrlArea->setAutoFillBackground(true);
scrlArea->setPalette(pal);
scrlArea->setWidget(gol);

layout->addWidget(scrlArea);

setLayout(layout);
}

И я оставил paintEvent, как это было. В конечном итоге это была проблема размера, как сказал AlexanderVX.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]