Russian Qt Forum
Июнь 04, 2024, 14:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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

это я попробовал в первую очередь.получил
setFixedSize(200,200);получил  66 66
setFixedSize(300,300);получил  99 99
сейчас попробовал ваши setFixedSize(300,300) неожиданно получил 38 33
обалдел.но 38/33 -неправильный коеффициент.


Записан
vdann
Гость
« Ответ #16 : Февраль 11, 2009, 17:47 »

...setFixedSize(...) => размеры в пикселях!!!, а они не всегда квадратные, с такими проблемами сталкиваются когда например на любом устройстве (на разных) нужно рисовать в своих условных единицах (пр. мм):   
Код
C++ (Qt)
// добавил в конструктор
 
// те размеры которые тебе нужны (в мм)
double newWidth = 100;
double newHeight = 100;
 
QDesktopWidget dw;
QWidget* w = dw.screen();
 
// размеры устройства
double dmWidth = w->width();
double dmHeight = w->height();
double dmWidthMM = w->widthMM();
double dmHeightMM = w->heightMM();
 
qDebug() << dmWidth;
qDebug() << dmHeight;
qDebug() << dmWidthMM;
qDebug() << dmHeightMM;
 
// разрешение (по высоте и ширине возможно разное)
double resolutionWidth = dmWidthMM / dmWidth;
double resolutionHeight = dmHeightMM / dmHeight;
 
qDebug() << resolutionWidth;
qDebug() << resolutionHeight;
 
// новые размеры в пикселях
newWidth /= resolutionWidth;
newHeight /= resolutionHeight;
 
qDebug() << newWidth;
qDebug() << newHeight;
 
setFixedSize(newWidth, newHeight);
 

..размер окна у тебя всегда будет фиксированный, если переопределить QWidget::resizeEvent( QResizeEvent * event ) и там таким же способом вычислять размер, то окно у тебя будет растягиваться визуально "квадратно" на любом мониторе.
Записан
npopok
Гость
« Ответ #17 : Февраль 12, 2009, 10:53 »

а вы сами этот код пробовали на нештатном разрешении?
не знаю как у вас, но у меня widthMM() и heightMM() по факту  своему названию не соответствуют
Записан
vdann
Гость
« Ответ #18 : Февраль 12, 2009, 12:37 »

...работаю на жк мониторе, до этого пользовался этим не задумывался,
сейчас пробовал:
- разрешение монитора совпадает с тем разрешением, которое формирует ОС, всё как по линейке (мерил);
- разрешение монитора не совпадает с тем разрешением, которое формирует ОС, по вертикали все нормально, а по горизонтали нет (размер экрана widthMM() в мм 360, а по линейке 436).
После этого попробовал ЭЛТ, там на разных разрешениях разница 1-2 мм, возможно изменяется толщина рамки виджета.
В крайнем случае размер экрана можно попробовать получать функциями API ОС.
Записан
ритт
Гость
« Ответ #19 : Февраль 13, 2009, 06:20 »

Код
C++ (Qt)
int w, h;
w = h = 750;
QDesktopWidget* dw = qApp->desktop();
qreal factor = dw->width() / dw->height();
h /= factor;
 
QWidget* widget = new QWidget;
wdget->setFixedSize(w, h);
 

элт-шки у меня нет - проверить не могу.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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