hola que tal soy nuevo en esto de C++ y quiero ver si me pueden ayudar, mi situacion es la siguiente: tengo una imagen la cual la muestro en un label pasandole un pixmap, bueno muestro la imagen y despues le dibujo un rectangulo encima, mi problema es cuando quiero borrar los cambios que le hice a la imagen (osea borrar el rectangulo que le dibuje encima) se me borra toda la imagen. Lo que quiero hacer es que cuando le de click a un boton se borre el rectangulo que le dibuje a la imagen y pueda ver la imagen tal y como estaba antes de modificarla, es algo asi como deshacer los cambios que le hice a la imagen. Mi idea es volver a cargar la imagen pero no se como hacerlo sin que me salga la ventanita para volver a elegir la imagen desde mi disco duro, solo quiero que cuando le de click al botoon "deshacer" me vuelva a mostrar la imagen original. espero que me puedan ayudar.
Estoy utilizando Kdevelop con Qt4 y bajo openesuse 11.1
De antemano gracias aqui les dejo un pedazo de codigo:
#include <QXmlStreamWriter>
#include "design.h"
#include <stdio.h>
#include <iostream>
#include <QFileDialog>
#include <QtGui>
#include <QTextEdit>
#include <QTextStream>
#include <QTextEdit>
#include <fstream>
#include <kimagefilepreview.h>
#include <kurllabel.h>
#include <ncurses.h>
#include <QGraphicsView>
#include <QInputEvent>
#include <QEvent>
#include <QMouseEvent>
#include <QCursor>
#include <QImage>
#include <QPixmap>
#include <QLineF>
#include <QPainter>
#include <QRectF>
#include<QBrush>
#include<QPen>
#include<QPixmapCache>
using namespace std;
Design::Design ( QWidget* parent, Qt::WFlags fl )
: QWidget ( parent, fl ), Ui::CR()
{
setupUi ( this );
// KImageFilePreview pKImageFilePreview = new KImageFilePreview(this);
// pkImageFilePreview ->setGeometry(QFrame(QFramePrivate &dd, pKImageFilePreview* parent = 0, Qt::WindowFlags f = 0);
// pKImageFilePreview ->setMinimunSize(630,388);
// imagePreviewLayout ->addWidget(pKImageFilePreview);
// To show the windows in the middle of the screen
//***************************************************************************************
QDesktopWidget *desktop = QApplication::desktop();
int screenWidth, width;
int screenHeight, height;
int x, y;
QSize windowSize;
screenWidth = desktop->width(); // get width of screen
screenHeight = desktop->height(); // get height of screen
windowSize = size(); // size of our application window
width = windowSize.width();
height = windowSize.height();
// little computations
x = ( screenWidth - width ) / 2;
y = ( screenHeight - height ) / 2;
y -= 50;
// move window to desired coordinates
move ( x, y );
//***************************************************************************************
//signal and slot conection
connect ( ButtonBrowse, SIGNAL ( clicked() ), this, SLOT ( ShowImage() ) );
connect ( ButtonOkSel, SIGNAL ( clicked() ),this , SLOT ( getMouseClicked() ) );
connect ( ButtonShowSelection, SIGNAL ( clicked() ) ,this, SLOT ( repaint() ) );
connect ( ButtonCancelChar, SIGNAL ( clicked() ) ,this, SLOT ( update() ) );
//createActions();//////////////////////////////////////
}
Design::~Design()
{
}
/*$SPECIALIZATION$*/
/*void Design::clicked()
{
}*/
void Design::loadFile ( const QString &fileName )
{
QFile file ( fileName );
QTextStream in ( &file );
}
void Design::ShowImage()
{
const QString fileName = QFileDialog::getOpenFileName ( this );
if ( !fileName.isEmpty() )
loadFile ( fileName );
ViewCar=QPixmap ( fileName );
if ( !ViewCar.isNull() )
{
LabelPlate->setPixmap ( ViewCar );
}
w=ViewCar.width();
h=ViewCar.height();
labelw->setNum ( w );
labelh->setNum ( h );
}
/*
void Design::setPicture(){
QLabel *LabelIMG;
QPicture *ViewPlate;
LabelIMG->setPicture(const View=Plate);
}*/
void Design::getMouseClicked()
{
// int x=11;
// int y=250;
//
// if (x>10&&y<500){
// QLineEdit *lineEditChar = new QLineEdit();
LabelIMG->setText ( "click" );
//}
}
void Design::mousePressEvent ( QMouseEvent* event )
{
difX=421/w;
difY=191/h;
switch ( event->button() )
{
case Qt::LeftButton:
px1=event->QMouseEvent::x();
posX1= ( px1-680 ) /difX;
labelX1Char->setNum ( posX1 );
py1=event->QMouseEvent::y();
posY1= ( py1-170 ) /difY;
labelY1Char->setNum ( posY1 );
break;
case Qt::RightButton:
px2=event->QMouseEvent::x();
posX2= ( px2-680 ) /difX;
labelX2Char->setNum ( posX2 );
py2=event->QMouseEvent::y();
posY2= ( py2-170 ) /difY;
labelY2Char->setNum ( posY2 );
break;
default:
LabelIMG->setText ( "hola" );
}
width = ( posX2 )- ( posX1 );
height = ( posY2 )- ( posY1 );
LabelWidth->setNum ( width );
LabelHeight->setNum ( height );
posX11= ( int ) ( posX1 );
posY11= ( int ) ( posY1 );
width1= ( int ) ( width );
height1= ( int ) ( height );
//QRectF rectangle=QRect(posX1,posY1,width,height);
//rectangle.setBrush(Qt::SolidPattern);
//QPainter painter(this);
//painter.drawEllipse(rectangle);
}
void Design::repaint()
{
QPainter rectangle;
rectangle.begin ( &ViewCar );
QPen pen;
pen.setColor ( Qt::blue );
pen.setWidth ( 0.5 );
rectangle.setPen ( pen );
rectangle.drawRect ( posX11,posY11,width1,height1 );
rectangle.fillRect ( posX11,posY11,width,height1,Qt::Dense4Pattern );
LabelPlate->setPixmap (ViewCar );
}
void Design::update()
//// ********************************************** con este slot quiero volver a mostrar la imagen*******************************{
labelX1Char->setNum ( 0 );
labelY1Char->setNum ( 0 );
labelX2Char->setNum ( 0 );
labelY2Char->setNum ( 0 );
LabelWidth->setText ( fileName );
LabelHeight->setNum ( 0 );
// if ( !fileName.isEmpty() )
// loadFile ( fileName );
// ViewCar=QPixmap ( fileName );
//
// LabelPlate->setPixmap ( ViewCar );
// QPainter EraseRect;
// EraseRect.restore();
// EraseRect.begin ( &ViewCar );
// EraseRect.eraseRect ( posX11,posY11,width1,height1 );
// LabelPlate->setPixmap ( ViewCar );
}