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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Отключить Popup закрытие при клике в другое окно  (Прочитано 12715 раз)
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



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

А что, так не прокатывает?
Код
C++ (Qt)
bool YourQtCompleter::eventFilter( QObject *o, QEvent *e )
{
if( e->type() == QEvent::MouseButtonPress )
{
if( !popup()->underMouse() && virtKbd()->underMouse() )
return QObject::eventFilter( o, e );
}
return QtCompleter::eventFilter( o, e );
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
kuzmich
Гость
« Ответ #16 : Февраль 16, 2011, 15:40 »

Нет. И это тоже пробовал. Никакой реакции. Пробовал так же передавать указатель на клаву, полученный другим путем, не через аргумент Object*. Заново буду читать event processing)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #17 : Февраль 16, 2011, 15:46 »

А под отладчиком? Какой return отрабатывает в этом случае?
Записан

Qt 5.11/4.8.7 (X11/Win)
kuzmich
Гость
« Ответ #18 : Февраль 17, 2011, 11:11 »

return в условии точно отрабатывает и возвращает false. Тем более, там Object* который в аргументе - QListView, а нужно послать *virtKbd.
 Пробовал и другие варианты:
Код:
QCoreApplication::sendEvent( virtKbd,event ); // ret - true
//or
QCoreApplication::postEvent( virtKbd,event );
QCoreApplication::sendPostedEvents ( virtKbd, event->type() );// зависает
//or
QObject::eventFilter( o, e );// ret - false
//or
QWidget::eventFilter(this, event ); //ret -  false
Что-то я малость тут не догоняю Улыбающийся
Кстати, использую QtEmbedded 4.3...
« Последнее редактирование: Февраль 17, 2011, 11:13 от kuzmich » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #19 : Февраль 17, 2011, 11:17 »

Боюсь не понял про другие варианты, но уверен, что постить события из eventFilter() не лучшая идея.
Вполне возможно, что у Qt может и крышу снести от этого.
И какой event постите/посылаете virtKbd?
« Последнее редактирование: Февраль 17, 2011, 11:22 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
kuzmich
Гость
« Ответ #20 : Февраль 17, 2011, 11:27 »

Просто уже от того, что не получается по нормальному продвинуть дальше в методы родительского класса событие с измененным объектом, как вы предлагали, начал извращаться с разнообразием посыла событий. Чую, что вариант должен быть, чтобы пропустить нажатие клавиши. Получается, тут лечу, там калечу))
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #21 : Февраль 17, 2011, 12:28 »

После некоторых исследований могу заявить, что ничего у вас не получится Грустный
Как я уже указывал выше Qt c виджетами типа Qt::Popup при их show() делает для них псевдо-граб (см. QApplication::activePopupWidget() ).
И в итоге никакие манипуляции нам не помогут.
Единственное, что могу предложить, переписать QCompleter, в котором будет и список и ваша виртуальная клавиатура в одном окне.
Записан

Qt 5.11/4.8.7 (X11/Win)
kuzmich
Гость
« Ответ #22 : Февраль 17, 2011, 13:14 »

Так если
Цитировать
all events are sent to the popup
, а в исходниках QCompleter на popup устанавливается фильтр QCompleter::eventFilter() и я переназначаю на свою функцию и, главное, она срабатывает, то вы думаете, что если я посылаю из нее событие дальше кому угодно(в моем случае нажатие пальцем на вирт. клаве), то событие снова перехватывается QCompleter::popup?!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #23 : Февраль 17, 2011, 13:16 »

именно
Записан

Qt 5.11/4.8.7 (X11/Win)
kuzmich
Гость
« Ответ #24 : Февраль 17, 2011, 13:22 »

блин побери Смеющийся
Буду искать варианты...
Спасибо большое за советы!
Записан
kuzmich
Гость
« Ответ #25 : Февраль 21, 2011, 16:01 »

Оказалось проще реализовать весь функционал в своем виджете(MyPopupWindow ). Но теперь из-за того, что он не имеет родителя, он может получить фокус. А окно должно быть только информативное, безо всякого взаимодействия с пользователем. В общем, теперь думаю, как перехватывать клик на нем... Попробовал:
Код:
QApplication app;
app.installeventFilter(globalObject);

GlobalObject::eventFilter(QObject *obj, QEvent *event)
{
    if( obj == MyPopupWindow && event->type() == Qt::MouseButtonPress ) //если кликнули в моем информационном окне
       {
           MyInputWindow->activateWindow(); //активировать фокус в окне ввода информации
           return true; //событие обработано
        }
}
получается ерунда какая то. Все ловится, но фокус теряется.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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