Доброго времени суток всем!
Вожусь с qimage/qpixmap, рисую на нем всякие фигуры мышкой, заливка и прочее. Дошло до выделения, выделение я сделал. Копирование выделенной области тоже. Но есть проблема с проверкой, как вставить?
Гугл, маны, документацию спрашивал, знают только для текст (Q3TextEdit QLineEdit QTextEdit).
Собственно, как вставить скопированное? Копировал qimage: QImage QImage::copy ( const QRect & r = QRect() ).
Через поиск по форуму нашёл вот эту тему http://www.forum.crossplatform.ru/index.php?showtopic=1906&hl=
По моему, как раз то, что надо
Это не то, там как бы функция open обсуждается.
Которая у меня уже реализована давным давно.
Проблема в использование функции QImage.copy
попробуй
QImage::drawImage
Реализовал это сам, уже довольно давно, забыл выложить.
Копирование
void PaintArea::copyArea()
{
if (rubberBand) // если юзверь вообще что-то выделелил
{
prretheimage = theImage.copy (rubberBand->pos().x(),rubberBand->pos().y(),rubberBand->size().width(),rubberBand->size().height()); // запиъиваем в спомогательный куимейдж выделенную област
rubberBand->hide(); // скрываем выделение (ЭФФЕКТ)
}
update(); //обновляем холст
}
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(); //обновляем холст
}
lastPoint = event->pos();
pointforpastearea.setX(lastPoint.x()-rubberBand->pos().x());
pointforpastearea.setY(lastPoint.y()-rubberBand->pos().y());
Это в прессэвент(моус эвент), pointforpastearea - qpoint, который помогает в "свистелке-пер**лке"(читать выше)
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)