LINUX.ORG.RU

[Qt] рисование

 


0

1

Доброго времени суток ЛОР. Есть класс SQuare основнанный на QWidget. Он отвечает за отрисовку прямоугольников 8х8, вобщем доски на подобии шахмат. Вся отрисовка происходит в:

void Square::paintEvent(QPaintEvent *)

Теперь мне нужно отловить кликание мыши по какому-либо прямоугольнику и после того как кликнули мышью нарисовать линию в этом прямоугольнике.

Делаю:

void Square::mousePressEvent(QMouseEvent *e)
{
    if (e->button() == Qt::LeftButton)
    {
        fields[(int)(e->x() / 40)][(int)(e->y() / 40)].checked = TRUE;
        this->repaint();
    }
}

fields - здесь массив прямоугольников 8x8. Отлавливать получается, но после того как произошло кликание ничего не рисуется.

В

void Square::paintEvent(QPaintEvent *)

есть следующий код:

if (fields[1][1].checked  == TRUE)
{
    painter_elipse.drawLine(1,1,20,20);
}

Допустим я запускаю программу, кликаю по прямоугольнику с индексом 1x1 , но ничего не происходит. Подскажите как быть. Как рисовать с помощью QPainter или еще чего по кликанию? Спасибо.


А точно fields[(int)(e->x() / 40)][(int)(e->y() / 40)].checked = TRUE; срабатывает? Т.е. находится поле по координатам?

panter_dsd ★★★★
()

Точно ли при (checked == TRUE) отрисовывается что-то отличное от случая с FALSE?

unC0Rr ★★★★★
()

Я уверен, что вы не забыли о том, что массивы начинают свою нумерацию с 0. Но на всякий случай проверьте.

anonymous
()

1) используй отладочную печать: qDebug() << Q_FUNC_INFO << ...

2) правильно писать true, TRUE - это макрос, он может быть переопределен

3) кучу виджетов заводить для подобного дела - это расточительство, хватило бы и одного

смотри в сторону QGraphicsView/QGraphicsScene, когда допилишь

dt1 ★★
()
Ответ на: комментарий от panter_dsd

>А точно fields[(int)(e->x() / 40)][(int)(e->y() / 40)].checked = TRUE; срабатывает? Т.е. находится поле по координатам?

Действительно проблема была в этом.

Всем спасибо.

shk
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.