Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: someLogin от Июнь 13, 2009, 21:42



Название: Окно + фокус ввода.
Отправлено: someLogin от Июнь 13, 2009, 21:42
Помогите сделать окно не принимающее фокус. То есть что бы окно никогда не становилось активным по Alt+Tab и мышиным событиям, ну и тд.

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

p. s. извиняюсь за некорректное описание проблемы. :)


Название: Re: Окно + фокус ввода.
Отправлено: MoPDoBoPoT от Июнь 14, 2009, 00:11
void QWidget::setFocusPolicy ( Qt::NoFocus )
или ловить через фильтр событие QFocusEvent с gotFocus==true и не передавать событие видету
или переопределить void QWidget::focusInEvent ( QFocusEvent * event )   [virtual protected] виджета


Название: Re: Окно + фокус ввода.
Отправлено: Alex Custov от Июнь 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();
}
 


Название: Re: Окно + фокус ввода.
Отправлено: someLogin от Июнь 14, 2009, 18:19
Не получается, окно все равно создается с фокусом (активным) и запросто его (фокус) ловит...


Название: Re: Окно + фокус ввода.
Отправлено: Alex Custov от Июнь 15, 2009, 12:18
Не получается, окно все равно создается с фокусом (активным) и запросто его (фокус) ловит...

не работает какой из предложенных вариантов? :) Если с XWMHints, то какой оконный менеджер?


Название: Re: Окно + фокус ввода.
Отправлено: someLogin от Июнь 15, 2009, 16:09
Непереносимое решение не проверял.


Название: Re: Окно + фокус ввода.
Отправлено: Alex Custov от Июнь 15, 2009, 17:15
Непереносимое решение не проверял.

переносимого решения для такой задачи боюсь может не быть  :-\


Название: Re: Окно + фокус ввода.
Отправлено: SASA от Июнь 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);
   }
};