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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: setFixedSize() и реальные размеры.  (Прочитано 13570 раз)
npopok
Гость
« : Февраль 11, 2009, 11:47 »

Как пример, мне надо получить квадратное окно на всех разрешениях экрана с помощью setFixedSize(), на всех мониторах, короче в любых условиях.
Не могу этого добиться.Пробовал в зависимости от разрешения подбирать коэффициенты,подобрал, но на широкоформатных мониторах трюк не прошел.
К тому же коэффициенты получились странные ,и нет у меня уверенности, что в других условиях все будет работать правильно.
В общем, как считаются реальные размеры?Это зависит от видеокарты?нужно именно setfixedsize и коэффициенты,любые другие варианты-только в случае невозможности первого.
Записан
ритт
Гость
« Ответ #1 : Февраль 11, 2009, 11:52 »

а разве setFixedSize(QSize(300, 300)) не сделает окно квадратным (+декорации)?
Записан
npopok
Гость
« Ответ #2 : Февраль 11, 2009, 11:54 »

нет не делает
Записан
BRE
Гость
« Ответ #3 : Февраль 11, 2009, 11:57 »

Как подбираешь коэффициенты?

Посмотри на QPaintDevice.
Он возвращает размеры сторон в логических координатах и в мм.
На основании этого можно попробовать посчитать коэффициенты.
Записан
ритт
Гость
« Ответ #4 : Февраль 11, 2009, 11:59 »

тогда курить QPaintDevice про dpi
Записан
Rcus
Гость
« Ответ #5 : Февраль 11, 2009, 12:46 »

Все же хотелось бы узнать для начала что именно не работает? У меня /*WinXP + Qt450ss-20081217; разрешение 1680x1050*/ все нормально устанавливается
Записан
npopok
Гость
« Ответ #6 : Февраль 11, 2009, 13:23 »

Описать вкратце реальное приложение и проблемы, связанные с ним, просто слов не подобрать.
Создал тестовое приложение виндовс куте 4.2.2
QWidget*w = new QWidget();
w->setFixedSize(QSize(200,200));
w->show();
мерею линейкой получившийся квадрат.высота заметно больше длины.Для начала мне надо убрать хотя бы это.дальше уж разберусь.
Записан
Rcus
Гость
« Ответ #7 : Февраль 11, 2009, 13:25 »

Не знаю что вы именно измеряете /*подозреваю что по краю видимого фрейма*/. Возможно поможет http://doc.trolltech.com/4.4/geometry.html
Записан
npopok
Гость
« Ответ #8 : Февраль 11, 2009, 13:47 »

я измеряю clientArea в мм.и получаю примерно 6,5 на 7 см.Когда там будет картинка-она растянется по вертикали и будет некрасивой.
если написать .
w->setFixedSize(QSize(200*xDsp/(1.25*yDsp),200)); то получается квадрат. xDsp, yDsp- разрешение экрана.
Но на широкоформатном мониторе квадрат вновь превращается в прямоугольник, да и откуда взялась 1.25 я не знаю, а знать обязан.
Записан
npopok
Гость
« Ответ #9 : Февраль 11, 2009, 14:56 »

В общем ситуация прояснилась,но легче не стало.
Оказалось, что у меня монитор не 4:3 а 5:4 и на разрешении 1280:1024(5:4)получается квадрат, а при 1024:768(4:3)-прямоугольник.Соответственно, чтобы правильно отображать, мне надо знать как соотносятся стороны монитора(рекомендуемое разрешение) и текущее разрешение.текущее я знаю, а как узнать рекомендованное?
Записан
Rcus
Гость
« Ответ #10 : Февраль 11, 2009, 15:34 »

ааааааа то есть вы хотите компенсировать искажение изображения при использовании разрешения с неродным соотношением сторон? Улыбающийся /*sigh of relief*/ Врядли это возможно средствами Qt, да и смысл: все равно даже если ваше окно будет квадратным все остальное пространство будет искажено
Записан
npopok
Гость
« Ответ #11 : Февраль 11, 2009, 15:49 »

можно бы было забить.да вот проблема.люди, принимающие программу, ничего не понимают и им глубоко плевать, должно смотреться.а у них как на зло  мониторы 5:4 с разрешением 1024:768. смотрится это,кстати,нормально.я и не знал, что у меня не рекомендованное разрешение стоит.А делать только под них естественно нельзя(
Ведь видеокарта это рисует!она знает!у нее спросить надо.только вот я с ней не знаком(
Записан
Rcus
Гость
« Ответ #12 : Февраль 11, 2009, 16:05 »

Подождите ка. Если на мониторе с соотношением сторон 5:4 установить разрешение 4:3 то он будет либо искажать картинку (у меня так ругается 20" LG при установке 1920x1080 при родных 1680x1050), либо оставлять неиспользуемое пространство
« Последнее редактирование: Февраль 11, 2009, 16:44 от Rcus » Записан
npopok
Гость
« Ответ #13 : Февраль 11, 2009, 16:30 »

конкретно монитор flatron l1753s является 5:4, но 1280 на 1024 мне мелко.работаю 1024 на 768.
он искажает, но выглядит это вполне прилично.я и не знал, что он искажает
Все, что я пока нашел это функция winapi EnumDisplaySettings, способная вернуть  все возможные разрешения. я так понимаю, что самое большое является оптимальным. по нему можно высчитать.но это такой опасный финт ушами...
Может так сделать?или искать дальше?
Может в qt что-нибудь типа-того есть?
Записан
BRE
Гость
« Ответ #14 : Февраль 11, 2009, 16:58 »

Берем widget, делаем ему resize( 100, 100 );

Смотрим, что выводят следующие методы класса QPaintDevice, от которого, кстати, наследуется QWidget:
Код
C++ (Qt)
qDebug() << "Width  =" << width() << "pix " << widthMM() << "mm" << '\n'
<< "Height =" << height() << "pix " << heightMM() << "mm";
 

Цитировать
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
« Последнее редактирование: Февраль 11, 2009, 17:13 от BRE » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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