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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Окно + фокус ввода.  (Прочитано 4683 раз)
someLogin
Гость
« : Июнь 13, 2009, 21:42 »

Помогите сделать окно не принимающее фокус. То есть что бы окно никогда не становилось активным по Alt+Tab и мышиным событиям, ну и тд.

upd. нужно что бы окошко все мышиные события передавало нижележащиму окну, либо рабочему столу.

p. s. извиняюсь за некорректное описание проблемы. Улыбающийся
« Последнее редактирование: Июнь 15, 2009, 16:08 от someLogin » Записан
MoPDoBoPoT
Гость
« Ответ #1 : Июнь 14, 2009, 00:11 »

void QWidget::setFocusPolicy ( Qt::NoFocus )
или ловить через фильтр событие QFocusEvent с gotFocus==true и не передавать событие видету
или переопределить void QWidget::focusInEvent ( QFocusEvent * event )   [virtual protected] виджета
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Июнь 14, 2009, 17:06 »

Код
C++ (Qt)
#include <QApplication>
#include <QX11Info>
 
#include <X11/Xlib.h>
#include <X11/Xutil.h>
 
int main(int argc, char **argv)
{
   QApplication app(argc, argv);
 
   QWidget *c = new QWidget;
 
   XWMHints wmhints;
 
   // Ignore WM focus
   wmhints.flags = InputHint;
   wmhints.input = False;
   XSetWMHints(QX11Info::display(), c->winId(), &wmhints);
 
   c->show();
 
   return app.exec();
}
 
Записан
someLogin
Гость
« Ответ #3 : Июнь 14, 2009, 18:19 »

Не получается, окно все равно создается с фокусом (активным) и запросто его (фокус) ловит...
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Июнь 15, 2009, 12:18 »

Не получается, окно все равно создается с фокусом (активным) и запросто его (фокус) ловит...

не работает какой из предложенных вариантов? Улыбающийся Если с XWMHints, то какой оконный менеджер?
Записан
someLogin
Гость
« Ответ #5 : Июнь 15, 2009, 16:09 »

Непереносимое решение не проверял.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Июнь 15, 2009, 17:15 »

Непереносимое решение не проверял.

переносимого решения для такой задачи боюсь может не быть  В замешательстве
Записан
SASA
Гость
« Ответ #7 : Июнь 15, 2009, 17:47 »

upd. нужно что бы окошко все мышиные события передавало нижележащиму окну, либо рабочему столу.

Цитировать
classMyApp : public QApplication
{
   Q_OBJECT

public:
   MyApp(int &argc, char **argv, int = QT_VERSION);
   ~MyApp();
   virtual bool notify ( QObject * receiver, QEvent * event );
   {
      if (event->type() == QEvent::MouseMove) 
      {
         QPoint p = ((QMouseEvent*)event)->globalPos();
         QWidget* newReceiver = widgetAt(p);
         if (newReceiver) // а таки лежит
         {
            ((QWidget*)receiver)->setCursor(newReceiver->cursor());
            receiver = newReceiver;
         }
      }
      return QApplication::notify(receiver,event);
   }
};
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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