crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Непонятное поведение при рисовани QPainterPath
FantasyOr
  опции профиля:
сообщение 7.9.2010, 17:16
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 75
Регистрация: 13.8.2010
Пользователь №: 1956

Спасибо сказали: 4 раз(а)




Репутация:   0  


рисую тень от страницы и страницу поверх тени:

{
QRectF paperRect(300,500, 200,300);
QRectF shadowRect = paperRect;        
shadowRect.translate(50, 40);
        // рисуем тень
QPainterPath shadowPath;
shadowPath.addRect(shadowRect);
QColor shadowColor = QColor(0,0,0,64);
scene->addPath(shadowPath, QPen(shadowColor), QBrush(shadowColor));

        // рисуем страницу
QPainterPath paperPath;            
paperPath.addRect(paperRect);        
scene->addPath(paperPath, QPen(Qt::black), QBrush(Qt::white));
}


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

тут вопрос плевый, для того, кто уже попадал в эту ловушку, мне наверное надо обнулять параметры сцены, но я не могу понять что именно(думал из-за полупрозрачности, но нет). Уже думал тень рисовать как 2 прямоугольника, но это косорукий способ. Подскажите пожалуйста как правильно написать.
Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 7.9.2010, 23:24
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(FantasyOr @ 7.9.2010, 18:16) *
рисую тень от страницы и страницу поверх тени:
Взгляни на графические эффекты . QGraphicsDropShadowEffect
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FantasyOr
  опции профиля:
сообщение 8.9.2010, 9:49
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 75
Регистрация: 13.8.2010
Пользователь №: 1956

Спасибо сказали: 4 раз(а)




Репутация:   0  


справка на английском, примеров не нашел, верней только этот:
QDialog *dialog=new QDialog();
QGraphicsDropShadowEffect *effect=new QGraphicsDropShadowEffect();
dialog->setGraphicsEffect(effect);
dialog->show();


но у QPainterPath нет setGraphicsEffect. то что нет примеров в документации большой минус.

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

все еще жду помощи
спасибо

а кто занимается переводом справок?

при рытье по теме shadoweffect

Цитата
Аккуратнее с QGraphicsDropShadowEffect. Столкнулся с жуткими тормозами при масштабировании view, завязанную на сцену даже с одним виджетом с QGraphicsDropShadowEffect.
Пробовал даже на примере из поставки Qt (diagramscene) - добавил QGraphicsDropShadowEffect к итемам, чувствуются реальные тормоза
( источник http://www.prog.org.ru/topic_12113_0.html)

по этому вопрос остается открытым, что за глюки по коду описанному вначале?
спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 8.9.2010, 12:45
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(FantasyOr)
по этому вопрос остается открытым, что за глюки по коду описанному вначале?
У меня глюков не наблюдается. Но для надежности сделай так (задай setZValue)
        QRectF paperRect(300+300*i,500, 200,300);
        QRectF shadowRect = paperRect;
        shadowRect.translate(50, 40);

        // рисуем тень
        QPainterPath shadowPath;
        shadowPath.addRect(shadowRect);
        QColor shadowColor = QColor(0,0,0,64);
        QGraphicsPathItem *shadowItem = scene->addPath(shadowPath, QPen(shadowColor), QBrush(shadowColor));
        shadowItem->setZValue(0);

        // рисуем страницу
        QPainterPath paperPath;
        paperPath.addRect(paperRect);
        QGraphicsPathItem *paperItem = scene->addPath(paperPath, QPen(Qt::black), QBrush(Qt::white));
        paperItem->setZValue(1);



Цитата(FantasyOr)
но у QPainterPath нет setGraphicsEffect. то что нет примеров в документации большой минус.

я понял нужно создавать класс и наследоваться от эффекта? если так, то это совсем не кавайно для обычной отрисовки(больше ничего мне с объектом делать не нужно) городить огород и множить классы.
Нет, тут все гораздо проще. Твой код будет выглядеть так
        // рисуем страницу
        QPainterPath paperPath;
        paperPath.addRect(QRectF(300,500,200,300));
        QGraphicsPathItem *paperItem = scene->addPath(paperPath, QPen(Qt::black), QBrush(Qt::white));
        paperItem->setZValue(1);

        QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect(ui->graphicsView);
        shadowEffect->setOffset(50,40);
        paperItem->setGraphicsEffect(shadowEffect);

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 9:05