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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузка стиля с последующей отрисовкой в QPixmap  (Прочитано 2585 раз)
ltise
Гость
« : Октябрь 01, 2010, 01:53 »

Всем привет! подскажите плиз как лучше решить задачу:

есть куча разных виджетов, вид которых определен файлом css.
задача в том, чтобы отрисовывать эти виджеты (или стили) через QPainter...
одним словом - есть один виджет, в него надо отрисовывать объекты, внешний вид некоторых задан в css. добавлять виджеты в качестве потомков нельзя...
пробую сделать следующим образом:

CSS:
Код:
QWidget#point3984{
background-color: rgba(0,0,222, 180);
border-color: red;
border-width: 2px;
max-width: 8;
max-height: 8;
}
Код:
class MyClass
{
....
static QWidget * _csstyle=0;
...
void init()
{
...
if (_csstyle == 0){
_csstyle = new QWidget();
_csstyle->setObjectName("point3984");
}
}
...
...
void paint(QPainter painter)
{

QPixmap pixmap(_csstyle->size());
pixmap.grabWidget(_csstyle);

painter->drawPixmap(_position, pixmap);
qDebug() << _csstyle.size(); // 8x8 - ok
...
...
}

}

Не работает! т.е. стиль вроде-бы считывает, но рисуется как то по левому, цвета какие-то не те..

В чем может быть загвоздка ?
Как сделать правильно ?

В аттаче пример - вообще ничего не грабится, черный квадрат  Непонимающий

Спасибо
« Последнее редактирование: Октябрь 01, 2010, 13:31 от ltise » Записан
kdm
Гость
« Ответ #1 : Октябрь 02, 2010, 21:20 »

grabWidget - статический метод и возвращает QPixmap. Так, например, и со scaled. Я тоже столкнулся с проблеммой, мне объяснили.

Код:
void MainWindow::_timeout()
{
        *pixmap = QPixmap::grabWidget(this);
pixmap->save("d:/aa.bmp");
update();
}
Как сделать лучше, не знаю.

Или
Код:
void MainWindow::_timeout()
{
        QPixmap::grabWidget(this).save("d:/aa.bmp");
        update();
}

А что за фишка с таймером?Улыбающийся
« Последнее редактирование: Октябрь 02, 2010, 21:31 от kdm » Записан
ltise
Гость
« Ответ #2 : Октябрь 02, 2010, 21:48 »

А что за фишка с таймером?Улыбающийся

Да это я тупил - может граб нужно вызывать после прорисовки виджета.. кнопку лепить лень было - повесил на таймер Улыбающийся
спасибо за ответ.. совсем не очевидная фигня, я выкрутился используя
Код:
	QPainter painter(pixmap);
widget.render(&painter, QPoint(0,0), widget.visibleRegion(),  QWidget::DrawChildren);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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