Название: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: hunter1 от Марта 03, 2013, 13:56 Здравствуйте, не отправляйте меня сразу учиться пользоваться поиском по форуму, вопросы с такой формулировкой задавались и раньше. Обычно проблема была с банальным не умением пользоваться QGridLayout и QBoxLayout, но мой вопрос в другом.
У меня есть окно (рисунок 1), если его начать растягивать, то виджеты (а именно кнопки) изменяют свои размеры только по ширине (рисунок 2). А я хочу, чтобы менялась и высота виджетов и текст в них, нафотошопил то, что хотелось бы получить (рисунок 3). Рисунок 1: (http://s53.radikal.ru/i140/1303/1e/26fbae2b88c2.png) (http://www.radikal.ru) Рисунок 2: (http://s017.radikal.ru/i407/1303/bd/5fbfcd17bf27.png) (http://www.radikal.ru) Рисунок 3 (не очень красиво нарисовал, но смысл понятен): (http://s58.radikal.ru/i161/1303/27/08647b956952.png) (http://www.radikal.ru) Код: Код: #include <QApplication> Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: VPS от Марта 03, 2013, 14:25 Для того, чтобы кнопка занимала всю ячейку - смотрите в сторону sizePolicy (по умолчанию, вертикальная политика - Fixed).
А вот для изменения размера шрифта, можно наследоваться от класса QPushButton и переопределять метод resizeEvent... Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: hunter1 от Марта 08, 2013, 01:23 Да, размеры кнопки можно менять настроив sizePolicy. Настроил одну кнопку например:
Код: btn1->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Expanding); Но как сделать так, чтобы и шрифт увеличивался с увеличением кнопки еще не нашел :-[ В интернетах предлагают изменять шрифт программно, насколько увеличился объект, на столько увеличить и размер шрифта в нем. Например - http://stackoverflow.com/questions/8796380/automatically-resizing-label-text-in-qt-strange-behaviour. Еще не проверял. Я хотел попробовать запихнуть все кнопки в сцену, а сцену трансформировать. Мне сначала показалось хорошей идеей, но потом отказался. Если кнопка была небольшая, а потом ее растянуть в сцене, то выйдет "пиксельная" кнопка, точно также как у меня вышло в моем первом посте (рисунок 3). Надеюсь вы поняли о чем я - сравните рисунок 3 в моем первом сообщение и рисунок который я приложил чуть выше в этом сообщение. На рисунке 3, ярко выражены границы из растянутых пикселей (так как я растянул форму в паинте), а на рисунке чуть выше, где qt сам увеличил размеры кнопки, границы мягкие. ;) Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: ConConovaloff от Марта 08, 2013, 02:56 Добрый день.
2 стандартных способа задать размер шрифта для QPushButton: 1) создать QFont, указать ему параметры (размер), и подставлять в QPushButton->setFont() Код
2) QSS Код
В этом случае, вы получаете красивый, плавный, большой шрифт. Если вы желаете задавать шрифт динамически при изменение размера окна, то стандартный способ, это переопределить событие "resizeEvent": Код
В этом случае, когда вы будете менять размер окна -> будет вызываться функция resizeEvent и изменять размер шрифта. Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: hunter1 от Марта 08, 2013, 20:14 ConConovaloff, нужно именно для динамического изменения. Большое спасибо! Я не знал про существование setPixelSize, не разбирал код на который кидал ссылку, но оно и там ключевое. Самое удобное, что если шрифт не будет влезать по ширине (это возможно если растягивать окно только по вертикали), то ширина объекта тоже будет увеличиваться. :)
Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: hunter1 от Марта 09, 2013, 02:10 Все отлично работает, но у меня все же есть вопросик :D
Почему не выходит задать текст кнопки при ее создании, вылетает ошибка. Не хочет MyPushButton иметь в себе аргумент (как я показал ниже), задать текст можно только через setText, а вот так нет: Код: MyPushButton* testButton = new MyPushButton ([b]"Текст"[/b]); Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: Figaro от Марта 09, 2013, 05:25 У MyPushButton отсутствует такой конструктор...
Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: hunter1 от Марта 09, 2013, 11:00 Так вроде же MyPushButton наследовался от QPushButton, где такая возможность имелась. Куда она исчезла? :)
Название: Re: Изменение размеров виджетов (шрифта) при изменении размера окна Отправлено: Figaro от Марта 09, 2013, 13:00 Не помню точно раздел стандарта плюсов, но пропиши конструктор:
Код: MyPushButton( const QString & text, QWidget * parent = 0 ) с вызовом Код: QPushButton ( const QString & text, QWidget * parent = 0 ) |