Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Сентябрь 14, 2014, 12:41



Название: Неожиданный fullscreen (Win7)
Отправлено: Igors от Сентябрь 14, 2014, 12:41
Добрый день

На запуске приложения выставляю QMainWindow в maximize и размеры ему тоже максимальные. Теперь если нажать бубочку restore - title вообще исчезает, менюшка в самом верху. Как вернуть шапку - хз. Если же сначала подвигать окно, то maximize/restore работает норм. Как избавиться от этой фичи(?)

Спасибо


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: Bepec от Сентябрь 14, 2014, 12:49
Можно хотя бы скрин? Потому что я лично не понимаю что за бубочка restore и как вы ему выставляете размеры, если уже сделали ему maximize.

Если вы выставляете размеры самостоятельно, то скорее всего проблема в том, что вы не учитываете "панель задач". Т.е. максимальная высота окна программы будет размер экрана - высота панели задач. Получить текущее положение панели задач просто не получится. Поэтому надо использовать showMaximized() и showMinimized().

PS панель задач - это панелька с треем и кнопкой "ПУСК"


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: kambala от Сентябрь 14, 2014, 13:01
restore — восстановить исходный размер окна, между крестиком и сворачиванием


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: Igors от Сентябрь 14, 2014, 13:02
Вверху - исходное, restore средняя кнопка. Внизу - после нажатия restore. Панель задач остается как была, но frame окна исчезает


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: Hrundel от Сентябрь 14, 2014, 13:20
Может с флагами что-то не так?


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: Igors от Сентябрь 14, 2014, 13:49
Если вы выставляете размеры самостоятельно, то скорее всего проблема в том, что вы не учитываете "панель задач". Т.е. максимальная высота окна программы будет размер экрана - высота панели задач.
Я использую QScreen::availableGeometry

Может с флагами что-то не так?
Любое передвижение окна исправляет ситуацию и больше эффект не появляется


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: Bepec от Сентябрь 14, 2014, 14:16
Код создания окна приведите.  И тогда уже бум смотреть.


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: Igors от Сентябрь 14, 2014, 15:10
Виноват, сам насвистел  :) Было так
Код
C++ (Qt)
QRect R = QApplication::desktop()->availableGeometry();
mainWin->setGeometry(R);
Ну он мне frame и убирает за границы экрана. Правильно так
Код
C++ (Qt)
mainWin->move(R.left(), R.top());
mainWin->resize(R.width(), R.height());
 
Но без фрейма выглядело так натурально, ну я и подумал что фича  :)


Название: Re: Неожиданный fullscreen (Win7)
Отправлено: Figaro от Сентябрь 16, 2014, 08:20
Я делаю так:
1. Флаги создания:
Код:
Qt::Window | Qt::WindowTitleHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint
2. В конструкторе:
Код:
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
...
connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), SLOT(setFullScreen(int)));
3. Далее:
Код:
void MainWindow::showEvent(QShowEvent *e)
{
QWidget::showEvent(e);
QSize size = sizeHint();
setFixedSize(size);
resize(size);
move(0, 0);
}

QSize MainWindow::sizeHint() const
{
QRect screenRect = QApplication::desktop()->availableGeometry(QApplication::desktop()->screenNumber(this));
QSize deltaSize = frameGeometry().size() - geometry().size();
return (screenRect.size() - deltaSize);
}

void MainWindow::setFullScreen(int screen)
{
if (screen == QApplication::desktop()->screenNumber(this)) {
QSize size = sizeHint();
setFixedSize(size);
resize(size);
}
}

Муторно, конечно, но работает :) Qt4.8.5