Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Рисование в QT мышкой, нужен простенький пример.  (Прочитано 8983 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Oopss

  • Автор темы
  • Любитель
  • *
  • Сообщений: 55
    • Просмотр профиля
Здравствуйте.
Осваиваю QT, покажите простенький пример рисования при помощи мыши.
Спасибо.

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Минимальный пример который пришёл в голову:
main.cpp
#include <QtGui/QApplication>
#include "paintwidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    PaintWidget w;
    w.show();
    return a.exec();
}
paintwidget.h
#ifndef PAINTWIDGET_H
#define PAINTWIDGET_H

#include <QtGui/QWidget>
#include <QtCore/QList>
#include <QtCore/QPoint>

class PaintWidget : public QWidget
{
    Q_OBJECT

public:
    PaintWidget(QWidget *parent = 0);
    ~PaintWidget();

protected:
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);
    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void paintEvent(QPaintEvent *event);
private:
    QList<QPoint> mDrawBuffer;
    bool mDrawMode;
};

#endif // PAINTWIDGET_H
paintwidget.cpp
#include "paintwidget.h"

#include <QtCore/QLine>
#include <QtGui/QPainter>
#include <QtGui/QMouseEvent>

PaintWidget::PaintWidget(QWidget *parent)
    : QWidget(parent)
{
    mDrawMode = false;
}

PaintWidget::~PaintWidget()
{

}

void PaintWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        mDrawMode = true;
        mDrawBuffer.append(event->pos());
        event->accept();
    }
}

void PaintWidget::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        mDrawMode = false;
        mDrawBuffer.append(event->pos());
        this->update();
        event->accept();
    }
}

void PaintWidget::mouseMoveEvent(QMouseEvent *event)
{
    if (!mDrawMode) return;
    mDrawBuffer.append(event->pos());
    this->update();
    event->accept();
}

void PaintWidget::paintEvent(QPaintEvent *event)
{
    if (mDrawBuffer.size()<2) return;
    QPainter painter(this);
    painter.setPen(Qt::green);
    QList<QPoint>::const_iterator it = mDrawBuffer.begin();
    QPoint start = *it;
    it++;
    while(it != mDrawBuffer.end()) {
        QPoint end = *it;
        painter.drawLine(start,end);
        start = end;
        it++;
    }
}

Думаю из него можно понять идею как реализовать что-нибудь более сложное.

Оффлайн Oopss

  • Автор темы
  • Любитель
  • *
  • Сообщений: 55
    • Просмотр профиля
Думаю из него можно понять идею как реализовать что-нибудь более сложное.

Спасибо, идею понял.  :)

 

Страница сгенерирована за 0.087 секунд. Запросов: 25.