Wrapping Programme C++/Qt4 vers Python/Qt4

Wrapping Programme C++/Qt4 vers Python/Qt4 - Python - Programmation

Marsh Posté le 17-04-2007 à 15:00:33    

Bonjour,
 
 
Je suis en train de reprendre un exemple fournis avec QT4 pour déssiner des objets que l'on peut saisir et déplacer (drag and drop).
 
Je galère à passer du code c++ vers Python, Pourriez vous m'aider petit à petit... Merci
 
Je pense qu'il serait interessant de mettre à disposition des internautes des exemples python/Qt4 un peu évolués (sions graphique), car c'est vraiment la dèche sur internet.
 
 
Code C++ :  

Code :
  1.  
  2. Home · All Classes · Main Classes · Grouped Classes · Modules · Functions
  3. dragwidget.cpp Example File
  4. draganddrop/draggableicons/dragwidget.cpp
  5.     /****************************************************************************
  6.     **
  7.     ** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
  8.     **
  9.     ** This file is part of the documentation of the Qt Toolkit.
  10.     **
  11.     ** This file may be used under the terms of the GNU General Public
  12.     ** License version 2.0 as published by the Free Software Foundation
  13.     ** and appearing in the file LICENSE.GPL included in the packaging of
  14.     ** this file.  Please review the following information to ensure GNU
  15.     ** General Public Licensing requirements will be met:
  16.     ** http://www.trolltech.com/products/qt/opensource.html
  17.     **
  18.     ** If you are unsure which license is appropriate for your use, please
  19.     ** review the following information:
  20.     ** http://www.trolltech.com/products/qt/licensing.html or contact the
  21.     ** sales department at sales@trolltech.com.
  22.     **
  23.     ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  24.     ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  25.     **
  26.     ****************************************************************************/
  27.     #include <QtGui>
  28.     #include "dragwidget.h"
  29.     DragWidget::DragWidget(QWidget *parent)
  30.         : QFrame(parent)
  31.     {
  32.         setMinimumSize(200, 200);
  33.         setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
  34.         setAcceptDrops(true);
  35.         QLabel *boatIcon = new QLabel(this);
  36.         boatIcon->setPixmap(QPixmap(":/images/boat.png" ));
  37.         boatIcon->move(20, 20);
  38.         boatIcon->show();
  39.         boatIcon->setAttribute(Qt::WA_DeleteOnClose);
  40.         QLabel *carIcon = new QLabel(this);
  41.         carIcon->setPixmap(QPixmap(":/images/car.png" ));
  42.         carIcon->move(120, 20);
  43.         carIcon->show();
  44.         carIcon->setAttribute(Qt::WA_DeleteOnClose);
  45.         QLabel *houseIcon = new QLabel(this);
  46.         houseIcon->setPixmap(QPixmap(":/images/house.png" ));
  47.         houseIcon->move(20, 120);
  48.         houseIcon->show();
  49.         houseIcon->setAttribute(Qt::WA_DeleteOnClose);
  50.     }
  51.     void DragWidget::dragEnterEvent(QDragEnterEvent *event)
  52.     {
  53.         if (event->mimeData()->hasFormat("application/x-dnditemdata" )) {
  54.             if (event->source() == this) {
  55.                 event->setDropAction(Qt::MoveAction);
  56.                 event->accept();
  57.             } else {
  58.                 event->acceptProposedAction();
  59.             }
  60.         } else {
  61.             event->ignore();
  62.         }
  63.     }
  64.     void DragWidget::dropEvent(QDropEvent *event)
  65.     {
  66.         if (event->mimeData()->hasFormat("application/x-dnditemdata" )) {
  67.             QByteArray itemData = event->mimeData()->data("application/x-dnditemdata" );
  68.             QDataStream dataStream(&itemData, QIODevice::ReadOnly);
  69.             QPixmap pixmap;
  70.             QPoint offset;
  71.             dataStream >> pixmap >> offset;
  72.             QLabel *newIcon = new QLabel(this);
  73.             newIcon->setPixmap(pixmap);
  74.             newIcon->move(event->pos() - offset);
  75.             newIcon->show();
  76.             newIcon->setAttribute(Qt::WA_DeleteOnClose);
  77.             if (event->source() == this) {
  78.                 event->setDropAction(Qt::MoveAction);
  79.                 event->accept();
  80.             } else {
  81.                 event->acceptProposedAction();
  82.             }
  83.         } else {
  84.             event->ignore();
  85.         }
  86.     }
  87.     void DragWidget::mousePressEvent(QMouseEvent *event)
  88.     {
  89.         QLabel *child = static_cast<QLabel*>(childAt(event->pos()));
  90.         if (!child)
  91.             return;
  92.         QPixmap pixmap = *child->pixmap();
  93.         QByteArray itemData;
  94.         QDataStream dataStream(&itemData, QIODevice::WriteOnly);
  95.         dataStream << pixmap << QPoint(event->pos() - child->pos());
  96.         QMimeData *mimeData = new QMimeData;
  97.         mimeData->setData("application/x-dnditemdata", itemData);
  98.         QDrag *drag = new QDrag(this);
  99.         drag->setMimeData(mimeData);
  100.         drag->setPixmap(pixmap);
  101.         drag->setHotSpot(event->pos() - child->pos());
  102.         QPixmap tempPixmap = pixmap;
  103.         QPainter painter;
  104.         painter.begin(&tempPixmap);
  105.         painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127));
  106.         painter.end();
  107.         child->setPixmap(tempPixmap);
  108.         if (drag->start(Qt::CopyAction | Qt::MoveAction) == Qt::MoveAction)
  109.             child->close();
  110.         else {
  111.             child->show();
  112.             child->setPixmap(pixmap);
  113.         }
  114.     }
  115. Copyright © 2006 Trolltech
  116. Trademarks
  117. Qt 4.1.4


 
 
Code Python :  
 

Code :
  1. from PyQt4 import QtGui, QtCore
  2. # Questions :
  3. # A t on besoin de faire QtCore.QPoint() pour creer un QPoint, ou peut on directement appeler QPoint?
  4. def DragWidget(self, QFrame):
  5.     def __init__(self, parent):
  6.         self.setMinimumSize(200, 200)
  7.         self.setAcceptDrops(True)
  8.        
  9.        
  10.         boatIcon = QtGui.QLabel(self)
  11.         boatIcon.setPixMap(QtGui.QPixmap("./image.png" ))
  12.         boatIcon.move(20,20)
  13.         boatIcon.show()
  14.         # boatIcon.setAttribute(QtGui.WA_DeleteOnClose)
  15.        
  16.     def dragEnterEvent(self, event):
  17.         if (event.mimeData().hasFormat("application/x-dnditemdata" )):
  18.             if (event.source()==self):
  19.                 event.setDropAction(QtCore.Qt.MoveAction)
  20.                 event.accept()
  21.             else:
  22.                 event.acceptProposedAction()
  23.         else:
  24.             event.ignore()
  25.     def dropEvent(event):
  26.         if (event.mimeData().hasFormat("application/x-dnditemdata" )):
  27.             itemData = event.mimeData().data("application/x-dnditemdata" )
  28.             dataStream = QFrame.QDataStream(itemData, self.QIODevice.ReadOnly)
  29.             # pixmap = QtGui.QPixmap(item.data(QtCore.Qt.DecorationRole))
  30.             pixmap = QtGui.QPixmap
  31.             offset = QtCore.QPoint()
  32.            
  33.            
  34.             dataStream >> pixmap >> offset
  35.            
  36.             newIcon = QtGui.QLabel(self)
  37.             newIcon.setPixmap(self.pixmap)
  38.             newIcon.move(event.pos() - self.offset)
  39.             newIcon.show()
  40.             newIcon.setAttribute(self.WA_deleteOnClose)
  41.            
  42.             if (event.source() == self):
  43.                 event.setDropAction(QtCore.Qt.MoveAction)
  44.                 event.accept()
  45.             else:
  46.                 event.acceptProposedAction()
  47.         else:
  48.             event.ignore()
  49.            
  50.     def mousePressEvent(self,event):
  51.         child = static_cast<QtGui.QLabel>(QFrame.childAt(event.pos()))
  52.         if (child == False):
  53.             return
  54.        
  55.         pixmap = child.pixmap()
  56.         itemData = QtCore.QByteArray()   
  57.         dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.writeOnly)
  58.         dataStream << pixmap << QtCore.QPoint(event.pos() - child.pos())
  59.        
  60.         mimeData = QtCore.QMimeData()
  61.         mimeData.setData("application/x-dnditemdata", itemData)
  62.        
  63.         drag = QtGui.QDrag(self)
  64.         drag.setMimeData(mimeData)
  65.         drag.setPixMap(pixmap)
  66.         drag.setHotSpot(event.pos() - child.pos())
  67.        
  68.         tempPixmap = QtGui.QPixmap
  69.         painter = QtGui.QPainter
  70.         painter.begin(tempPixmap)
  71.        
  72.         painter.fillRect(pixmap.rect(), QtGui.QColor(127, 127, 127, 127))
  73.         painter.end()
  74.        
  75.         child.setPixMap(tempPixmap)
  76.        
  77.         if (drag.start(QtCore.Qt.CopyAction | QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction):
  78.             child.close()
  79.         else:
  80.             child.show()
  81.             child.setPixMap(pixmap)


 
 
MAJ Code


Message édité par jijiz le 17-04-2007 à 16:05:53
Reply

Marsh Posté le 17-04-2007 à 15:00:33   

Reply

Marsh Posté le 26-05-2007 à 01:01:14    

Euh si tu parle du drag&drop de la voiture/bateau/ .. la version python existe deja quand tu dl le fichier compresse PyQt-win-gpl-4.2  sur le site PyQt

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed