Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6329 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Wrapping Programme C++/Qt4 vers Python/Qt4

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Wrapping Programme C++/Qt4 vers Python/Qt4

n°1543818
jijiz
Posté le 17-04-2007 à 15:00:33  profilanswer
 

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

n°1565520
kuroro20
Posté le 26-05-2007 à 01:01:14  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Wrapping Programme C++/Qt4 vers Python/Qt4

 

Sujets relatifs
DWR et envoi d'un fichier XML du serveur vers le navigateurMacro de Tableau Excel vers Word
[ C ] Aide pour programme de lecture fichier txtprobleme de programme en C
[runtime] lancer un programme .exeprogramme pour WinXp ou 2000 compilé sous Vista
Aide pour un programme batCorrespondance ObectUI java en python?
[Crypto] Probleme dans ce programme?programme maple
Plus de sujets relatifs à : Wrapping Programme C++/Qt4 vers Python/Qt4


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)