coolasm
|
|
« : 19 Март 2008, 18:49:00 » |
|
Как в Qt отлавить минимизацию окна и убрать это окно с TaskBar-a?
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Fastman
|
Как в Qt отлавить минимизацию окна и убрать это окно с TaskBar-a? отлавливать сообщение QEvent::WindowStateChange где WindowStateChange может быть : The window's state (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent). В хелпе довольно подробно описано. Насчет таск бара убрать, опять же читаем хелп про hide();
|
|
|
Записан
|
Знать путь и пройти его - не то же самое...
|
|
|
coolasm
|
Спасибо, уже сам въехал про WindowStateChange, а вот насчет TaskBar-а, вроде пробывал делать hide, но ничего не работало, буду читать help Еще вопрос возник, как заставить окошко выползти поверх всех окон (в WinAPI это делается выставлением свойств окна "поверх всего"), а как это в Qt провернуть незнаю.
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
maxposedon
|
enum Qt::WindowType, enum Qt::WidgetAttribute
|
|
|
Записан
|
|
|
|
coolasm
|
Спасибо, буду искать.
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Fastman
|
Спасибо, уже сам въехал про WindowStateChange, а вот насчет TaskBar-а, вроде пробывал делать hide, но ничего не работало, буду читать help
путей много можно и так допустим, вот например ваше окошко demo_window::demo_window(QWidget *parent, Qt::WFlags flags) : QDialog(parent, flags) { ui.setupUi(this);
} меняем на: demo_window::demo_window(QWidget *parent, Qt::WFlags flags) : QDialog(parent, Qt::SubWindow) { ui.setupUi(this);
} Это как вариант.... Еще вопрос возник, как заставить окошко выползти поверх всех окон (в WinAPI это делается выставлением свойств окна "поверх всего"), а как это в Qt провернуть незнаю. выше постом абсолютно верно указано куда копать надо А вообще я не понимаю чего вам надо. Если так подумать то юзер минимизировав окошко больше его не увидит ))) В этом есть смысл только если вы в трей запихнете свое приложение. А это совсем другой разговор, и делается это просто без всяких костылей.
|
|
« Последнее редактирование: 25 Март 2008, 13:43:15 от Fastman »
|
Записан
|
Знать путь и пройти его - не то же самое...
|
|
|
coolasm
|
Мне хотелось, что бы при сворачивании окна появлялась иконка в трее, при этом на TaskBar-е не было самого окна (как объяснить более понятно не знаю), а после двойного щелчка по иконке окно востанавливалось (кароче говоря окно должно сворачиваться в трей и востанавливаться из него же). Иконку и обработчик уже сделал, а как свернутое окно убрать с таскбара пока что не знаю (hide() не помог).
|
|
« Последнее редактирование: 25 Март 2008, 14:51:00 от coolasm »
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Fastman
|
Мне хотелось, что бы при сворачивании окна появлялась иконка в трее, при этом на TaskBar-е не было самого окна (как объяснить более понятно не знаю), а после двойного щелчка по иконке окно востанавливалось (кароче говоря окно должно сворачиваться в трей и востанавливаться из него же). Иконку и обработчик уже сделал, а как свернутое окно убрать с таскбара пока что не знаю (hide() не помог). с этого и надо было начинать, сразу бы и помогли.. а то развел тут )) У тебя должен быть похожий код: void App::closeEvent(QCloseEvent *event) { if (trayIcon->isVisible()) { hide(); event->ignore(); } } те. когда ты жмякаешь на (x) ты перехватываешь сигнал закрытия приложения, скрываешь приложение, и игнорируешь сам сигнал закрытия приложения. Теперь вопрос.... что тебе мешает сделать то же самое ловя сигнал минимизации ? Для совсем ленивых и не читающих документацию приведу пример : void App::changeEvent(QEvent * e ) { if (e->type() == QEvent::WindowStateChange) { if (isMinimized() == true) { QTimer::singleShot(0, this, SLOT(hide())); trayIcon->show(); e->ignore(); return; } } QDialog::changeEvent( e ); } Вроде как то так
|
|
« Последнее редактирование: 25 Март 2008, 15:40:24 от Fastman »
|
Записан
|
Знать путь и пройти его - не то же самое...
|
|
|
maxposedon
|
QSystemTrayIcon
|
|
« Последнее редактирование: 25 Март 2008, 15:19:46 от maxposedon »
|
Записан
|
|
|
|
Fastman
|
Я уже предвижу вопросы и просто на всякий случай еще добавлю что ессно нужно слот зарегать )) типа: в app.h должно быть: private slots: void changeEvent(QEvent * e ); Блин... в QT самая охрененная дока которую я только видел... MSDN и рядом не валялся... ее ж только почитать надо
|
|
|
Записан
|
Знать путь и пройти его - не то же самое...
|
|
|
coolasm
|
Как бы объяснить, это у меня уже 3 дня как работает (иконка в трее и т.д.), меня интересует как убрать с таск бара окно (оно при сворачивании в виде кнопки отабражается, а я хочу его убрать)
Может после просмотра картинки станет поняно (Total Commander - это не та прога, что я пишу)
P.S. Насчет крутасти доков QT бессмыслено спорить, видно что постарались
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Fastman
|
Как бы объяснить, это у меня уже 3 дня как работает (иконка в трее и т.д.), меня интересует как убрать с таск бара окно (оно при сворачивании в виде кнопки отабражается, а я хочу его убрать)
Может после просмотра картинки станет поняно (Total Commander - это не та прога, что я пишу)
P.S. Насчет крутасти доков QT бессмыслено спорить, видно что постарались Выше я написал как это сделать... копи-паст сделай Могу по строкам пояснить: Заводим слот : private slots: void changeEvent(QEvent * e ); Отлавливаем эвент: void App::changeEvent(QEvent * e ) { if (e->type() == QEvent::WindowStateChange) //Если тип эвента изменение состояния окна идем дальше { if (isMinimized() == true) //Если эвент - минимизация окна { QTimer::singleShot(0, this, SLOT(hide())); //Прячем окошка с таск бара trayIcon->show(); //На всякий случай говорим что иконка будет видна в трее e->ignore(); //Игнорируем этот эвент основным обработчиком return; //уходим } } QDialog::changeEvent( e ); //Если эвент не наш.. отдаем основному обработчику окна } QDialog - это если у тебя на диалоге сделано если на QMainWindow то догадаться не сложно все
|
|
« Последнее редактирование: 25 Март 2008, 19:43:34 от Fastman »
|
Записан
|
Знать путь и пройти его - не то же самое...
|
|
|
coolasm
|
Спасибо, врубился, я вызывал hide() непосредственно в обработчике changeEvent P.S. ну не люблю я метод копи-паст, если не понимаю как работает
|
|
« Последнее редактирование: 25 Март 2008, 20:44:17 от coolasm »
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Fastman
|
Спасибо, врубился, я вызывал hide() непосредственно в обработчике changeEvent Всегда пожайлуста Аффтар пейши еще
|
|
|
Записан
|
Знать путь и пройти его - не то же самое...
|
|
|
|