всех других. А обратная функция что-то не получается. Кто-нибудь сталкивался?
void Tblf::on_mi_over_all_windows_triggered()
{
setWindowFlags(Qt::WindowStaysOnTopHint);
show();
activateWindow();
}
//------
void Tblf::on_mi_notover_all_windows_triggered()
{
Qt::WindowFlags flags = windowFlags();
if(flags & Qt::WindowStaysOnTopHint)
flags ^= Qt::WindowStaysOnTopHint;
setWindowFlags(flags);
show();
activateWindow();
}
сравни флаги что были до и после
Не пробовал этот флаг? Qt::WindowStaysOnBottomHint
И еще на заметку на всякий про WindowStaysOnTopHint (поверх всех других) из доков Note that on some window managers on X11 you also have to pass Qt::X11BypassWindowManagerHint for this flag to work correctly.
Используй лучше метод void setWindowFlag(Qt::WindowType flag, bool on = true), сможешь в 1 строку и без всяких проверок сбросить флаг. Но тебе, наверное, надо будет еще raise() вызвать у виджета, который должен быть на переднем плане.
Метод setWindowFlag хороший, но все равно не работает даже с raise после
Пробовал - окно вообще пропадает и даже системное "восстановить" не помогает
Да тоже сейчас щупаю. Пропадает везде. А если просто в конструкторе окна выставляю флаг, то реально работает и находится все время позади всех
Пробовал запомнить что было и восстановить - никакого эффекта: static Qt::WindowFlags flags_mem; void Tblf::on_mi_over_all_windows_triggered() { flags_mem = windowFlags(); setWindowFlag(Qt::WindowStaysOnTopHint, true); show(); activateWindow(); } //--------------------- void Tblf::on_mi_notover_all_windows_triggered() { setWindowFlags(flags_mem); show(); activateWindow(); //raise(); }
Вот так работает. Обрати внимание, что сначала надо убрать какие либо флаги, а только потом выставлять новые. Ну и самое главное вызвать show() у окна после выставления флагов
Это все равно что-то не то. Нужно не посылать окно вниз, а восстановить обычный режим отображения окна, чтобы потом при нажатии на какое-то другое окно окно стало бы снова покрываться другим. Т.е. нужна отмена режима "всегда наверху".
Аа. Я то сообщение когда прочитал "обратное", не о том подумал. Попробовал просто менять один флаг, у меня работает рандомно. Т.е. бывает все хорошо, бывает не срабатывает
Заметил одну вещь - программно, из QTcreator, флаг в свойствах окна "Всегда на переднем плане" можно только установить, а вот сбросить этот флаг можно войдя в системное меню окна (в левом верхнем углу) заходим в свойства окна и снимаем галку "Всегда на переднем плане". После этого окно возвращается в обычный режим. Т.е. таки режим как-то можно включать/выключать. ;=)
Только если попытаться достучаться до иксов напрямую
Попробуй так. Вроде стабильно работает
Работает что - включение режима "всегда наверху?" Вопрос был как ВЫключить этот режим. Он почему то не отключается програмно.
здесь и включение и выключение. Юзер сам в настройках галочкой может переключать
Обсуждают сегодня