Линейное рисование свободной рукой на картинке с использованием QT [закрыто]

StackOverflow https://stackoverflow.com//questions/10701357

  •  13-12-2019
  •  | 
  •  

Вопрос

Я хочу создать событие при нажатии кнопки, программа должна позволять рисовать линии свободной рукой, используя указатель мыши на картинке.В настоящее время я нахожусь на той стадии, когда могу показать альбом фотографий в окне вкладки.Кто-нибудь может помочь с этим, предоставив какие-нибудь рекомендации или подсказки???

Это было полезно?

Решение

Вот пример того, как рисовать движениями мыши:

http://qt-project.org/doc/qt-4.8/widgets-scribble.html

Другие советы

Боюсь, ваш вопрос довольно широк.Я бы посоветовал провести некоторое исследование того, чего вы хотите достичь, возможно, посмотреть, как другие люди решили ту же проблему.Вы получите максимальную отдачу от SO, используя его скорее как ресурс для ответов на конкретные вопросы.

Тем не менее, вот пара вещей, на которые вы могли бы обратить внимание:

QGraphicsScene:Поверхность, которая может содержать большое количество объектов 2D-графики (т.е.линии, которые вы разрешите рисовать пользователю)

QGraphicsSceneMouseEvent:Событие, которое вам нужно перехватить и обработать, чтобы получить ввод от мыши в вашу сцену.Вы можете обработать это событие либо создав подкласс QGraphicsScene и переосмысление QGraphicsScene::mouseMoveEvent, или с помощью установка фильтра событий на вашей сцене.

Если вы отображаете изображение с помощью простого QWidget (я имею в виду, не что-то сложное, как QGraphicsScene), просто переопределите QWidget::mouseMoveEvent(QMouseEvent *e).Когда пользователь нажал кнопку мыши (e->buttons() != 0) вы могли бы нарисовать картину внутри картины.

Давайте предположим, что у вас есть ваша фотография в группе QImage img и отследить предыдущее положение курсора в QPoint cursorLast.Давайте также предположим, что вы отображаете изображение, используя что-то вроде QLabel, где вы можете просто задать изображение в свойстве.Тогда вы могли бы нарисовать картину вот так:

void MyWidget::mouseMoveEvent(QMouseEvent *e) {
    if(e->buttons()) {
        if(!cursorLast.isNull()) {
            QPainter p(&img); // and set pen
            p.drawLine(cursorLast, e->pos());
            p.end();
            setImage(img); // update image in your view
        }
        cursorLast = e->pos();
    }
}

Не забудьте сбросить настройки cursorLast участник, когда мышь будет отпущена:

void MyWidget::mouseReleaseEvent(QMouseEvent *e) {
    cursorLast = QPoint(); // reset
}

Обратите внимание, что этот код не тестировался, и, возможно, я использовал немного неправильные имена в методах, но найти настоящие будет легко.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top