crossplatform.ru

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


  Ответ в Непонятное поведение при рисовани QPainterPath
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
igor_bogomolov Дата 8.9.2010, 12:45
 
Цитата(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);

FantasyOr Дата 8.9.2010, 9:49
  справка на английском, примеров не нашел, верней только этот:
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 Дата 7.9.2010, 23:24
 
Цитата(FantasyOr @ 7.9.2010, 18:16) *
рисую тень от страницы и страницу поверх тени:
Взгляни на графические эффекты . QGraphicsDropShadowEffect
FantasyOr Дата 7.9.2010, 17:16
  рисую тень от страницы и страницу поверх тени:

{
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 прямоугольника, но это косорукий способ. Подскажите пожалуйста как правильно написать.
Спасибо.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 22:14