Как запретить модальному диалогу растягиваться ? |
Здравствуйте, гость ( Вход | Регистрация )
Как запретить модальному диалогу растягиваться ? |
flankerr |
27.2.2009, 18:47
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
Как запретить диалогу изменять вертикальный размер но оставить возмоджность менять горизонтальный размер ???
Код создания диалога:
|
|
|
Litkevich Yuriy |
27.2.2009, 19:34
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
lucifer_vrn |
28.2.2009, 10:17
Сообщение
#3
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
согласен, что sizePolicy тут нафиг не нужен.
а вот метод установки фиксированного размера, не айс. куда проще заюзать void QWidget::setFixedWidth ( int w ) если прям в конструкторе диалога или после создания, но до отображения, чтоб он сам прочситал свой оптимальный размер и зафиксил его, то можно так: QDialog* pDlg = new QDialog(this); pDlg->show() pDlg->setFixedWidth( pDlg->width ) |
|
|
flankerr |
28.2.2009, 11:05
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
Нужно задать два размера максимальный и минимальный, например для высоты = 500: Размер диалога НЕ известен и должен автоматом ставиться в зависимости от содеожания.
Цитата это я уже в "бубны" стучал QDialog* pDlg = new QDialog(this); Это всё конечно замечатльно, только вот мне нужен не show() а exec() pDlg->show() pDlg->setFixedWidth( pDlg->width ) пока сделал так: для маленького диалога сгодиться, а вот на большом возможно будет заметно что диалог открылся закрылся и снова открылся...
Сообщение отредактировал flankerr - 28.2.2009, 11:06 |
|
|
kwisp |
28.2.2009, 11:18
Сообщение
#5
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
pDlg->show(); pDlg->setFixedHeight(pDlg->height()); pDlg->close(); pDlg->exec(); как то некрасиво. Это всё конечно замечатльно, только вот мне нужен не show() а exec() 1. это чем же exec() настолько лучше show()? 2. попробуй переопределить QDialog::showevent() и там устанавливать размер, раз тебе так необходим exec(). на худой конец тут тема на форуме была что то типа "определение размеров окна до его показа".... |
|
|
flankerr |
28.2.2009, 11:36
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
pDlg->show(); pDlg->setFixedHeight(pDlg->height()); pDlg->close(); pDlg->exec(); как то некрасиво. согласен и готов выслушать более удачные варианты. Цитата Это всё конечно замечатльно, только вот мне нужен не show() а exec() 1. это чем же exec() настолько лучше show()? Не лучше и не хуже просто РАЗНЫЙ способ вывода диалога. Если на пальцах то в случае exec() выполнение функции прерывается до закрытия диалога (т.е. диалог модальный) в случае show() выполение функции в которой был вызван диалог продолжается т.е диалог не модальный. Цитата 2. попробуй переопределить QDialog::showevent() и там устанавливать размер, раз тебе так необходим exec(). Совершенно верно и это отлично сработает. Только вот городить класс-наследник ради диалога в одну строчку это ещё более не красиво чем предложенное мной решение Цитата на худой конец тут тема на форуме была что то типа "определение размеров окна до его показа".... там вроде как раз и обсуждалось переопределение QDialog::showevent() |
|
|
kwisp |
28.2.2009, 11:46
Сообщение
#7
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
Не лучше и не хуже просто РАЗНЫЙ способ вывода диалога. Если на пальцах то в случае exec() выполнение функции прерывается до закрытия диалога (т.е. диалог модальный) в случае show() выполение функции в которой был вызван диалог продолжается т.е диалог не модальный. модальный это если пока не закроешь не получишь фокус другого окна(и вообще оно(другое окно) события принимать от пользовател не должно) а не то что написано выше(что мол ехес() модальный а show() не модальный). для модальности флаги специальный любому виджету имеющему окно можно модальность назанчить...вполне возможно диалог модален по умолчанию. и потом даже если ты не хочешь городить класс наследник(что помоему нормально целиком и полностью) и хочешь к примеру чтоб программа ожидала результата диалога можешь использовать ожидание в конце концов...но это вопрос задачи уже - неизвестно для чего тебе это. show() setFixedHeight() ожидание закрытия диалога. Сообщение отредактировал kwisp - 28.2.2009, 11:47 |
|
|
flankerr |
28.2.2009, 11:54
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
Не лучше и не хуже просто РАЗНЫЙ способ вывода диалога. Если на пальцах то в случае exec() выполнение функции прерывается до закрытия диалога (т.е. диалог модальный) в случае show() выполение функции в которой был вызван диалог продолжается т.е диалог не модальный. show() setFixedHeight() ожидание закрытия диалога. читай доки |
|
|
kwisp |
28.2.2009, 12:00
Сообщение
#9
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
flankerr,
удостойте меня пожалуйста более развернутым ответом, а то доки большие все не прочесть и за неделю, может где то я не прав так поправьте смелее... |
|
|
flankerr |
28.2.2009, 12:08
Сообщение
#10
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
flankerr, удостойте меня пожалуйста более развернутым ответом, а то доки большие все не прочесть и за неделю, может где то я не прав так поправьте смелее... Так я сразу написал подробно. Вот выдержка из Qt Assistant Цитата int QDialog::exec () [slot]
Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result. |
|
|
Текстовая версия | Сейчас: 21.12.2024, 19:14 |