crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 28.3.2024, 19:14