LINUX.ORG.RU

окно без maximize без возможности масштабирования

 


0

2

Вот есть некое окно:

QApplication a(argc, argv);
a.setStyle("fusion");
gui w;
w.setWindowFlags(Qt::Dialog | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint | Qt::WindowSystemMenuHint);
w.show();
Как сделать так чтобы и в среде Ubuntu/Unity и в среде windows xp/7 у меня было запрещено масштабировать окно за рамочку и использовать maximize? Вот вроде я поставил флаги без maximize, в Ubuntu/Unity это не приводит к пропаданию кнопки maximize, и за рамку возить можно. А как кроссплатформенно сделать это? Вот в винде пропадает maximize (неактивен), а вот рамка по-прежнему масштабируется...

#ifdef Q_OS_WIN
w.setWindowFlags(Qt::MSWindowsFixedSizeDialogHint);
#endif

Вот это под виндой работает, но увы - суда по названию - это только для маздая...

Я использую Qt 5.4.1 и не верю что в среде Unity это нельзя сделать, что такая примитивная вещь не кроссплатформенна и что флаги по-разному трактуются на разных платформах...

setFixedSize кстати говоря работает на любых ОС и дает одинаковый результат, но меня по некоторым причинам такое решение категорически не устраивает и ломает одну очень важную особенность приложения - масштабироваться в сторону минимума для отображение текущего содержимого окна без зависимости от темы оформления, размеров шрифтов и т.д.

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 2)

С Кьютом поставляется экзампл, где можно поиграться с флагами окна - может до чего и доиграешься.

panter_dsd ★★★★
()
Последнее исправление: panter_dsd (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

А вообще, в Линухе сложно с настройками окна, ибо разные WM себя по разному ведут. И класть они иногда хотели на твои флаги. Про тайловые я вообще молчу. )))

panter_dsd ★★★★
()

не верю что в среде Unity это нельзя сделать

В среде X11 декорациями окон («рамочками») и политикой изменения их размеров занимается отедьный процесс (Window Manager). Например, в Unity это Compiz. Контролировать WM из приложения невозможно, можно только подсказать ему, чего ты хочешь (для этого существуют протколы ICCCM и EWMH), а WM волен трактовать эти хинты по своему усмотрению.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Например, в Unity это Compiz. Контролировать WM из приложения невозможно, можно только подсказать ему, чего ты хочешь (для этого существуют протколы ICCCM и EWMH), а WM волен трактовать эти хинты по своему усмотрению.

В общем, Unity забило болт на мои хинты-хотелки, а фиксированная рамка и того недостижима, разве что может в режиме типа tool window...

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Но в тайловых wm все равно размер будет определяться параметрами сетки, если только пользователь не сделает окно плавающим.

annulen ★★★★★
()
Ответ на: комментарий от arrecck

Кстаи да, в терминологии Qt это Qt::X11BypassWindowManagerHint

annulen ★★★★★
()

В не тайловых устанавливаешь в QWidget::setMinimumSize(...) и QWidget::setMaximumSize(...) одинаковые значения. Как результат размер окна изменить нельзя, кнопка разворачивания на весь экран заблокирована.

tekilla
()
Ответ на: комментарий от KennyMinigun

У меня ВСЁ на layout-ах! В какой момент делать fixed size? Какой event отвечает за то что после resize(100, 100) я достиг нужного мне минимального размера?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Какой event отвечает за то что после resize(100, 100) я достиг нужного мне минимального размера?

Не знаю, но setMinimumSize должно помочь

KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

Должно но не помогает ;) Ладно, тут поможет лишь живой эксперимент, буду учиться методом тыка :)

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.