crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Как запретить модальному диалогу растягиваться ?
kwisp
  опции профиля:
сообщение 28.2.2009, 12:16
Сообщение #11


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


flankerr,
если посмотреть свойство modal в доке по диалогу.

еще раз, если не хочешь наследоваться по своим причинам и тебе важно свойство модальности и что бы функция прерывалась на время показа диалога то можешь попробовать сделать так.
dialog->setModal(true);
dialog->show();
dialog->setFixedHeight(100);
while(dialog->isVisible()) qWait(250);


Сообщение отредактировал kwisp - 28.2.2009, 12:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.2.2009, 12:32
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


kwisp, flankerr, правильно говорит, насчет модальности не модальности.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 28.2.2009, 12:37
Сообщение #13


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 28.2.2009, 12:32) *
kwisp, flankerr, правильно говорит, насчет модальности не модальности.

т.е. exec() - модальный
show() - не модальный
???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.2.2009, 12:41
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


flankerr, еслиб тебе полностью надобыло сделать фиксированный размер (и ширину и высоту), то достаточно было бы сделать так:
pVBL->setSizeConstraint(QLayout::SetFixedSize);
т.е. для главного компоновщика
покопайся в этом направлении, может только один размер можно задать

Цитата(kwisp @ 28.2.2009, 15:37) *
т.е. exec() - модальный
show() - не модальный
???
да и только для QDialog, не QWidget
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 28.2.2009, 12:51
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Litkevich Yuriy,
я всегда думал что за это отвечает
void setModal ( bool modal );

господа разъясните пожалуйста что мешает сделать диалог модальным и воспользоваться show()???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 28.2.2009, 12:56
Сообщение #16


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


kwisp,
while(dialog->isVisible()) qWait(250);

это называется "красивым" решением ? :blink:

Цитата(Litkevich Yuriy @ 28.2.2009, 12:41) *
flankerr, еслиб тебе полностью надобыло сделать фиксированный размер (и ширину и высоту), то достаточно было бы сделать так:
pVBL->setSizeConstraint(QLayout::SetFixedSize);
т.е. для главного компоновщика
покопайся в этом направлении, может только один размер можно задать

да я сразу начал копать в сторону QLayout тока пока не нашёл как сделать фиксированнм только одно направление.

кстати еслибы не QLayout то решение было бы простым
вызов hide() просчитал бы все размеры элементов без вывода диалога на экран.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 28.2.2009, 12:59
Сообщение #17


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


flankerr,
я же написал
Цитата(kwisp @ 28.2.2009, 12:16) *
если не хочешь наследоваться по своим причинам и тебе важно свойство модальности и что бы функция прерывалась на время показа диалога то можешь попробовать сделать так.


если не хочешь чтобы функция прерывалась не пиши последнюю строчку...

я попробую объясниться на счет модальности
Цитата
By default, this property is false and show() pops up the dialog as modeless. Setting his property to true is equivalent to setting QWidget::windowModality to Qt::ApplicationModal.
exec() ignores the value of this property and always pops up the dialog as modal.


видите By default, по-моему здесь ключевое слово.
хочешь модальный диалог ничего не мешает тебе использовать show(); а зацикливаться на том что
Цитата
т.е. exec() - модальный
show() - не модальный

не верно помоему.

далее, елсли flankerr, намерен все равно использовать exec() и не переопределять showEvent() я пока не вижу методов решения задачи...
хотя это я поторопился....

Сообщение отредактировал kwisp - 28.2.2009, 13:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 28.2.2009, 13:07
Сообщение #18


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


kwisp, модальность в данном случае обязательна т.к. это диалог задаёт вопрос пользователю и даельнейшее выполнеие функции в частности и программы вообще возможно только после получения ответа от пользователя.

Цитата
что мешает сделать диалог модальным и воспользоваться show()???

модальный диалог крутиться в своём отдельном потоке. Для запуска отдельного потока вызввается exec();
на счёт setModel
Диалог может быть не модальным и работаь в отдельном потке, однако он НЕ может быть модальным и работать в потоке который его вызвал.

Сообщение отредактировал flankerr - 28.2.2009, 13:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 28.2.2009, 13:24
Сообщение #19


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(flankerr @ 28.2.2009, 13:07) *
однако он НЕ может быть модальным и работать в потоке который его вызвал


интересно и странно. а откуда такая информация???
а что же тогда делает последовательность
setModal(1);
show();
???

Цитата(flankerr @ 28.2.2009, 13:07) *
модальность в данном случае обязательна т.к. это диалог задаёт вопрос пользователю и даельнейшее выполнеие функции в частности и программы вообще возможно только после получания ответа от пользователя.

не уж то нельзя никак это обойтись без запуска отдельного потока как утверждается....
повесить ответ пользователя на результат диалога ничего не мешает. пользоваться setModal() тоже ....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 28.2.2009, 13:32
Сообщение #20


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


kwisp,
iResult = pDlg->exec()
if(iResilt)
{
}
else
{
}

1.Как ты себе представляешь выполнение кода без знания значения iResult , тогда как iResult будет известнен ТОЛЬКО после закрытия диалога?
2.Как ты себе представляешь выполнения кода внутри диалога если поток выполнения остановлен (см п.1)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.5.2024, 12:55