Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Vladiator
1574 / 645 / 79
Регистрация: 24.02.2009
Сообщений: 9,268

Объект для рисования

26.11.2010, 00:36. Показов 2273. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть небольшой класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef QPAINTWIDGET_H
#define QPAINTWIDGET_H
 
#include <QWidget>
#include <QPainter>
 
class QPaintEvent;
 
class QPaintWidget : public QWidget
{
    Q_OBJECT
public:
    QPaintWidget(QWidget * parent = 0);
 
protected:
    void paintEvent(QPaintEvent *);
    void mousePressEvent(QMouseEvent *event);
};
 
#endif // QPAINTWIDGET_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "qpaintwidget.h"
 
QPaintWidget::QPaintWidget(QWidget * parent) : QWidget(parent)
{
    psn=0;
}
 
void QPaintWidget::paintEvent(QPaintEvent *) {
    QPainter p(this);
    p.setRenderHint(QPainter::Antialiasing,true);
    QPainterPath pp;
    //...
    p.setPen(QPen(Qt::red,1,Qt::SolidLine));
    p.setBrush(QBrush(Qt::white,Qt::SolidPattern));
    p.drawPath(pp);
}
 
void QPaintWidget::mousePressEvent(QMouseEvent *event) {
    
}
Как в QPaintWidget::mousePressEvent узнать X, Y и нажатую кнопку мыши?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2010, 00:36
Ответы с готовыми решениями:

Преобразовать дату в объект и записать объект в список, а потом использовать для выборки
Здравствуйте , хотел бы преобразовать строку типа находящуюся в списке и имеющей тип string во временной объект. Потом необходимо будет...

ООП для рисования
Здравия желаю. Прошу помочь с написанием программы. Необходимо, применив ооп, сделать программу, при запуске которой на форме рисуется...

Рекурсия для рисования
Всем доброго времени суток! Застрял на &quot;уровне&quot; так сказать. Вообщем ситуация такая: при открытии программы на форме нарисована кривая...

6
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
26.11.2010, 01:55
Цитата Сообщение от Vladiator Посмотреть сообщение
Как в QPaintWidget::mousePressEvent узнать X, Y и нажатую кнопку мыши?
Посмотреть в документации описание класса QMouseEvent.
1
 Аватар для Vladiator
1574 / 645 / 79
Регистрация: 24.02.2009
Сообщений: 9,268
29.11.2010, 00:24  [ТС]
Причиной новых проблем является недоразумение, которое разрешает рисовать только в событии paintEvent. Поэтому, нарисованный рисунок появляется только тогда, когда форма изменяет размеры/перетаскивается и т. п., а если делать рисование в событии mousePressEvent, не рисует. Как решить данную проблему?

Добавлено через 7 часов 40 минут
"this->repaint();" помог
0
11 / 11 / 1
Регистрация: 20.08.2010
Сообщений: 27
06.12.2010, 01:50
Vladiator, предваряя будущие проблемы, скажу, что рисовать все-таки придется не в paintEvent'е, а на каком-нить объекте QPixmap, а после рисования или вызывать напрямую update(), или с помощью emit (ecли рисуешь в другом классе), и далее отрисовывать саму картинку Pixmap...
1
 Аватар для Vladiator
1574 / 645 / 79
Регистрация: 24.02.2009
Сообщений: 9,268
06.12.2010, 09:38  [ТС]
Attos, не понял...
0
11 / 11 / 1
Регистрация: 20.08.2010
Сообщений: 27
06.12.2010, 19:33
Vladiator, в основном классе, где будет paintEvent заводишь картинку: QPixmap* m_paintImage; И везде, где надо что-то отрисовать, рисуешь на нее:
C++
1
2
3
4
    QPainter painter(m_paintImage);
    painter.setPen(Qt::NoPen);
    painter.setBrush(QColor(34, 34, 34));
    painter.drawEllipse(QPoint(2, 2), 3, 4);
А потом вызываешь paintEvent, например, с помощью update() или this->repaint(); и там просто отрисовываешь свою QPixmap:

C++
1
2
3
4
void Game::paintEvent(QPaintEvent*){
    QPainter painter(this);
     painter.drawPixmap(0, 0, *m_paintImage);
}
ps естессно до рисования нужно еще инициализировать QPixmap
C++
1
2
    QPainter painter(m_paintImage);
    painter.fillRect(0, 0, 77, 77, QColor(34, 34, 34));
1
 Аватар для Vladiator
1574 / 645 / 79
Регистрация: 24.02.2009
Сообщений: 9,268
02.02.2011, 14:46  [ТС]
Хм...
Цитата Сообщение от Attos Посмотреть сообщение
QPainter painter(this);
Цитата Сообщение от Attos Посмотреть сообщение
QPainter painter(m_paintImage);
Что выбрать?

Добавлено через 10 минут
QPainter не имеет moveTo/lineTo, drawLine не подходит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.02.2011, 14:46
Помогаю со студенческими работами здесь

Слои для рисования
Всем привет! Подскажите, пожалуйста, кто знает. 1. Есть в дотнете что-нибудь похожее на слои рисования? Объясню ситуацию - задание...

Буфер для рисования
Hi! Нужно нарисовать два прямоугольника, один в консоли, другой в &quot;буфере&quot; hdc2. Затем вывести второй прямоугольник из hdc2 в...

Контейнер для рисования
Доброго времени суток. Подскажите пожалуйста самый оптимальный (или несколько) контейнер для отображения картинки, в котором можно...

Программа для рисования в С++
Вам нужно создать программу для создания примера на изображении (изоброжение по ссылке). Квадрат должен быть разноцветным (красочным). ...

Панель для рисования
Всем привет. Нужен родитель для компонента &quot;Панель для рисования&quot; с событием OnPaint, что бы могперемещатся над другими контролами формы....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru