![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
flankerr |
![]() ![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Как запретить диалогу изменять вертикальный размер но оставить возмоджность менять горизонтальный размер ???
Код создания диалога:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
lucifer_vrn |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
согласен, что sizePolicy тут нафиг не нужен.
а вот метод установки фиксированного размера, не айс. куда проще заюзать void QWidget::setFixedWidth ( int w ) если прям в конструкторе диалога или после создания, но до отображения, чтоб он сам прочситал свой оптимальный размер и зафиксил его, то можно так: QDialog* pDlg = new QDialog(this); pDlg->show() pDlg->setFixedWidth( pDlg->width ) |
|
|
flankerr |
![]()
Сообщение
#4
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Нужно задать два размера максимальный и минимальный, например для высоты = 500: Размер диалога НЕ известен и должен автоматом ставиться в зависимости от содеожания.
Цитата это я уже в "бубны" стучал ![]() QDialog* pDlg = new QDialog(this); Это всё конечно замечатльно, только вот мне нужен не show() а exec() pDlg->show() pDlg->setFixedWidth( pDlg->width ) ![]() пока сделал так: для маленького диалога сгодиться, а вот на большом возможно будет заметно что диалог открылся закрылся и снова открылся...
Сообщение отредактировал flankerr - 28.2.2009, 11:06 |
|
|
kwisp |
![]()
Сообщение
#5
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
pDlg->show(); pDlg->setFixedHeight(pDlg->height()); pDlg->close(); pDlg->exec(); как то некрасиво. Это всё конечно замечатльно, только вот мне нужен не show() а exec() ![]() 1. это чем же exec() настолько лучше show()? 2. попробуй переопределить QDialog::showevent() и там устанавливать размер, раз тебе так необходим exec(). на худой конец тут тема на форуме была что то типа "определение размеров окна до его показа".... |
|
|
flankerr |
![]()
Сообщение
#6
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
pDlg->show(); pDlg->setFixedHeight(pDlg->height()); pDlg->close(); pDlg->exec(); как то некрасиво. согласен и готов выслушать более удачные варианты. Цитата Это всё конечно замечатльно, только вот мне нужен не show() а exec() ![]() 1. это чем же exec() настолько лучше show()? Не лучше и не хуже просто РАЗНЫЙ способ вывода диалога. Если на пальцах то в случае exec() выполнение функции прерывается до закрытия диалога (т.е. диалог модальный) в случае show() выполение функции в которой был вызван диалог продолжается т.е диалог не модальный. Цитата 2. попробуй переопределить QDialog::showevent() и там устанавливать размер, раз тебе так необходим exec(). Совершенно верно и это отлично сработает. Только вот городить класс-наследник ради диалога в одну строчку это ещё более не красиво чем предложенное мной решение ![]() Цитата на худой конец тут тема на форуме была что то типа "определение размеров окна до его показа".... там вроде как раз и обсуждалось переопределение QDialog::showevent() |
|
|
kwisp |
![]()
Сообщение
#7
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Не лучше и не хуже просто РАЗНЫЙ способ вывода диалога. Если на пальцах то в случае exec() выполнение функции прерывается до закрытия диалога (т.е. диалог модальный) в случае show() выполение функции в которой был вызван диалог продолжается т.е диалог не модальный. ![]() модальный это если пока не закроешь не получишь фокус другого окна(и вообще оно(другое окно) события принимать от пользовател не должно) а не то что написано выше(что мол ехес() модальный а show() не модальный). для модальности флаги специальный любому виджету имеющему окно можно модальность назанчить...вполне возможно диалог модален по умолчанию. и потом даже если ты не хочешь городить класс наследник(что помоему нормально целиком и полностью) и хочешь к примеру чтоб программа ожидала результата диалога можешь использовать ожидание в конце концов...но это вопрос задачи уже - неизвестно для чего тебе это. show() setFixedHeight() ожидание закрытия диалога. Сообщение отредактировал kwisp - 28.2.2009, 11:47 |
|
|
flankerr |
![]()
Сообщение
#8
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Не лучше и не хуже просто РАЗНЫЙ способ вывода диалога. Если на пальцах то в случае exec() выполнение функции прерывается до закрытия диалога (т.е. диалог модальный) в случае show() выполение функции в которой был вызван диалог продолжается т.е диалог не модальный. ![]() show() setFixedHeight() ожидание закрытия диалога. читай доки |
|
|
kwisp |
![]()
Сообщение
#9
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
flankerr,
удостойте меня пожалуйста более развернутым ответом, а то доки большие все не прочесть и за неделю, может где то я не прав так поправьте смелее... |
|
|
flankerr |
![]()
Сообщение
#10
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
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. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.2.2025, 9:48 |