Russian Qt Forum
Сентябрь 25, 2024, 18:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прорисовка выделения  (Прочитано 5570 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Сентябрь 11, 2009, 10:15 »

Хочу организовать в своей софтине, выделение нескольких объектов как на рабочем столе в винде, всё бы нечего но вот с рисованием проблема, я понимаю что нужно нарисовать обычный прямоугольник, но возникают трудности даже с обычным рисованием (с лева на право, с верху в низ), проблемы такие что координаты мыши и прямоугольника не совподают, может я гдето косячу, в аттаче минимальный пример.
« Последнее редактирование: Сентябрь 11, 2009, 10:21 от ecspertiza » Записан
ufna
Гость
« Ответ #1 : Сентябрь 11, 2009, 10:22 »

посмотрел. Зависимость не видишь почему так рисуется? Улыбающийся

QRect задается не координатами углов, а левым верхним углом и шириной и высотой, потому
rect = QRect(startPosition.x(),startPosition.y(),event->pos().x(),event->pos().y());
это неправильно.

вот так все работает:
Код
C++ (Qt)
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
   stopPosition = event->pos();
   //rect = QRect(startPosition.x(),startPosition.y(),event->pos().x(),event->pos().y());
   rect.setTopLeft(startPosition);
   rect.setBottomRight(stopPosition);
   update();
}
 
void MainWindow::paintEvent(QPaintEvent *event)
{
   qDebug() << "painter" << startPosition << stopPosition;
 
   QPainter painter(this);
   QPen pen;
   pen.setColor(Qt::blue);
   pen.setWidth(1);
   painter.setPen(pen);
   painter.setBrush(QBrush(Qt::blue));
   painter.setOpacity(0.5);
 
//    if (stopPosition.x() < startPosition.x())
//    ...............................................................
//    }else
       painter.drawRect(rect);
 
   pen.setColor(Qt::black);
   pen.setWidth(6);
« Последнее редактирование: Сентябрь 11, 2009, 10:29 от ufna » Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #2 : Сентябрь 11, 2009, 10:30 »

Да я уже сам понял где накосчяил, я рисовал прямоуголиник по четырём координатам,
а он рисуется по двум координатом, ширине и высоте, слона то я и незаметил, даже стыдно, пойду в угол стану Улыбающийся

Спасибо за помошь Улыбающийся
« Последнее редактирование: Сентябрь 11, 2009, 10:33 от ecspertiza » Записан
Vexator
Гость
« Ответ #3 : Сентябрь 24, 2009, 04:59 »

нубский вопрос в тему
есть у меня QWidget, который занимается отловом ввода пользователя Улыбающийся
и есть задача, организовать рисование выделения (рамочку т.е.), что бы она тянулась с места нажатия, за курсором мышки.

посмотрел асистент, вроде все просто, юзаем 3 методы:
mousePressEvent
mouseReleaseEvent
ну и mouseMoveEvent


для начала просто повесил на все три методы qWarning()
и отчего то, метод mouseMoveEvent никогда не вызывается, только press и release ... может я какого нюанса про mouseMove не знаю?
Записан
CroCIV
Гость
« Ответ #4 : Сентябрь 24, 2009, 07:38 »

мб ты ошибся в сигнатуре функции при ее обьявлении?
у меня моусМувЕвент работает как положено.
Записан
BRE
Гость
« Ответ #5 : Сентябрь 24, 2009, 07:50 »

может я какого нюанса про mouseMove не знаю?
Посмотри на void QWidget::setMouseTracking ( bool enable )
Записан
Makss
Гость
« Ответ #6 : Сентябрь 24, 2009, 07:51 »

setMouseTracking(true);
тогда будешь ловить событие движения мышки всегда, а так она ловится тока если ты нажмёшь мышку а потом будешь двигать)

хы)пока писал уже ответили))
Записан
Vexator
Гость
« Ответ #7 : Сентябрь 24, 2009, 10:06 »

вообщем буду копать, мне собственно и нужно что бы оно отлавливалось при зажатой кнопке, но событие не происходит... попробую с трекингом Улыбающийся
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #8 : Сентябрь 24, 2009, 13:44 »

Я походу занимался тойже темой что и тебе сейчас нужно, вот здесь есть пример http://www.rapidshare.ru/1173266 можешь глянуть.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 22.