Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Admin от Сентябрь 25, 2006, 13:52



Название: Отображение виджета в центре экрана
Отправлено: Admin от Сентябрь 25, 2006, 13:52
Как всегда отображать диалог в центре экрана. У меня есть визард, у которого постоянно меняются размеры окна в зависимости от шага.

Хотелость бы всегда выставлять его в цент экрана.


Название: Отображение виджета в центре экрана
Отправлено: ufna от Сентябрь 25, 2006, 14:21
делаештся таким образом:
Зохидся в исходники кути, сплеш скрин :)
А далее ищется:

QRect r(0, 0, d->pixmap.size().width(), d->pixmap.size().height());
    resize(d->pixmap.size());
    move(QApplication::desktop()->screenGeometry().center() - r.center());

Отсюда - что требуется:
1. Подключить "qapplication.h" и "qdesktopwidget.h".
2. Найти центр виджета как точку.
3. Сделать то, что указано в функции :)

Можно и без поиска точки, просто как ширина пополам, длина пополам.


Название: Отображение виджета в центре экрана
Отправлено: Alexei от Сентябрь 25, 2006, 16:48
Используй QApplication::desktop()->width() и QApplication::desktop()->height()


Название: Отображение виджета в центре экрана
Отправлено: ufna от Сентябрь 25, 2006, 17:03
Цитата: "Alexei"
Используй QApplication::desktop()->width() и QApplication::desktop()->height()
QApplication::desktop()->screenGeometry().center() аналогично :) Только смотря через что решать проблему - через центр или черз ширину и высоту.


Название: Отображение виджета в центре экрана
Отправлено: Admin от Сентябрь 25, 2006, 17:22
ага! я так примерно и думал!


Название: Отображение виджета в центре экрана
Отправлено: Alex03 от Сентябрь 26, 2006, 05:52
А вот нужно ли такое поведение?
Юзер задвинул диалог в угол, нажал на след.шаг, диалог в центре, опять задвинул в угол, опять  нажал на след.шаг, и диалог опять в центре?

ИМХО не правильно это.
Может у юзера по центру экрана критически важная инфа отображается. :)

Т.е. центрирование относительно предыдущего положения с контролем уплывания за край экрана ИМХО лучше.


Название: Отображение виджета в центре экрана
Отправлено: Dendy от Сентябрь 26, 2006, 09:19
Мне вот нравятся окошки nVidia'вских визардов инсталляции драйверов, рассчитанньІх на 800х600, когда сейчас у тебя на столе 640х480. Вот и думай, как дотянкться до кнопки внизу или до заголовка вверху, которьІе за екраном.

QWidget::showNormal() хотя бьІ гарантирует, что заголовок будет виден. Ето так к слову...

А вообще не нужно мешать пользователю двигать окно (-:  Он будет не рад.


Название: Отображение виджета в центре экрана
Отправлено: bigirbis от Сентябрь 27, 2006, 09:49
Так немного короче:
Код:
widget->move( QApplication::desktop()->size() - widget->size() ) / 2 )


Название: Отображение виджета в центре экрана
Отправлено: Dendy от Сентябрь 27, 2006, 13:22
Цитата: "bigirbis"
Так немного короче:
Код:
widget->move( QApplication::desktop()->size() - widget->size() ) / 2 )


К сожалению, между геометрическими классами нет методов кастирования. Типа:

Код:
QPoint QSize::toPoint() const;


Поетому короткий вариант работать не будет.


Название: Отображение виджета в центре экрана
Отправлено: bigirbis от Сентябрь 27, 2006, 14:19
Пардон, ошибся. :oops: Наверное так:
Код:
widget->move( QRect( QPoint(), ( QApplication::desktop()->size() - widget->size() ) / 2 ).bottomLeft() );

Не шибко коротко.  :?