Название: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 11:47 Как пример, мне надо получить квадратное окно на всех разрешениях экрана с помощью setFixedSize(), на всех мониторах, короче в любых условиях.
Не могу этого добиться.Пробовал в зависимости от разрешения подбирать коэффициенты,подобрал, но на широкоформатных мониторах трюк не прошел. К тому же коэффициенты получились странные ,и нет у меня уверенности, что в других условиях все будет работать правильно. В общем, как считаются реальные размеры?Это зависит от видеокарты?нужно именно setfixedsize и коэффициенты,любые другие варианты-только в случае невозможности первого. Название: Re: setFixedSize() и реальные размеры. Отправлено: ритт от Февраль 11, 2009, 11:52 а разве setFixedSize(QSize(300, 300)) не сделает окно квадратным (+декорации)?
Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 11:54 нет не делает
Название: Re: setFixedSize() и реальные размеры. Отправлено: BRE от Февраль 11, 2009, 11:57 Как подбираешь коэффициенты?
Посмотри на QPaintDevice. Он возвращает размеры сторон в логических координатах и в мм. На основании этого можно попробовать посчитать коэффициенты. Название: Re: setFixedSize() и реальные размеры. Отправлено: ритт от Февраль 11, 2009, 11:59 тогда курить QPaintDevice про dpi
Название: Re: setFixedSize() и реальные размеры. Отправлено: Rcus от Февраль 11, 2009, 12:46 Все же хотелось бы узнать для начала что именно не работает? У меня /*WinXP + Qt450ss-20081217; разрешение 1680x1050*/ все нормально устанавливается
Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 13:23 Описать вкратце реальное приложение и проблемы, связанные с ним, просто слов не подобрать.
Создал тестовое приложение виндовс куте 4.2.2 QWidget*w = new QWidget(); w->setFixedSize(QSize(200,200)); w->show(); мерею линейкой получившийся квадрат.высота заметно больше длины.Для начала мне надо убрать хотя бы это.дальше уж разберусь. Название: Re: setFixedSize() и реальные размеры. Отправлено: Rcus от Февраль 11, 2009, 13:25 Не знаю что вы именно измеряете /*подозреваю что по краю видимого фрейма*/. Возможно поможет http://doc.trolltech.com/4.4/geometry.html
Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 13:47 я измеряю clientArea в мм.и получаю примерно 6,5 на 7 см.Когда там будет картинка-она растянется по вертикали и будет некрасивой.
если написать . w->setFixedSize(QSize(200*xDsp/(1.25*yDsp),200)); то получается квадрат. xDsp, yDsp- разрешение экрана. Но на широкоформатном мониторе квадрат вновь превращается в прямоугольник, да и откуда взялась 1.25 я не знаю, а знать обязан. Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 14:56 В общем ситуация прояснилась,но легче не стало.
Оказалось, что у меня монитор не 4:3 а 5:4 и на разрешении 1280:1024(5:4)получается квадрат, а при 1024:768(4:3)-прямоугольник.Соответственно, чтобы правильно отображать, мне надо знать как соотносятся стороны монитора(рекомендуемое разрешение) и текущее разрешение.текущее я знаю, а как узнать рекомендованное? Название: Re: setFixedSize() и реальные размеры. Отправлено: Rcus от Февраль 11, 2009, 15:34 ааааааа то есть вы хотите компенсировать искажение изображения при использовании разрешения с неродным соотношением сторон? :) /*sigh of relief*/ Врядли это возможно средствами Qt, да и смысл: все равно даже если ваше окно будет квадратным все остальное пространство будет искажено
Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 15:49 можно бы было забить.да вот проблема.люди, принимающие программу, ничего не понимают и им глубоко плевать, должно смотреться.а у них как на зло мониторы 5:4 с разрешением 1024:768. смотрится это,кстати,нормально.я и не знал, что у меня не рекомендованное разрешение стоит.А делать только под них естественно нельзя(
Ведь видеокарта это рисует!она знает!у нее спросить надо.только вот я с ней не знаком( Название: Re: setFixedSize() и реальные размеры. Отправлено: Rcus от Февраль 11, 2009, 16:05 Подождите ка. Если на мониторе с соотношением сторон 5:4 установить разрешение 4:3 то он будет либо искажать картинку (у меня так ругается 20" LG при установке 1920x1080 при родных 1680x1050), либо оставлять неиспользуемое пространство
Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 16:30 конкретно монитор flatron l1753s является 5:4, но 1280 на 1024 мне мелко.работаю 1024 на 768.
он искажает, но выглядит это вполне прилично.я и не знал, что он искажает Все, что я пока нашел это функция winapi EnumDisplaySettings, способная вернуть все возможные разрешения. я так понимаю, что самое большое является оптимальным. по нему можно высчитать.но это такой опасный финт ушами... Может так сделать?или искать дальше? Может в qt что-нибудь типа-того есть? Название: Re: setFixedSize() и реальные размеры. Отправлено: BRE от Февраль 11, 2009, 16:58 Берем widget, делаем ему resize( 100, 100 );
Смотрим, что выводят следующие методы класса QPaintDevice, от которого, кстати, наследуется QWidget: Код
Цитировать Width = 100 pix 24 mm Height = 100 pix 22 mm Думаем... Считаем 24 / 22 = 1,(09) Делаем resize( 100, 100 * 1,09 ); Смотри: Цитировать Width = 100 pix 24 mm Height = 109 pix 24 mm Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 11, 2009, 17:37 это я попробовал в первую очередь.получил
setFixedSize(200,200);получил 66 66 setFixedSize(300,300);получил 99 99 сейчас попробовал ваши setFixedSize(300,300) неожиданно получил 38 33 обалдел.но 38/33 -неправильный коеффициент. Название: Re: setFixedSize() и реальные размеры. Отправлено: vdann от Февраль 11, 2009, 17:47 ...setFixedSize(...) => размеры в пикселях!!!, а они не всегда квадратные, с такими проблемами сталкиваются когда например на любом устройстве (на разных) нужно рисовать в своих условных единицах (пр. мм):
Код
..размер окна у тебя всегда будет фиксированный, если переопределить QWidget::resizeEvent( QResizeEvent * event ) и там таким же способом вычислять размер, то окно у тебя будет растягиваться визуально "квадратно" на любом мониторе. Название: Re: setFixedSize() и реальные размеры. Отправлено: npopok от Февраль 12, 2009, 10:53 а вы сами этот код пробовали на нештатном разрешении?
не знаю как у вас, но у меня widthMM() и heightMM() по факту своему названию не соответствуют Название: Re: setFixedSize() и реальные размеры. Отправлено: vdann от Февраль 12, 2009, 12:37 ...работаю на жк мониторе, до этого пользовался этим не задумывался,
сейчас пробовал: - разрешение монитора совпадает с тем разрешением, которое формирует ОС, всё как по линейке (мерил); - разрешение монитора не совпадает с тем разрешением, которое формирует ОС, по вертикали все нормально, а по горизонтали нет (размер экрана widthMM() в мм 360, а по линейке 436). После этого попробовал ЭЛТ, там на разных разрешениях разница 1-2 мм, возможно изменяется толщина рамки виджета. В крайнем случае размер экрана можно попробовать получать функциями API ОС. Название: Re: setFixedSize() и реальные размеры. Отправлено: ритт от Февраль 13, 2009, 06:20 Код
элт-шки у меня нет - проверить не могу. |