У меня небольшая проблема с 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);
}
Честно говоря, я понятия не имею, почему он ничего не рисует. Любые идеи?
rows
иcols
, которые записываются вfile_in
.file_in
читается, а значенияrows
иcols
известны до события рисования (file_in
читается в конструкторе GOL, а в конце конструктора я вызываюrepaint()
/update()
для отображения ячеек). - person apfelin   schedule 14.01.2016scrlArea->setWidgetResizable(true)
послеscrlArea->setWidget(gol)
, но теперь, когда окно создано, оно меньше своего содержимого, и полосы прокрутки не появляются. - person apfelin   schedule 14.01.2016