Salut tout le monde,

Alors j'ai une sorte de tableur contenant des données ligne par ligne et dans la même fenetre un QTreeWidget avec des QTreeWidgetItem en guise de branches.

J'aimerais pouvoir effectuer un glisser-déposer à partir d'une des lignes du tableur jusqu'à une des branches du QTreeWidget.

L'action est seulement sensée transmettre une des valeurs présente sur la ligne source à une liste de données du QTreeWidgetItem.

Je vois beaucoup d'exemple avec du MIMEdata, plainText etc mais ca ne m'aide pas à résoudre mon problème ..

Les headers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
////Classe reimplémentée pr obtenir un clic droit avec menu contextuel
class MyQTableWidget : public QTableWidget
{
    Q_OBJECT
 
public :
    MyQTableWidget();
    MyQTableWidget(QWidget *pParent);
 
signals :
    void signalContextMenu(int, const QPoint &);
 
private slots :
    void mousePressEvent(QMouseEvent *e);
};
 
////Classe reimplémentée pr obtenir un clic droit avec menu contextuel
class MyQTreeWidget : public QTreeWidget
{
    Q_OBJECT
 
public :
    MyQTreeWidget();
    MyQTreeWidget(QWidget *pParent);
 
signals :
    void signalContextMenu(const QPoint &);
    void signalDoubleClic(MyQTreeWidgetItem*);
 
private slots :
    void mousePressEvent(QMouseEvent *e);
    void mouseDoubleClickEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);
};
 
class MyQTreeWidget;
class MyQTreeWidgetItem : public QTreeWidgetItem
{
    //Q_OBJECT
 
public :
    MyQTreeWidgetItem();
    MyQTreeWidgetItem(MyQTreeWidget *parent, int itype);
    ~MyQTreeWidgetItem();
 
    QList<uint> *m_pListId { new QList<uint> };
    QList<uint> *m_pListCorpId { new QList<uint> };
 
    uint GetID() const;
    void SetID(uint a_uiID);
 
protected :
    uint m_uiID;
};
Les implémentations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
////========Partie Classe MyQTableWidget========////
MyQTableWidget::MyQTableWidget() : QTableWidget()
{
 
}
 
MyQTableWidget::MyQTableWidget(QWidget *pParent) : QTableWidget()
{
    setParent(pParent);
}
 
void MyQTableWidget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        //QEvent::DragEnter
        QDrag *drag = new QDrag(this);
    }
    if(e->button() == Qt::RightButton)
    {
        QTableWidget::mousePressEvent(e);
        if(currentRow() != -1)
            emit signalContextMenu(this->currentRow(), e->pos());
    }
    else
        QTableWidget::mousePressEvent(e);
}
 
////========Partie Classe MyQTreeWidget========////
MyQTreeWidget::MyQTreeWidget() : QTreeWidget()
{
    setAcceptDrops(true);
}
 
MyQTreeWidget::MyQTreeWidget(QWidget *pParent) : QTreeWidget()
{
    setParent(pParent);
    setAcceptDrops(true);
}
 
void MyQTreeWidget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::RightButton)
    {
        QTreeWidget::mousePressEvent(e);
        if(currentItem()->isSelected())
            emit signalContextMenu(e->pos());
    }
    else
        QTreeWidget::mousePressEvent(e);
}
 
void MyQTreeWidget::mouseDoubleClickEvent(QMouseEvent *e)
{
    MyQTreeWidgetItem *item = reinterpret_cast<MyQTreeWidgetItem *>(this->currentItem());
 
    e->ignore();
 
    emit signalDoubleClic(item);
}
 
void MyQTreeWidget::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
 
    }
 
}