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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: setMask не работает  (Прочитано 4371 раз)
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« : Февраль 03, 2022, 22:59 »

Доброго времени суток!
Есть класс:
Код:
class DrawWidget : public QWidget
{
    Q_OBJECT

public:
    explicit DrawWidget(QWidget *parent = nullptr) :
        QWidget(parent)
    {
        setFixedSize(500, 500);

        int w = 200;
        int h = 100;

        //создаем маску
        QPainterPath m_path;
        m_path.moveTo(0, h / 2);
        m_path.lineTo(w, h);
        m_path.lineTo(w, 0);
        m_path.lineTo(0, h / 2);

        QPixmap *b_mask = new QPixmap(w, h);
        QPainter p_mask(b_mask);
        p_mask.fillRect(0, 0, w, h, QColor(Qt::color0));
        p_mask.fillPath(m_path, QBrush(Qt::color1));

        QBitmap bitmap(w, h);
        QPainter p_bitmap(&bitmap);
        p_bitmap.fillRect(0, 0, w, h, QColor(Qt::color0));
        p_bitmap.fillPath(m_path, QBrush(Qt::color1));
        //bitmap.save("/dev/shm/bitmap.png", "PNG");

        pixmap = new QPixmap(w, h);

        QPainter p(pixmap);
        //pixmap->setMask(mask->mask());
        //pixmap->setMask(bitmap);
        p.fillRect(0, 0, w, h, QColor(Qt::blue));

        //pixmap->setMask(b_mask->scaled(w, h).mask());
        pixmap->setMask(b_mask->mask());
        //pixmap->setMask(bitmap);
    }

private:
    QPixmap *pixmap = nullptr;

protected:
    void paintEvent(QPaintEvent *)
    {
        QPainter painter(this);

        painter.fillRect(0, 0, width(), height(), QColor(Qt::green));
        painter.save();
        painter.translate(250, 250);
        //for(int n=0; n<8; n++)
        {
            painter.drawPixmap(0, -50, *pixmap);
            painter.rotate(45.0);
        }
        painter.restore();
    }
};
Можете подсказать, почему рисуется прямоугольник, а не треугольник, соответствующий маске?
Записан

ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #1 : Февраль 04, 2022, 07:37 »

Наверное, из-за

Код
C++ (Qt)
p_mask.fillRect(0, 0, w, h, QColor(Qt::color0));
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #2 : Февраль 04, 2022, 10:18 »

Если бы. Варианты с изменения цветов маски и её отключения/подключения я уже пробовал. Не вработает.
Я ведь не просто так тут привёл целый класс. Его можно просто добавить в консольное приложение и вызвать - делов то на три минуты. Ладно, сейчас прикреплю тестовый проект.
« Последнее редактирование: Февраль 04, 2022, 10:58 от tux » Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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