Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

dessiner un rectangle élastique

Salut ,
Quelqu'un peut-il améliorer mon programme ?
J'aurais besoin que mon rectangle devienne élastique si aucun bouton n'est préssé et dés que ma souris bouge .
Voici ce que 'jaie codé .
De meme je ne comprend pas pourquoi mon code dessine plusieurs rectangles alors que je n'en veux qu'un .

//fichier d'en-tête
#ifndef PLOTTER_H
#define PLOTTER_H

#include <qpixmap.h>
#include <qwidget.h>
#include <map>

class QToolButton;
class Plotter : public QWidget
{
Q_OBJECT
public:
Plotter(QWidget *parent = 0, const char *name = 0,
WFlags flags = 0);
public slots:

protected:
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);

private:
void updateRubberBandRegion();

enum { Margin = 40 };
bool rubberBandIsShown;
QRect rubberBandRect;

};


#endif


//fichier d'implementation

code:

#include <qpainter.h>
#include <qstyle.h>
#include <qtoolbutton.h>
#include <cmath>
using namespace std;

#include "plotter.h"

Plotter::Plotter(QWidget *parent, const char *name, WFlags flags)
: QWidget(parent, name, flags | WNoAutoErase)
{
setBackgroundMode(PaletteDark);
rubberBandIsShown = false;
}


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

if (rubberBandIsShown) {
painter.setPen(colorGroup().light());
painter.drawRect(rubberBandRect.normalize());
}

}

void Plotter::mousePressEvent(QMouseEvent *event)
{
if (event->button() == LeftButton) {
rubberBandIsShown = true;
rubberBandRect.setTopLeft(event->pos());
rubberBandRect.setBottomRight(event->pos());
updateRubberBandRegion();
setCursor(crossCursor);
}
}

void Plotter::mouseMoveEvent(QMouseEvent *event)
{
if (event->state() & LeftButton) {
updateRubberBandRegion();
rubberBandRect.setBottomRight(event->pos());
}
}

void Plotter::updateRubberBandRegion()
{
QRect rect = rubberBandRect.normalize();
update(rect.left(), rect.top(), rect.width(), 1);
update(rect.left(), rect.top(), 1, rect.height());
update(rect.left(), rect.bottom(), rect.width(), 1);
update(rect.right(), rect.top(), 1, rect.height());
}


//fichier main


#include <qapplication.h>
#include <qfile.h>
#include "plotter.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Plotter plotter;
plotter.setCaption(QObject::tr("Plotter"));
app.setMainWidget(&plotter);
plotter.show();
return app.exec();
}
Connectez-vous ou Inscrivez-vous pour répondre.