Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: aliks-os от Апрель 13, 2007, 13:44



Название: Окно и позиционирование
Отправлено: aliks-os от Апрель 13, 2007, 13:44
Извините за частые вопросы, и возможно глупые вопросы - я новичок.

Как по умолчанию расположить главное окно программы в центре экрана, а то при запуске оно у меня появляется в произвольном месте.

А также как расположить дочерние окна (модальные) в центре относительно родительского.

Qt 4.2.1 Linux


Название: Окно и позиционирование
Отправлено: Alex Custov от Апрель 13, 2007, 14:30
размер десктопа можно получить из

http://doc.trolltech.com/4.2/qdesktopwidget.html

соответственно, нужно только будет просчитать координаты окна и сдвинуть его туда ;)


Название: Окно и позиционирование
Отправлено: aliks-os от Апрель 13, 2007, 14:36
Спасибо, жаль, что нет такого слота (функции), у виджета...тролли что то подкачали...


Название: Окно и позиционирование
Отправлено: Alex Custov от Апрель 13, 2007, 14:41
вообще, это дело window manager'а где располагать окна, так что всё правильно они сделали.

Всё зависит от от него и его возможностей. Он может быть либо калечным как в win, либо нормальным, как в KDE.

К тому когда у тебя несколько экранов, где нужно расположить тот же splash screen знает только WM.


Название: Окно и позиционирование
Отправлено: aliks-os от Апрель 13, 2007, 14:50
так что получается, получаем размеры из qdesktopwidget, далее берем размеры своего главного окна, вычисляем его центральное положение относительно qdesktopwidget и применяем их к своему к своему главному окну в свойства pos : QPoint ?


Название: Окно и позиционирование
Отправлено: Alex Custov от Апрель 13, 2007, 14:56
ну да :) после вычисления координат останется только QWidget::move() вызвать


Название: Окно и позиционирование
Отправлено: aliks-os от Апрель 13, 2007, 15:05
ясно
часов нет случайно готового куска кода, чтобы лишний раз не ломать голову?


Название: Окно и позиционирование
Отправлено: Alex Custov от Апрель 13, 2007, 15:12
ёптыть, что тут голову ломать ? на два поделить ? :)

Что-то типа
Код:

MyWidget::MyWidget() : QWidget()
{
    QDesktopWidget dw;
    QRect rc = dw.screenGeometry(this);

    show();
    move((rc.width() - width())/2, (rc.height() - height())/2);
}


Название: Окно и позиционирование
Отправлено: aliks-os от Апрель 13, 2007, 15:24
Да....туплю явно под конец дня...
Спасибо большое


Название: Окно и позиционирование
Отправлено: SABROG от Апрель 13, 2007, 18:59
Код:

void TForm::ScreenCenter()
{
   setGeometry((int)(QApplication::desktop()->width() - (QApplication::desktop()->width() - (QApplication::desktop()->width() / 2)) * 1.5) / 2,
  (int)(QApplication::desktop()->height() - (QApplication::desktop()->height() -
  (QApplication::desktop()->height() / 2)) * 1.5) / 2,
  (int)((QApplication::desktop()->width() -  (QApplication::desktop()->width() / 2)) * 1.5),
  (int)((QApplication::desktop()->height() - (QApplication::desktop()->height() / 2)) * 1.5));

}