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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Фоновый рисунок QWidget  (Прочитано 14642 раз)
muaddib1981@mail.ru
Гость
« : Ноябрь 27, 2008, 12:23 »

Qt 4.4.3.
Как сделать фоновым рисунок виджета.
При это два QLabel расположенные на нем прозрачны, т.е. виден только текст QLabel, а фон невидим.
Должен получится рисунок, а на нем две надписи.
Записан
spirit
Гость
« Ответ #1 : Ноябрь 27, 2008, 12:37 »

отрисовать картинку в paintEvent виджета можно.
Записан
Alex03
Гость
« Ответ #2 : Ноябрь 28, 2008, 09:18 »

Можон например так:
Код:
    QPalette pal = palette();
    pal.setBrush(QPalette::Window, QBrush(QPixmap( ":/images/bg1.png")));
    setPalette(pal);
плюс почитать тут
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #3 : Ноябрь 28, 2008, 09:29 »

У меня так почему то не отрисовывалось.
Получилось через paintEvent.

Код:
paintEvent(QPaintEvent *evt)
{
QPainter painter(this);
painter.drawPixmap(rect(), QPixmap(":/pictures/icon.png"));
}
Записан
Ryhel
Гость
« Ответ #4 : Ноябрь 29, 2008, 12:21 »

А почему бы вместо QWidget не взять еще один QLabel?
Записан
muaddib1981@mail.ru
Гость
« Ответ #5 : Декабрь 01, 2008, 08:41 »

И как QLabel налепить на QLabel?
Записан
muaddib1981@mail.ru
Гость
« Ответ #6 : Декабрь 01, 2008, 09:20 »

Отрисовал картинку на виджете, теперь как сделать фон QLabel прозрачным, именно фон а не текст
Записан
sLiva
Гость
« Ответ #7 : Декабрь 01, 2008, 23:02 »

Можно через стили сделать background

Код:
QWidget {
     background-image: url(:/images/bg1.png);
}

Да и прозрачность настроить через них тож наверное можно, посмотри тут:

http://doc.trolltech.com/4.4/stylesheet-reference.html#background

Записан
Ryhel
Гость
« Ответ #8 : Декабрь 02, 2008, 01:27 »

И как QLabel налепить на QLabel?
Да запросто
Код:
QLabel *label1 = new QLabel("Text 1");
QLabel *label2 = new QLabel("Text 2");

QLayout *layout = new QHBoxLayout();
layout->addWidget(label1);
layout->addWidget(label2);
ui.label->setLayout(layout);

Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #9 : Декабрь 02, 2008, 09:06 »

Можно через стили сделать background

Код:
QWidget {
     background-image: url(:/images/bg1.png);
}

Да и прозрачность настроить через них тож наверное можно, посмотри тут:

http://doc.trolltech.com/4.4/stylesheet-reference.html#background



Ага, только разместите несколько кнопок, лайаутов с виджетами на главном виджете и удивитесь как херово CSS понимает Background.
Записан
BaltikS
Гость
« Ответ #10 : Декабрь 02, 2008, 16:31 »

Ответ таков, фон понятно как отрисовать, а вот чтобы лэйблы были прозрачными нужно:
1) унаследоваться от них
2) в паинтэвенте наложить маску, ну и двойную буферизацию можно

Тогда будет прозрачно и без мерцаний
Записан
Alex03
Гость
« Ответ #11 : Декабрь 02, 2008, 20:13 »

Ответ таков, фон понятно как отрисовать, а вот чтобы лэйблы были прозрачными нужно:
1) унаследоваться от них
2) в паинтэвенте наложить маску, ну и двойную буферизацию можно

Тогда будет прозрачно и без мерцаний
Может всётаки стоит почитать документацию?
Transparency and Double Buffering
Записан
BaltikS
Гость
« Ответ #12 : Декабрь 02, 2008, 20:56 »

Может всётаки стоит почитать документацию?
Transparency and Double Buffering
Да, согласен, в данном случае это проще всего... Упустил это. Но в целом алгоритм получения прозрачных виджетов такой, как я описал выше...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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