Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: muaddib1981@mail.ru от Ноябрь 27, 2008, 12:23



Название: Фоновый рисунок QWidget
Отправлено: muaddib1981@mail.ru от Ноябрь 27, 2008, 12:23
Qt 4.4.3.
Как сделать фоновым рисунок виджета.
При это два QLabel расположенные на нем прозрачны, т.е. виден только текст QLabel, а фон невидим.
Должен получится рисунок, а на нем две надписи.


Название: Re: Фоновый рисунок QWidget
Отправлено: spirit от Ноябрь 27, 2008, 12:37
отрисовать картинку в paintEvent виджета можно.


Название: Re: Фоновый рисунок QWidget
Отправлено: Alex03 от Ноябрь 28, 2008, 09:18
Можон например так:
Код:
    QPalette pal = palette();
    pal.setBrush(QPalette::Window, QBrush(QPixmap( ":/images/bg1.png")));
    setPalette(pal);
плюс почитать тут (http://doc.trolltech.com/4.4/qwidget.html#transparency-and-double-buffering)


Название: Re: Фоновый рисунок QWidget
Отправлено: Sergey B. от Ноябрь 28, 2008, 09:29
У меня так почему то не отрисовывалось.
Получилось через paintEvent.

Код:
paintEvent(QPaintEvent *evt)
{
QPainter painter(this);
painter.drawPixmap(rect(), QPixmap(":/pictures/icon.png"));
}


Название: Re: Фоновый рисунок QWidget
Отправлено: Ryhel от Ноябрь 29, 2008, 12:21
А почему бы вместо QWidget не взять еще один QLabel?


Название: Re: Фоновый рисунок QWidget
Отправлено: muaddib1981@mail.ru от Декабрь 01, 2008, 08:41
И как QLabel налепить на QLabel?


Название: Re: Фоновый рисунок QWidget
Отправлено: muaddib1981@mail.ru от Декабрь 01, 2008, 09:20
Отрисовал картинку на виджете, теперь как сделать фон QLabel прозрачным, именно фон а не текст


Название: Re: Фоновый рисунок QWidget
Отправлено: sLiva от Декабрь 01, 2008, 23:02
Можно через стили сделать background

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

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

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



Название: Re: Фоновый рисунок QWidget
Отправлено: Ryhel от Декабрь 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);



Название: Re: Фоновый рисунок QWidget
Отправлено: Sergey B. от Декабрь 02, 2008, 09:06
Можно через стили сделать background

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

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

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



Ага, только разместите несколько кнопок, лайаутов с виджетами на главном виджете и удивитесь как херово CSS понимает Background.


Название: Re: Фоновый рисунок QWidget
Отправлено: BaltikS от Декабрь 02, 2008, 16:31
Ответ таков, фон понятно как отрисовать, а вот чтобы лэйблы были прозрачными нужно:
1) унаследоваться от них
2) в паинтэвенте наложить маску, ну и двойную буферизацию можно

Тогда будет прозрачно и без мерцаний


Название: Re: Фоновый рисунок QWidget
Отправлено: Alex03 от Декабрь 02, 2008, 20:13
Ответ таков, фон понятно как отрисовать, а вот чтобы лэйблы были прозрачными нужно:
1) унаследоваться от них
2) в паинтэвенте наложить маску, ну и двойную буферизацию можно

Тогда будет прозрачно и без мерцаний
Может всётаки стоит почитать документацию?
Transparency and Double Buffering (http://doc.trolltech.com/4.4/qwidget.html#transparency-and-double-buffering)


Название: Re: Фоновый рисунок QWidget
Отправлено: BaltikS от Декабрь 02, 2008, 20:56
Может всётаки стоит почитать документацию?
Transparency and Double Buffering (http://doc.trolltech.com/4.4/qwidget.html#transparency-and-double-buffering)
Да, согласен, в данном случае это проще всего... Упустил это. Но в целом алгоритм получения прозрачных виджетов такой, как я описал выше...