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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не реагировать на мышь.  (Прочитано 3924 раз)
Robotex
Гость
« : Февраль 04, 2011, 15:05 »

Как заставить Qt4 приложение вообще не реагировать на мышь? Т.е. чтобы оно только отрисовывалось. Если под окном кнопка другого приложения и пользователь кликнет, то нажмется именно та кнопка.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Февраль 04, 2011, 15:07 »

На сколько я знаю, средствами Qt это не решить.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Robotex
Гость
« Ответ #2 : Февраль 04, 2011, 15:19 »

В SIM IM есть плагин OSD. Так в нем как-то не реагирует окно (ну разве что на текст, а вот между буквами нет). Но это на qt3, а в четвертой версии как.
Записан
SABROG
Гость
« Ответ #3 : Февраль 05, 2011, 14:50 »

Вот вариант для Windows 2000 и выше с использованием WinAPI

widget.h
Код
C++ (Qt)
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QtGui/QWidget>
 
namespace Ui {
   class Widget;
}
 
class Widget : public QWidget
{
   Q_OBJECT
 
public:
   explicit Widget(QWidget* parent = 0);
   ~Widget();
 
Q_INVOKABLE void callAfterStartEventLoop();
 
private:
   Ui::Widget* ui;
};
 
#endif // WIDGET_H
 
 

widget.cpp
Код
C++ (Qt)
#define WINVER 0x0502
#define WIN32_LEAN_AND_MEAN
#define NOCOMM
#include <windows.h>
 
#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget* parent) :
       QWidget(parent, Qt::WindowStaysOnTopHint),
   ui(new Ui::Widget)
{
   ui->setupUi(this);
   QMetaObject::invokeMethod(this, "callAfterStartEventLoop", Qt::QueuedConnection);
}
 
Widget::~Widget()
{
}
 
void Widget::callAfterStartEventLoop()
{
#if defined(Q_WS_WIN)
   HWND hWnd = effectiveWinId();
   SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TRANSPARENT);
   SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA);
#endif
}
 
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #4 : Февраль 06, 2011, 14:33 »

Как заставить Qt4 приложение вообще не реагировать на мышь? Т.е. чтобы оно только отрисовывалось. Если под окном кнопка другого приложения и пользователь кликнет, то нажмется именно та кнопка.
Эвент луп?
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
sadhu
Гость
« Ответ #5 : Февраль 06, 2011, 22:32 »

попробуй рекурсивно всем виджетам установить атрибут Qt::WA_TransparentForMouseEvents
Записан
sus
Гость
« Ответ #6 : Февраль 07, 2011, 04:07 »

Буквально пару дней назад делал подобное. Суть заключается в том, чтобы в окне пробивать дырку в 1 пиксель под курсором мыши. Такой вариант будет работать, но возможны косяки, если окно повиснет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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