Диалоговые окна в Qt4 (не пойму как)

Модератор: Модераторы разделов

Аватара пользователя
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2

Диалоговые окна в Qt4

Сообщение Shura »

Всем привет.
Никак не получается создать диалоговое окно с поведением как у диалога поиска, а именно:
Нажимаем горячую клавишу, появляется окно, которое становится активным и какой-то его элемент получает фокус ввода. Мы вводим некие данные, нажимаем Enter, выполняется какое-то действие (например поиск в тексте) и теперь, фокус ввода передаётся главному окну, но диалоговое должно остаться поверх главного, чтобы мы могли его повторно использовать.
Игрался с разными флагами, модальностью, да и Бог знает с чем ещё - не получается! То появившееся окно не получает фокус ввода, то не отдаёт потом фокус главному, то при потере активности исчезает под главным или, вообще становится поверх всех окон (вообще всех, даже от других приложений).
В документации что-то этот момент как-то не особо здорово освещён, помогите кто уже сталкивался с подобного рода задачей. Кто должен быть родителем окна, моё приложение или NULL? Какие флаги использовать?
Rock'n'roll мертв © БГ
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Диалоговые окна в Qt4

Сообщение sergio »

Т.е. окно должно:
- не создавать отдельной "кнопки" на панели задач
- сворачиваться когда сворачивается главное окно
- не блокировать доступ к главному окну
- не быть ограничено границами главного окна

Предположительно, вам нужно "плавающее" (но не поверх всех) окно, немодальное, подчиненное главному... флаги в КДЕ уж сами смотрите.
Передачу фокуса на главное при нажатии кнопки "искать" надо сделать ручками... а также при нажатии ктрл-F проверку, не открыто ли окно поиска и вызов окно_поиска.фокус(), если уже открыто...

Гм, если готовой комбинации вдруг не найдется, то можно отслеживать некоторые события (потерю фокуса ввода приложением т.е. всеми его окнами) и менять флаги окна поиска по ходу движения...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Galaxy Master
Сообщения: 142
ОС: Debian GNU/Linux

Re: Диалоговые окна в Qt4

Сообщение Galaxy Master »

Shura писал(а):
21.05.2008 21:15
Игрался с разными флагами, модальностью, да и Бог знает с чем ещё - не получается! То появившееся окно не получает фокус ввода, то не отдаёт потом фокус главному, то при потере активности исчезает под главным или, вообще становится поверх всех окон (вообще всех, даже от других приложений).
В документации что-то этот момент как-то не особо здорово освещён, помогите кто уже сталкивался с подобного рода задачей. Кто должен быть родителем окна, моё приложение или NULL? Какие флаги использовать?


А почитать документацию и написать маленькую тестилку уже никак?

1. Класс объявляешь так
class guider : public QDialog
{
...
};

2. Создаешь объект так
guider_wnd = new guider( this ); где this - инстанс владельца

3. Если нужна блокировка родителя - показываешь так
guider_wnd->exec();
иначе
guider_wnd->show();


И в документации этот здорово освещен!!! :bangin:
Спасибо сказали:
Аватара пользователя
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2

Re: Диалоговые окна в Qt4

Сообщение Shura »

Galaxy Master
А, моя ошибка была в том, что я делал класс на основе QWidget, а потом пытался на него навесить разные флаги с помощью setWindowFlags.
Спасибо, попробую через QDialog.

sergio
Вопрос и состоял в том, какие флаги нужны.
Rock'n'roll мертв © БГ
Спасибо сказали:
Аватара пользователя
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2

Re: Диалоговые окна в Qt4

Сообщение Shura »

Спасибо, всё получилось!
Rock'n'roll мертв © БГ
Спасибо сказали: