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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: сделать окно активным  (Прочитано 28649 раз)
lana
Гость
« : Октябрь 06, 2008, 20:27 »

Программа сидит в трее и отслеживает события; событие возникает, появляется окно.
Проблема в том, что появившееся окно не активно и спрятано под окном текущего приложения.
Его можно "поднять" выше всех с помощью Qt::WindowStaysOnTopHint, но как его сделать активным - не пойму.
Подскажите?

(setFocus() и setActiveWindow() не помогают)
Записан
spirit
Гость
« Ответ #1 : Октябрь 06, 2008, 20:30 »

и этот метод не работает
Код:
void QWidget::activateWindow () 
?
Записан
lana
Гость
« Ответ #2 : Октябрь 06, 2008, 20:51 »

Нет, не помогает.
Уточню. В трее сидит класс (от QSystemTrayIcon), и когда возникает событие случается метод, в котором:

QDialog* f = new QDialog();
f->setWindowFlags(f->windowFlags() | Qt::WindowStaysOnTopHint);
...
f->show();
f->activateWindow(); // даже если добавить

Окно f получается неактивное.

и этот метод не работает
Код:
void QWidget::activateWindow () 
?
Записан
sLiva
Гость
« Ответ #3 : Октябрь 06, 2008, 21:47 »

Попробуй перед
Код:
void QWidget::activateWindow()
сделать
Код:
void QWidget::raise()
Записан
ритт
Гость
« Ответ #4 : Октябрь 06, 2008, 23:08 »

бла-бла-бла...

Код:
#ifdef Q_OS_WIN
#define _WIN32_WINNT 0x0501
#include <qt_windows.h>
#endif

int main(int argc, char* argv[])
{
#ifdef Q_OS_WIN
AllowSetForegroundWindow(ASFW_ANY);
#endif
//...
затем
Код:
void MyMainWindow::activate()
{
setWindowState(windowState() & ~Qt::WindowMinimized);
raise();
activateWindow();
}
Записан
lana
Гость
« Ответ #5 : Октябрь 07, 2008, 10:25 »

"Попробуйте".

Нет. Не работает.

Попробуй перед
Код:
void QWidget::activateWindow()
сделать
Код:
void QWidget::raise()
Записан
lana
Гость
« Ответ #6 : Октябрь 07, 2008, 10:26 »

Нет. Не работает.

(кстати, у меня Линукс)

бла-бла-бла...

Код:
#ifdef Q_OS_WIN
#define _WIN32_WINNT 0x0501
#include <qt_windows.h>
#endif

int main(int argc, char* argv[])
{
#ifdef Q_OS_WIN
AllowSetForegroundWindow(ASFW_ANY);
#endif
//...
затем
Код:
void MyMainWindow::activate()
{
setWindowState(windowState() & ~Qt::WindowMinimized);
raise();
activateWindow();
}
Записан
ритт
Гость
« Ответ #7 : Октябрь 07, 2008, 11:43 »

предупреждать же надо!
этот код должен работать и под вындецом, и под линухами.
какой дистр? какой используется оконный менеджер/графический сервер?
Записан
lana
Гость
« Ответ #8 : Октябрь 07, 2008, 12:02 »

SlackWare 12, KDE 3.5.9, X Window System Version 1.3.0, Qt 4.4.1

предупреждать же надо!
этот код должен работать и под вындецом, и под линухами.
какой дистр? какой используется оконный менеджер/графический сервер?
Записан
ритт
Гость
« Ответ #9 : Октябрь 07, 2008, 12:46 »

вот мой код реагирования на клик в трее:
Код:
void MainWindow::trayIconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
case QSystemTrayIcon::Trigger:
if(isMinimized())
{
setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
}
else if(!isVisible())
{
show();
activateWindow();
}
else
{
hide();
}
break;
case QSystemTrayIcon::DoubleClick:
default:
break;
}
}
если добавить вызов activate() из кода выше, окно ещё и становится активным (с фокусом, над остальными окнами)

давай минимальный компилябельный пример - поэкспериментирую на досуге...
Записан
lana
Гость
« Ответ #10 : Октябрь 07, 2008, 13:43 »

"Давайте". Русский язык сложен, не так ли?

Не думаю, что Вы можете помочь в этом вопросе. Спасибо за попытку.

вот мой код реагирования на клик в трее:
Код:
void MainWindow::trayIconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
case QSystemTrayIcon::Trigger:
if(isMinimized())
{
setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
}
else if(!isVisible())
{
show();
activateWindow();
}
else
{
hide();
}
break;
case QSystemTrayIcon::DoubleClick:
default:
break;
}
}
если добавить вызов activate() из кода выше, окно ещё и становится активным (с фокусом, над остальными окнами)

давай минимальный компилябельный пример - поэкспериментирую на досуге...
Записан
ритт
Гость
« Ответ #11 : Октябрь 07, 2008, 14:32 »

/mе ощущает себя обгаженным...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Октябрь 07, 2008, 14:59 »

2 lana
[off]Все очень просто, слова "Давай" и "Давайте" оба из русского языка, одно в единственном числе, другое во множественном.[/off]
Записан

Юра.
ритт
Гость
« Ответ #13 : Октябрь 07, 2008, 14:59 »

мм...ну, собственно, /* ап-чхи */ главное, что у меня всё работает как требуется...

в русском языке самое сложное - пунктуация...сложные обороты - это вообще караул...
Цитировать
Уточню. В трее сидит класс (от QSystemTrayIcon), и когда возникает событие случается метод, в котором:
Записан
lana
Гость
« Ответ #14 : Октябрь 07, 2008, 15:22 »

Вы пребываете в неведении.
(Что меня не удивляет)

2 lana
[off]Все очень просто, слова "Давай" и "Давайте" оба из русского языка, одно в единственном числе, другое во множественном.[/off]

Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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