Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Геннадий Пастухов от Ноябрь 15, 2009, 13:22



Название: Размножение ? QLabel
Отправлено: Геннадий Пастухов от Ноябрь 15, 2009, 13:22
Рисую собственную форму. В верхней части экрана мне нужна бегущая строка хитрого вида (на картинке)http://laul.no-ip.info/topBar.png (http://laul.no-ip.info/topBar.png). Решил сделать QLabel, загрузить в него картинку, а потом уже поверх него расположить виджет с бегущим текстом. Но этот QLabel должен растягиваться и сжиматься по ширине при изменении размеров окна приложения. Для этого в paintEvent главной формы я выставляю новую геометрию для него через setGeometry. И, видимо, что-то делаю не так, потому что вместо изменения размеров при растягивании окна справа появляются его копии. Также, как если картинку на рабочий стол Windows вывести с параметром "Мозаикой". В-общем, вопросов 2:
- Может есть готовое решение для бегущего текста с собственным внешним видом?
- Почему QLabel не растягивается?


Название: Re: Размножение ? QLabel
Отправлено: Пантер от Ноябрь 15, 2009, 14:31
Используй QLayout для размещения контролов на окне.


Название: Re: Размножение ? QLabel
Отправлено: lit-uriy от Ноябрь 15, 2009, 14:32
1) Бегущая строка (http://qt.shamangrad.net/doku.php?id=%D0%B1%D0%B5%D0%B3%D1%83%D1%89%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0) (насчёт собственного стиля не знаю)
2) он растягивается, а чтобы картинка растягивалась (и уродовалась) нужно использовать свойство scaledContents

П.С. пои дее такие виджеты делают из нескольких картинок, покраям стационарные картинки, а в середине вертикальная шириной, например, в один пиксель и её копируют, тогда картинка не уродуется

Пример смотри тут:
%QTDIR%\demos\shared\images
-button_normal_cap_left.png
-button_normal_cap_right.png
-button_normal_stretch.png


Название: Re: Размножение ? QLabel [частично решено]
Отправлено: Геннадий Пастухов от Ноябрь 15, 2009, 14:36
Немного почесал репу и сделал по-другому. Раньше устанавливал фон QLabel через стили:
Код:
ui->topBar->setStyleSheet("QLabel#topBar {background-image: url(pics/topBar.png); border: 0px;}");
, теперь сделал через QPixmap, который предварительно также масштабирую под размер QLabel:
Код:
topB = new QPixmap("pics/topBar.png");
ui->topBar->resize(width() - 384, 46);   
ui->topBar->setPixmap(topB->scaled(ui->topBar->width(), 46));

Или это неправильное решение?


Название: Re: Размножение ? QLabel
Отправлено: lit-uriy от Ноябрь 15, 2009, 14:36
я свой пост обновил


Название: Re: Размножение ? QLabel [решено]
Отправлено: Геннадий Пастухов от Ноябрь 15, 2009, 14:39
1) Бегущая строка (http://qt.shamangrad.net/doku.php?id=%D0%B1%D0%B5%D0%B3%D1%83%D1%89%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0) (насчёт собственного стиля не знаю)

Огромнищее спасибище!!!!

2) он растягивается, а чтобы картинка растягивалась (и уродовалась) нужно использовать свойство scaledContents

П.С. пои дее такие виджеты делают из нескольких картинок, покраям стационарные картинки, а в середине вертикальная шириной, например, в один пиксель и её копируют, тогда картинка не уродуется

Пока это пилотный проект, не страшно, в рабочей версии думаю для таких картинок использовать SVG.


Название: Re: Размножение ? QLabel
Отправлено: lit-uriy от Ноябрь 15, 2009, 16:43
>>думаю для таких картинок использовать SVG.
рендеринг SVG, я думаю, будет медленнее копирования растрового рисунка


Название: Re: Размножение ? QLabel
Отправлено: Геннадий Пастухов от Ноябрь 15, 2009, 17:31
>>думаю для таких картинок использовать SVG.
рендеринг SVG, я думаю, будет медленнее копирования растрового рисунка

Возможно, но тут это некритично, операция будет очень редкая и буквально со считанными элементами интерфейса.