Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2016, 16:39   #1
natalyPod
Новичок
Джуниор
 
Регистрация: 18.07.2016
Сообщений: 2
По умолчанию Патерн Decorator для программы

мне нужно использовать паттерн Decorator в моей программе.
У меня есть две функции в разных класах
И разница у них только что в второй функции я рисую еще рамочку. Мне нужно в 1 функции использовать паттерн Decorator чтобы позбавиться TempOpenedCardRenderer::Render.
Но как я понимаю мне всеравно нужно вызывать и созвать переменую в функции OpenedCardRenderer::Render. Кто что подскажет, как луче сделать чтобы ?
От что я сумела сделать, оно не правильно работает
Код:
class OpenedCardRenderer : public TempOpenedCardRenderer
{
public:
    void Render(QPainter* painter, const Card* card);
};
Код:
void OpenedCardRenderer::Render(QPainter* painter, const Card* card)
{
    const QRect& cardRect = card->getRect();
    painter->fillRect(cardRect, Qt::white);
    painter->drawText(cardRect, Qt::AlignCenter, QString(card->getValue()));
    TempOpenedCardRenderer::Render(painter, card);
}
Код:
class TempOpenedCardRenderer : public CardRenderer
{
public:
    void Render(QPainter* painter, const Card* card);
};
Код:
void TempOpenedCardRenderer::Render(QPainter* painter, const Card* card)
{
    const QRect& cardRect = card->getRect();
    painter->drawRect(cardRect.x(), cardRect.y(), cardRect.width(), cardRect.height());
}
Суть паттерна:
Декоратор (англ. Decorator) — структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту. Шаблон Декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.
Но оно не правильно работает. а работает при втором клике, и то когда совпадают буквы.
natalyPod вне форума Ответить с цитированием
Старый 18.07.2016, 16:55   #2
natalyPod
Новичок
Джуниор
 
Регистрация: 18.07.2016
Сообщений: 2
По умолчанию

Все нужно было делать с точности до наоборот. в TempOpenedCardRenderer нужно было OpenedCardRenderer
Код:
void TempOpenedCardRenderer::Render(QPainter* painter, const Card* card)
{
    const QRect& cardRect = card->getRect();
    OpenedCardRenderer::Render(painter, card);
    painter->drawRect(cardRect.x(), cardRect.y(), cardRect.width(), cardRect.height());
}
Код:
class TempOpenedCardRenderer : public OpenedCardRenderer
{
public:
    void Render(QPainter* painter, const Card* card);
};
natalyPod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исходники программы которая формирует pdf документ для печати, программы jei_ C# (си шарп) 10 28.11.2012 11:40
Есть три программы. Их нужно объеденить в одну, тоесть чтоб при запуске программы были пункты меню для каждой из программ afirat Помощь студентам 9 28.04.2012 12:39
Создание программы для управления некоторыми функциями другой программы Юрий1991 Общие вопросы Delphi 6 03.02.2012 15:32
Какие программы нужно установить чтобы писать программы для телефонов nokia Кристинка89 Общие вопросы по Java, Java SE, Kotlin 2 17.02.2011 15:15
Программы для создания графических карт для веб-сайтов Bingam Vici Софт 3 17.11.2010 10:48