Russian Qt Forum
Ноябрь 24, 2024, 19:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисовать диалоги по центру.  (Прочитано 6398 раз)
pashazz
Гость
« : Июль 21, 2010, 00:41 »

Наблюдается такая фигня:


Как бы мне рисовать диалог по центру? Понятно, что нужно использовать setGeometry, но нужно по центру. Может, в Qt можно без платформозависимых средств узнать разрешение экрана?

Диалог создается так:
Код
C++ (Qt)
waitDialog = new QDialog (0);
waitDialog->setModal(true);
waitDialog->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowMinimizeButtonHint);
QHBoxLayout *layout = new QHBoxLayout(waitDialog);
QLabel *label = new QLabel (waitDialog);
label->setText(message);
layout->addWidget(label);
waitDialog->setLayout(layout);
waitDialog->show();
 
 
Записан
igor_bogomolov
Гость
« Ответ #1 : Июль 21, 2010, 01:08 »

Как бы мне рисовать диалог по центру?
Этого вопроса было бы вполне достаточно. Зачем вставлять такие огромные скриншоты в сообщение? Злой

Ссылка
Дополнение. Если диалоговому окну задать родительский виджет, то окно будет появляться в центре этого виджета.
« Последнее редактирование: Июль 21, 2010, 01:12 от igor_bogomolov » Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #2 : Июль 21, 2010, 08:00 »

Вместо
Код:
waitDialog->show();

используй
Код:
waitDialog->exec();
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Июль 21, 2010, 17:10 »

Код
C++ (Qt)
widget->move( (QApplication::desktop()->width() - widget->width()) / 2,
             (QApplication::desktop()->height() - widget->height()) / 2 );
 
Записан

kubuntu/Win7/x64/NetBeans
zenden
Гость
« Ответ #4 : Июль 21, 2010, 17:19 »

Цитировать
Зачем вставлять такие огромные скриншоты в сообщение?

как зачем? чтобы пиарить свой продукт
Записан
pashazz
Гость
« Ответ #5 : Июль 21, 2010, 22:07 »

вы таки загнули, я не хочу ничего пиарить. Честно, больше не буду скрины вставлять.
Записан
pashazz
Гость
« Ответ #6 : Июль 21, 2010, 22:08 »

Вместо
Код:
waitDialog->show();

используй
Код:
waitDialog->exec();


нельзя, exec() забирает управление себе, для меня это неприемлемо
Записан
SABROG
Гость
« Ответ #7 : Июль 21, 2010, 22:39 »

нельзя, exec() забирает управление себе, для меня это неприемлемо
Какое управление? Модальный диалог создается чтоль?
Записан
pashazz
Гость
« Ответ #8 : Июль 21, 2010, 22:46 »

Нет, просто при show() диалог появляется и управление переходит к функции, его вызвавшей сразу.
А при exec() нужно ждать, пока юзер закроет диалог.
Записан
ufna
Гость
« Ответ #9 : Июль 22, 2010, 08:29 »

ну а зачем тогда делать QDialog? это самый обычный виджет по смыслу.

использую шоу эвент. А в нем:

Код
C++ (Qt)
   QRect r( 0, 0, width(), height() ); // Window rectangle
   move(QApplication::desktop()->screenGeometry().center() - r.center());
Записан
crossly
Гость
« Ответ #10 : Июль 22, 2010, 09:31 »

pashazz вы автор этого произведения??.... если да то хотелось бы задать вопрос.... извините за офтоп конечно...

пробовал поставить с этим чудом CS .... все дело остановилось на установке nograshdialog.... т.е winegame показал диалог установки и все... провисел этот дилог пару часов и пришлось кильнуть его... в чем мот быть причина??
Записан
SABROG
Гость
« Ответ #11 : Июль 22, 2010, 11:21 »

А в нем:

Код
C++ (Qt)
   QRect r( 0, 0, width(), height() ); // Window rectangle
   move(QApplication::desktop()->screenGeometry().center() - r.center());

Самый короткий и более правильный вариант:

Код
C++ (Qt)
move(qApp->desktop()->availableGeometry().center()-rect().center());
 

availableGeometry() меняется в зависимости от размеров Панели Задачи. Если её растянуть на пол экрана, то вариант с screenGeometry() будет не верно позиционировать окно по вертикали.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.28 секунд. Запросов: 23.