Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: torwig от Мая 28, 2012, 13:41



Название: [РЕШЕНО] Разные разрешения монитора
Отправлено: torwig от Мая 28, 2012, 13:41
Добрый день. У меня вопрос следующего содержания.
Есть форма, на ней есть QLabel, QWebView, QPushButtons, QGroupBox, QWidget. Изначально все это отрисова с фиксированными размерами под общий размер 1024*768. Естественно, на мониторах с меньшим разрешением(или если запускать в ОС с VirtualBox) все налазит друг на друга/не влезает в экран.
Вопрос: как адаптировать приложение для разных разрешений, в какую сторону копать? QSizePolicy выставить я так понимаю.
И самый главный вопрос, что-то решение в голову пока не приходит. Есть кнопка, ее фоновую картинку задаю setStyleSheet(), две картинки, когда обычная и :pressed. И размеры будут меняться кнопки, следовательно нужно менять размеры картинки фона. Пробовал через setIcon(), вроде бы ничего, но а как задать изображение для :pressed?

п.с. похожих тем не нашел. или плохо искал, тогда прошу тыкнуть носом)
заранее спасибо


Название: Re: Разные разрешения монитора
Отправлено: navrocky от Мая 28, 2012, 13:45
Изучай лайауты. Попробуй в дизайнере с ними поиграться.

А для натягивания картинок на кнопки style sheets тебе подойдут, там можно задать отдельные картинки для рисования рамки, фона. Также можно задать правила отрисовки фона (плиткой, растягивать...)


Название: Re: Разные разрешения монитора
Отправлено: soiam от Мая 28, 2012, 14:42
Цитировать
И самый главный вопрос, что-то решение в голову пока не приходит. Есть кнопка, ее фоновую картинку задаю setStyleSheet(), две картинки, когда обычная и :pressed. И размеры будут меняться кнопки, следовательно нужно менять размеры картинки фона. Пробовал через setIcon(), вроде бы ничего, но а как задать изображение для :pressed?
как-то так
Код:
connect(button,SIGNAL(toggled(bool)),this,SLOT(button_pressed(bool)));

void MainForm::button_pressed(bool value)
{
 if (value)
   button -> setIcon(xxxx);
 else
   button -> setIcon(yyyy);
}


Название: Re: Разные разрешения монитора
Отправлено: torwig от Мая 28, 2012, 14:58
Спасибо,  soiam, иконка отображается.
А чтобы иконка изменялась вместе с размером кнопки, все манипуляции с этой иконкой нужно проводить в resizeEvent()?


Название: Re: Разные разрешения монитора
Отправлено: soiam от Мая 28, 2012, 15:10
Да, я бы наверное в resizeEvent вставил бы бы setIconSize


Название: Re: Разные разрешения монитора
Отправлено: Bepec от Мая 28, 2012, 16:05
Эммм... а может стайлшитом? Гораздо удобнее и быстрее получается, не?


Название: Re: Разные разрешения монитора
Отправлено: torwig от Мая 28, 2012, 16:13
Так сейчас и есть стайлшитом. Размер изображения ведь нужно менять, иначе просто урезается, если например кнопка становится 50*50, а фоновое изображение 100*100. И что-то setIconSize() не рабоатет, или неверно использую


Название: Re: Разные разрешения монитора
Отправлено: navrocky от Мая 28, 2012, 16:21
Не понятно. Тебе нужно иконку менять или внешний вид всей кнопки? Если ты пытаешься иконкой перекрыть всю кнопку - то это кривой метод, лучше через style sheet.


Название: Re: Разные разрешения монитора
Отправлено: Bepec от Мая 28, 2012, 16:41
Стайлшит это CSS. Каскадные таблицы стилей, независимые от твоего кода.

А то, что вы сейчас делаете - попытка сделать свой велосипед.

Возможно я неправ.


Название: Re: Разные разрешения монитора
Отправлено: torwig от Мая 28, 2012, 17:16
Да, так сейчас и идет через каскадые таблицы. Но если кнопка 100*100, картинка 100*100, устанавливает бэкграунд-имэйдж и вуаля. А если размер кнопки уменьшается, то картинка урезается. Смотрел background-size, но на него ругается Qt.


Название: Re: Разные разрешения монитора
Отправлено: navrocky от Мая 29, 2012, 09:50
border-image: url(skin:background.png) stretch stretch;


Название: Re: Разные разрешения монитора
Отправлено: torwig от Мая 30, 2012, 08:34
Большое спасибо, navrocky. Работает.
Именно то, что я искал.