crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Перехват нажатия мыши вне окна приложения.
Danmerpro
  опции профиля:
сообщение 20.8.2012, 16:24
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 21.8.2011
Пользователь №: 2823

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




Репутация:   0  


Добрый день.
Имеется программа, помимо много чего программа умеет делать скриншот экрана :rolleyes: Для того, чтобы сделать скриншот, главное окно программы скрывается, приложение спит 1 секунду (нужно, чтобы успело отрисоваться все на рабочем столе, и куски неотрисованного главного окна не попали на скрин), далее делает скриншот. Если во время спячки приложения нажать на кнопку мыши, например ПКМ, то вызовется контекстное меню рабочего стола/другого приложения и попадет на скрин. А так не хорошо.
Я вижу два варианта решения проблемы:
1) Делать скрин сразу же, без спячки, но нужно как-то убедиться, что на экране все корректно. За долгое время не смог решить такую задачу.
2) Как-нибудь сказать системе "не реагируй на нажатие мыши". Но, похоже, Qt не предоставляет такой возможность.
Кто что может подсказать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 20.8.2012, 23:03
Сообщение #2


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

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


как вариант, сделать какой нибудь виджет прозрачным и развернуть на весь экран.

Но думаю должны быть варианты по проще)))

Сообщение отредактировал Trisch - 20.8.2012, 23:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iReset
  опции профиля:
сообщение 21.8.2012, 6:07
Сообщение #3


Участник
**

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

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




Репутация:   2  


QWidget::grabMouse()?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Danmerpro
  опции профиля:
сообщение 21.8.2012, 11:56
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 21.8.2011
Пользователь №: 2823

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




Репутация:   0  


Цитата(Trisch @ 21.8.2012, 0:03) *
как вариант, сделать какой нибудь виджет прозрачным и развернуть на весь экран.

Под иксами не получается сделать прозрачный виджет. Программа позволяет как бы рисовать на рабочем столе. Для этого делается снимок экрана, затем виджет с этим снимком на весь экран.


Цитата(iReset @ 21.8.2012, 7:07) *

Не подходит. Виджет теряет мышь, как только скрывается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 21.8.2012, 12:23
Сообщение #5


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

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


Тут нету кроссплатформенного решения 100%.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Danmerpro
  опции профиля:
сообщение 21.8.2012, 14:49
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 21.8.2011
Пользователь №: 2823

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




Репутация:   0  


Цитата(PAFOS @ 21.8.2012, 13:23) *
Тут нету кроссплатформенного решения 100%.

Скорее всего да(

Под Windows проблему решил, как было сказано ранее - прозрачный виджет на весь экран.
emptyWidget->setWindowOpacity(0.008);

Если величина меньше 0,08, то виджет не показывается (вызываю setFullScreen), а может показывается, но не ловит нажатия мыши.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 21.8.2012, 16:56
Сообщение #7


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

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


хотя....

попробуй так:
1. сверни окно с приложением
2. выполни QDesktopWidget::screen()->render(...) // тут с аргументами сам разберешься

может быть и прокатит. я не проверял)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 21.8.2012, 23:23
Сообщение #8


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

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


попробуй прозрачность сделать с помощью этого:
setAttribute(Qt::WA_TranslucentBackground);


под виндой и линуксом работает нормально)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Danmerpro
  опции профиля:
сообщение 22.8.2012, 18:54
Сообщение #9


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 21.8.2011
Пользователь №: 2823

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




Репутация:   0  


Цитата(Trisch @ 22.8.2012, 0:23) *
попробуй прозрачность сделать с помощью этого:
setAttribute(Qt::WA_TranslucentBackground);


под виндой и линуксом работает нормально)

Хм, под линукс уже написал класс EventLocker, который перехватывает все действия, пока не сделается скриншот. Будет время - попробую)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 12.12.2024, 11:32