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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Выделение области курсором мыши  (Прочитано 8130 раз)
Resager
Гость
« : Январь 06, 2011, 07:16 »

Подскажите пожалуйста, как можно реализовать выделение мышью области (как это например в проводнике), отрисовать прямоугольник это одна проблема, но вот как сделать чтобы обрабатывать события нажатой левой кнопки мыши и одновременно движение ВНЕ окна? Как вариант мне предлагали создать виджет, сделать скриншот рабочего стола, поместить на виджет и сделать виджет того же размера что и скриншот, но тогда будет статичное изображение, а это совсем не хорошо ((. Можете помочь с примером? (в Qt примерах только Drag&Drop, применить к решению своей задачи не сумел).
Записан
merke
Гость
« Ответ #1 : Январь 06, 2011, 07:21 »

QRubberBand

http://doc.trolltech.com/4.2/qrubberband.html
Записан
Resager
Гость
« Ответ #2 : Январь 06, 2011, 08:29 »

Спасибо. Но есть небольшая загвоздочка, не считая того что пример из справки у меня выдал кучу ошибок (пока не буду выкладывать их список за ненадобностью), вероятно потмоу что я заменил  "Widget" на  "MainWindow" .
Вот код из справки
Код:
void WidgetmousePressEvent(QMouseEvent *event)
 {
     origin = event->pos();
     if (!rubberBand)
         rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
     rubberBand->setGeometry(QRect(origin, QSize()));
     rubberBand->show();
 }

 void Widget::mouseMoveEvent(QMouseEvent *event)
 {
     rubberBand->setGeometry(QRect(origin, event->pos()).normalized());
 }

 void Widget::mouseReleaseEvent(QMouseEvent *event)
 {
     rubberBand->hide();
     // determine selection, for example using QRect::intersects()
     // and QRect::contains().
 }

Как я могу его применить к виджету, созданному в функции внутри MainWindow?
Записан
merke
Гость
« Ответ #3 : Январь 06, 2011, 08:40 »

это protected функции:

 void Widget::mouseMoveEvent(QMouseEvent *event)
 void WidgetmousePressEvent(QMouseEvent *event)
 void Widget::mouseReleaseEvent(QMouseEvent *event)

я думаю подсказка понята?
Записан
Resager
Гость
« Ответ #4 : Январь 06, 2011, 14:49 »

Спасибо. Всё сделал. работает. Но увы когда я делаю прозраность виджета так:
Код:
this->setWindowOpacity(0.2);
То прозрачным становится всё, включая область, которую я делаю с помощью класса QRubberBand

Есть ли возможность по определённому действию создать к примеру виджет 1х1 пиксель и двигать его под курсором, и когда юзверь нажмёт левую клавишу мыши и будет двигать, то там уже виджет начнёт ресайзится, у него прозрачность я наладить смогу сам. Не подскажете?

весь код:

qrselector.cpp http://govnokod.ru/5159
qrselector.h http://govnokod.ru/5160
main.cpp http://govnokod.ru/5161
qrselector.ui http://govnokod.ru/5162
qrselector.pro http://govnokod.ru/5163
ui_qrselector.h http://govnokod.ru/5164
« Последнее редактирование: Январь 06, 2011, 15:31 от Resager » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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