crossplatform.ru

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


  Ответ в Qimage/Qpixmap paste (вставить)
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 10 сообщений [ в обратном порядке ]
Warm0ngeR Дата 15.11.2010, 17:40
  Реализовал это сам, уже довольно давно, забыл выложить.
Копирование
Раскрывающийся текст

void PaintArea::copyArea()
{
    if (rubberBand)  // если юзверь вообще что-то выделелил
    {
        prretheimage = theImage.copy (rubberBand->pos().x(),rubberBand->pos().y(),rubberBand->size().width(),rubberBand->size().height()); // запиъиваем в спомогательный куимейдж выделенную област
        rubberBand->hide(); // скрываем выделение (ЭФФЕКТ)
    }
    update();   //обновляем холст
}

Копирование выделенной области в prretheimage (запасной холст) theImage - основной. rubberBand - выделение(прямоугольное)


Вставка
Раскрывающийся текст
void PaintArea::pasteArea() // процедура для первого этапа вставки - помещение вспомогательного в начало координат
{
    if ((mytoolsselectwin == 34) or (mytoolsselectwin != 34))  // при =! запускает первый раз, а =34, если несколько раз Ctrl+v жмакаешь
    {
        imageforpastearea = theImage;  // сохраняем первоначальное изображение
        QPainter painter(&theImage);
        painter.drawImage(0,0,prretheimage); // рисуем из 0.0 сохраненное копированием изображение
        mytoolsselectwin=34; // включаем инструмент движения копированной области
        rubberBand->setGeometry(0,0,prretheimage.size().width(),prretheimage.size().height()); // помешаем нарисованное в выделение - ЭФФЕКТ (УЖЕ НЕСЕТ практическую ценность)
        rubberBand->show(); // показываем выделение
    }
    update();   //обновляем холст
}
//--------------------------------------------------------------------------------------------------
void PaintArea::pasteArea(const QPoint &endPoint) // собственно для перемешения по холсту
{

    if (!rubberBand->isHidden()) /*проверяем выделение есть(см начало моус эвентов
          применяется для определения, какую кнопку юзверь нажал, если левую, то все норм,
       иначе перемещение заканчивается       */
    {
        theImage=imageforpastearea; // возвращаем первоначальный холст

        QPoint mypoint((endPoint.x()-pointforpastearea.x()),(endPoint.y()-pointforpastearea.y()));
/*
"свистелка-пер**лка" - если при первок клике по выделению он выбрал относительно выделения координату 0;0
то будет передвигатся по меньшей мере странно
такой подход реализует возможность, что юзверь тыкнул в произвольно место выделения и будет перемещатся
более красиво
*/

        QPainter pa(&theImage);
        pa.drawImage(mypoint,prretheimage); // рисуем в текущее положение мыши копию
        rubberBand->setGeometry(mypoint.x(),mypoint.y(),prretheimage.size().width(),prretheimage.size().height()); // помешаем нарисованное в выделение - ЭФФЕКТ (УЖЕ НЕСЕТ практическую ценность)
    }
    update();   //обновляем холст
}

mytoolsselectwin - это переменная для определения выбранного инструмента




Раскрывающийся текст
              lastPoint = event->pos();
              pointforpastearea.setX(lastPoint.x()-rubberBand->pos().x());
              pointforpastearea.setY(lastPoint.y()-rubberBand->pos().y());

Это в прессэвент(моус эвент), pointforpastearea - qpoint, который помогает в "свистелке-пер**лке"(читать выше)
Алексей1153 Дата 17.7.2010, 16:55
  попробуй
QImage::drawImage
Warm0ngeR Дата 17.7.2010, 11:09
  Это не то, там как бы функция open обсуждается.
Которая у меня уже реализована давным давно.

Проблема в использование функции QImage.copy
Цитата
The returned image is copied from the position (x, y) in this image, and will always have the given width and height. In areas beyond this image, pixels are set to 0.

Судя из описания понял, что возвращает копию изображения в точку х.у размером width*height. Но при прописывании он ничего не возвращает.
Алексей1153 Дата 17.7.2010, 10:17
  Через поиск по форуму нашёл вот эту тему http://www.forum.crossplatform.ru/index.ph...ic=1906&hl=
По моему, как раз то, что надо
Warm0ngeR Дата 17.7.2010, 10:06
  Доброго времени суток всем!

Вожусь с qimage/qpixmap, рисую на нем всякие фигуры мышкой, заливка и прочее. Дошло до выделения, выделение я сделал. Копирование выделенной области тоже. Но есть проблема с проверкой, как вставить? :rolleyes:

Гугл, маны, документацию спрашивал, знают только для текст (Q3TextEdit QLineEdit QTextEdit).

Собственно, как вставить скопированное? Копировал qimage: QImage QImage::copy ( const QRect & r = QRect() ).
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 21:54