crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QPainter не хочет рисовать точки с шириной пера более 1
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Andrewshkovskii Дата 12.4.2010, 19:25
  У меня есть код, практически идентичный этому( в нем не изменяется ширина пера), в котором точка отрисовывается и с шириной пера в 20.. Так что мистика какая-то.
bool recognizer::eventFilter(QObject *o, QEvent *e)
{//рисуется все здесь
    QMouseEvent me = *(static_cast<QMouseEvent*> (e));
    if (o == ui->inputSymbolFiled)
    {
        if (me.type()== QEvent::MouseButtonPress)
           {
               if(me.button() == Qt::LeftButton)
                {
                   painter->begin(inputSymbolPixmap);
                   painter->setRenderHint(QPainter::Antialiasing,true);
                   painter->setPen(drawPen);
                   painter->drawPoint(me.pos());
                   painter->end();
                   lastpoint=me.pos();
                   ui->inputSymbolFiled->setPixmap(*inputSymbolPixmap);
                   return true;
                }
           }else
               if (me.type() == QEvent::MouseMove )
               {
                 painter->begin(inputSymbolPixmap);
                 painter->setRenderHint(QPainter::Antialiasing,true);
                 painter->setPen(drawPen);
                 painter->drawLine(lastpoint,me.pos());
                 painter->end();
                 lastpoint=me.pos();
                 ui->inputSymbolFiled->setPixmap(*inputSymbolPixmap);
                 return true;
                }
    }
    return QWidget::eventFilter(o,e);
}

Rocky Дата 12.4.2010, 16:23
  Я уже думал про это =) Фиг знает. Я когда что-то рисовал - точки эллипсами просто рисовал. Щас уже и не вспомню почему так. Ну по идее да, должна задаваться шириной кисти.
Litkevich Yuriy Дата 12.4.2010, 16:04
  у меня тут вопрос возник, а должна ли точка быть больше точки (пикселя)?
Andrewshkovskii Дата 12.4.2010, 16:03
  Да проблема в том, что при изменении ширины пера, точки- не рисуются, а линии - да, вот что меня удивило.сейчас пофикшено путем изменения координаты ивента на +1.
Rocky Дата 12.4.2010, 14:51
  Имхо быстрее всего будет проставить брэйкпоинты в нужных местах и продебажить. Сразу станет понятно какой код отрабатывает, какой реально параметр width приходит и пр.
Гость_Andrewshkovskii_* Дата 12.4.2010, 13:59
  Толщина линии задается через самописный слот , который вызывается сигналом от слайдера/спинбокса valueChanged(int), в слоте просто ставиться drawPen.seetWidth(width)..
Rocky Дата 12.4.2010, 12:41
  хм... а как именно толщина линии задается?
Andrewshkovskii Дата 12.4.2010, 12:11
  Да, так и задумано.У меня стоит фильтр на этом виджете, который обрабатывает собития мышки, и координата pos() будет относительно этого виджета(там лейбл и в нем пикспам). globalPos() это будет относительно координат винды позиция , разве нет?И я не передвигаю виджет, я полчаю координату нажатия мышки, относительно виджета, на котором стоит фильтр.
Rocky Дата 12.4.2010, 11:49
  Повторюсь...

Цитата
const QPoint & QMouseEvent::pos () const
Returns the position of the mouse cursor, relative to the widget that received the event.

If you move the widget as a result of the mouse event, use the global position returned by globalPos() to avoid a shaking motion.

See also x(), y(), and globalPos().


painter.drawPoint(me->pos());

Это так и задумано?
Andrewshkovskii Дата 12.4.2010, 11:41
 
QMouseEvent * me = static_cast<QMouseEvent*> (e);
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 14.7.2025, 12:38