crossplatform.ru

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

> QPainter не хочет рисовать точки с шириной пера более 1
Andrewshkovskii
  опции профиля:
сообщение 9.4.2010, 15:08
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Раскрывающийся текст
bool symbolInput::eventFilter(QObject *o, QEvent *e)
{
    QMouseEvent * me = static_cast<QMouseEvent*> (e);
     if ( o == ui->inputFiled )
    {
         if (me->type() == QEvent::MouseButtonPress)
         {
             if(me->button() == Qt::LeftButton)
                {
                    painter.begin(picture_);
                    painter.setRenderHint(QPainter::Antialiasing,true);
                    pen.setColor(Qt::black);
                    painter.setPen(pen);
                    painter.drawPoint(me->pos());
                    painter.end();
                    lastpoint=me->pos();
                    ui->inputFiled->setPixmap(*picture_);
                    return true;
                }
              else
                if(me->button() == Qt::RightButton )
                {
                   painter.begin(picture_);
                   painter.setRenderHint(QPainter::Antialiasing,true);
                   pen.setColor(Qt::white);
                   painter.setPen(pen);
                   painter.drawPoint(me->pos());
                   painter.end();
                   lastpoint=me->pos();
                   ui->inputFiled->setPixmap(*picture_);
                   return true;
                }
         }
         if(me->type() == QEvent::MouseMove && me->buttons() == Qt::LeftButton)
         {
             painter.begin(picture_);
             painter.setRenderHint(QPainter::Antialiasing,true);
             pen.setColor(Qt::black);
             painter.setPen(pen);
             painter.drawLine(lastpoint,me->pos());
             painter.end();
             lastpoint=me->pos();
             ui->inputFiled->setPixmap(*picture_);
             return true;
         }
          else
               if(me->type() == QEvent::MouseMove && me->buttons() == Qt::RightButton)
                {
              painter.begin(picture_);
              painter.setRenderHint(QPainter::Antialiasing,true);
              pen.setColor(Qt::white);
              painter.setPen(pen);
              painter.drawLine(lastpoint,me->pos());
              painter.end();
              lastpoint=me->pos();
              ui->inputFiled->setPixmap(*picture_);
              return true;
                }
    }
     return QWidget::eventFilter(o,e);
}


    pen.setColor(Qt::black);
    pen.setCapStyle(Qt::RoundCap);
    pen.setBrush(Qt::SolidPattern);
    pen.setStyle(Qt::SolidLine);
    pen.setJoinStyle(Qt::RoundJoin);


Код выше, суть такая : на лейбле стоит эвент фильтр, он обрабатывает события нажатия/перемешения мышки, и соотвественно :
На левый клик рисует точку черную , на правый белую.
На левый клик и перетаскивание рисует линию черную, на правый белую.
Так вот, если установить статично(в коде) , или же через spinbox редактор толщины линии, и менять её, то при толщине 1 - все Ок, при большей - не рисует точки, только линии.
С чем это может быть связано?
Причина редактирования: поправил заголовок *ручка*->*перо*
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.4.2024, 12:02