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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование без затирания того что уже нарисовано  (Прочитано 3128 раз)
kilanoff
Гость
« : Февраль 11, 2011, 12:48 »

Народ, помогите разобраться, использую paintEvent

надо реализовать что-то вроде paintbrush как в винде
т.е. например выбрал я карандаш, и что бы можно было рисовать точки, которые бы оставались на холсте
вот так сделано в Delphi Pascal

object.canvas.drawPoint(x,y) ну типа того

а как в Qt сделать такое, не получается.

помогите пожалуйста
Записан
kilanoff
Гость
« Ответ #1 : Февраль 11, 2011, 12:52 »

извиняюсь, забыл дописать, что рисование происходит на виджете
QLabel
может заменить его на другой объект, на котором это лучше сделать?
Записан
_govorilka
Гость
« Ответ #2 : Февраль 11, 2011, 13:13 »

Прочитай про класс QPicture. Рисуй на нём, а потом QPicture рисуй на виджете.

Про то как рисовать на виджете написано здесь:
http://www.prog.org.ru/topic_13567_0.html
« Последнее редактирование: Февраль 11, 2011, 13:16 от _govorilka » Записан
kilanoff
Гость
« Ответ #3 : Февраль 12, 2011, 14:10 »

Спасибо за ответы, да решил проблему:

appp = QLabel widget

Код:
void appp::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);
    painter.drawImage(QPoint(0, 0), *theImage);
}

инициализирую

Код:
void appp::initNewScreenShot(int xx, int yy, int ww, int hh)
{
    theImage = new QImage(ww, hh, QImage::Format_RGB32);
    theImage->fill(qRgb(0, 0, 0));

    QPainter p(theImage);
    p.drawPixmap(0, 0, ww, hh, QPixmap::grabWindow(QApplication::desktop()->winId(), xx, yy, ww, hh) );
    setGeometry(xx, yy, ww, hh);
}

а рисую:

Код:
        QPainter p1( theImage );
        p1.setPen(QPen(Qt::black, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        p1.setBrush(Qt::yellow);
        p1.drawPoint(endX,endY);
        p1.drawPath(path);
        p1.end();

        update();
Записан
_govorilka
Гость
« Ответ #4 : Февраль 12, 2011, 18:05 »

QImage* лучше заменить на QImage, т.к. он использует Implicit Sharing http://doc.qt.nokia.com/4.7-snapshot/implicit-sharing.html

Замена QImage на QPicture даст экономию в памяти, т.к. ты не будешь выделять еще один буфер в памяти под картинку. Если тебе все же нужен буфер, то здесь лучше подойдёт QPixmap, он оптимизирован для этого.
Записан
kilanoff
Гость
« Ответ #5 : Февраль 12, 2011, 20:19 »

QImage* лучше заменить на QImage, т.к. он использует Implicit Sharing http://doc.qt.nokia.com/4.7-snapshot/implicit-sharing.html

Замена QImage на QPicture даст экономию в памяти,

спасибо! так наверное будет лучше, попробую
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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