Название: Рисование на виджете Отправлено: merke от Октябрь 26, 2010, 14:28 Всем привет!
Прошу не пинать! Только начинаю работать с QPainter. Требуется рисовать на виджете указателем мышки. Т.е. водим мышку рисуется линия, ну так просто для тестирования возможностей. Создаю класс унаследованный от QWidget. Переопределяю: Код: virtual void paintEvent(QPaintEvent *event); Далее пишу: Код: void myLabel::mouseMoveEvent(QMouseEvent *event) Также в конструкторе пишу Код: setMouseTracking(true); Приложение нормально компилится, запускается, но никакого рисования я не замечаю и в консоль приложения пишется при движении мышки: QPainter::begin: Paint device returned engine == 0, type: 1 QPainter::setPen: Painter not active QPainter::drawPoints: Painter not active QPainter::begin: Paint device returned engine == 0, type: 1 QPainter::setPen: Painter not active QPainter::drawPoints: Painter not active QPainter::begin: Paint device returned engine == 0, type: 1 QPainter::setPen: Painter not active QPainter::drawPoints: Painter not active Подскажите, в чем проблема? Название: Re: Рисование на виджете Отправлено: Пантер от Октябрь 26, 2010, 14:31 Рисовать нужно в paintEvent, а не в mouseMoveEvent.
Название: Re: Рисование на виджете Отправлено: GreatSnake от Октябрь 26, 2010, 14:34 Вы как инициализили QApplication и как собирали приложение? Ругань какя-то подозрительная.
И по умолчанию рисование позволительно делать только в paintEvent(). Название: Re: Рисование на виджете Отправлено: merke от Октябрь 26, 2010, 14:40 Что то под конец дня не вкуриваю( И как мне реализовать данную задачу? Что мне нужно сделать?
Название: Re: Рисование на виджете Отправлено: Пантер от Октябрь 26, 2010, 14:45 Где-то в экамплах что-то такое было, попробуй поискать.
Название: Re: Рисование на виджете Отправлено: GreatSnake от Октябрь 26, 2010, 14:45 1. Заводишь в своём классе QPolygon points.
2. Накапливаешь координаты в mouseMoveEvent(): points << QPoint( event->x(),event->y() ); Там же делаешь update(); 3. В paintEvent() отрисовываешь: QPainter painter( this ); painter.setPen(Qt::blue); painter.drawPoins( points ); 4. И не мешало бы ещё добавить mousePress()/mouseRelease() методы, чтобы рисовать нажатой мышой) Название: Re: Рисование на виджете Отправлено: merke от Октябрь 26, 2010, 15:11 Теперь выдается ошибка при компиляции:
call of overloaded 'drawPoints(QPolygon*&)' is ambiguous в чем теперь проблема? Вот код: Код: void myLabel::paintEvent(QPaintEvent *event) Название: Re: Рисование на виджете Отправлено: GreatSnake от Октябрь 26, 2010, 15:15 А накой ляд надо было points делать указателем?
Разименовывай тогда уж. Название: Re: Рисование на виджете Отправлено: merke от Октябрь 26, 2010, 15:19 Ой ошибочке) Всё работает, спасибо что помогли разобраться!!!
Название: Re: Рисование на виджете Отправлено: lega4 от Октябрь 14, 2011, 18:35 Цитировать 1. Заводишь в своём классе QPolygon points. А возможен ли более логичный вариант, как в Студии: на обработку onClick по виджету сразу повесить отрисовку? Мне кажется несколько странным выделять лишнюю память, если можно поставить точку (Пусть пример такой - по клику мышкой ставим точки) сразу же...2. Накапливаешь координаты в mouseMoveEvent(): points << QPoint( event->x(),event->y() ); Там же делаешь update(); 3. В paintEvent() отрисовываешь: QPainter painter( this ); painter.setPen(Qt::blue); painter.drawPoins( points ); Название: Re: Рисование на виджете Отправлено: Авварон от Октябрь 14, 2011, 20:36 не знаю, как там в "студии", но в мфц рисовать также можно только в контексте события рисования
Название: Re: Рисование на виджете Отправлено: lega4 от Октябрь 14, 2011, 22:34 Не разбирался во всех тонкостях, но в студии легко написать элементарную вещь - рисование по клику мышкой (Пример (http://sites.google.com/site/alexeysidnev/novosti/primeryvizualnyhprogrammnamanagedc)). И мне кажется странным, что такую логичную вещь нельзя сделать в Qt.
Название: Re: Рисование на виджете Отправлено: GreatSnake от Октябрь 15, 2011, 12:02 Не разбирался во всех тонкостях, но в студии легко написать элементарную вещь - рисование по клику мышкой (Пример (http://sites.google.com/site/alexeysidnev/novosti/primeryvizualnyhprogrammnamanagedc)). И мне кажется странным, что такую логичную вещь нельзя сделать в Qt. Студия где работает? Правильно, только на винде. Qt - кросс-платформенный тулкит, поэтому есть некие ограничения. Вся отрисовка в Qt делается асинхронно.Цитировать А возможен ли более логичный вариант, как в Студии: на обработку onClick по виджету сразу повесить отрисовку? Мне кажется несколько странным выделять лишнюю память, если можно поставить точку Интересно, а куда именно вы будете ставить точку? Сразу в видео память? В пиксмап? И как вы будете её перерисовывать, когда потребуется прокрутить вьюпорт?Название: Re: Рисование на виджете Отправлено: BRE от Октябрь 15, 2011, 12:07 Не разбирался во всех тонкостях, но в студии легко написать элементарную вещь - рисование по клику мышкой (Пример (http://sites.google.com/site/alexeysidnev/novosti/primeryvizualnyhprogrammnamanagedc)). И мне кажется странным, что такую логичную вещь нельзя сделать в Qt. Тоже самое можно сделать и в Qt. :)Рисовать в обработчике клика на QPixmap, а в paintEvent рисовать сам pixmap. Так что проблема надумана. |