Bonsoir les développeurs,
voila j'ai fait un programme ou j'ai mis plusieurs QTextEdit séparé par des Qlabel, le QLabel contient une image qu'on peut deplacer.
moi je veut qu'a chaque fois que je déplace le label je change la taille et l’emplacement des 2 QTextEdit de tel sorte a ne pas avoir un vide.
voila mon code :
line.h
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
 
class line : public QWidget
{
public :
     line();
 
protected:
    void dragEnterEvent(QDragEnterEvent *event);
    void dragMoveEvent(QDragMoveEvent *event);
    void dropEvent(QDropEvent *event);
    void mousePressEvent(QMouseEvent *event);
private:
    QPoint p;
    QTableWidget tableWidget;
 
 
};
line.cpp
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
QPoint p;
line::line() : QWidget()
{       setMinimumSize(1000,400);
        setAcceptDrops(true);
        int j=0,k=0;
           for(int i=0;i<10;i++)
           {
            QTextEdit *text1=new QTextEdit(this);
            text1->setGeometry(0+j+k,100,80,150);
            text1->setText("text");
            j=j+text1->width();
            k=2;
            QLabel *lab = new QLabel(this);
            lab->setPixmap(QPixmap("line.png"));
            lab->setGeometry(j,100,2,150);
            lab->show();
           }
}
 void line::dragEnterEvent(QDragEnterEvent *event)
    {
        if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
            if (event->source() == this) {
                event->setDropAction(Qt::MoveAction);
                p = event->pos();
                event->accept();
            } else {
                event->acceptProposedAction();
            }
        } else {
            event->ignore();
        }
    }
 
    void line::dragMoveEvent(QDragMoveEvent *event)
 {
        if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
            if (event->source() == this) {
 
                event->setDropAction(Qt::MoveAction);
                event->accept();
            } else {
                event->acceptProposedAction();
            }
        } else {
            event->ignore();
        }
    }
 
 void line::dropEvent(QDropEvent *event)
    {
        if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
            QByteArray itemData = event->mimeData()->data("application/x-dnditemdata");
            QDataStream dataStream(&itemData, QIODevice::ReadOnly);
 
            QPixmap pixmap;
            QPoint offset;
            dataStream >> pixmap >> offset;
 
            int x=event->pos().x();
            int y=p.x();
            int a=(y-x);
            int w1=childAt((y-5),100)->width();
            int w2=childAt((y+5),100)->width();
            if(a<0)
            { childAt((y-5),100)->resize((w1+ a),150);
              childAt((y+5),100)->resize((w2+a),150);
              childAt((y+5),100)->move(x,100);
            }
            else
            {   childAt((y+5),100)->resize((w2-a),150);
                childAt((y+5),100)->move(x,100);
                childAt((y-5),100)->resize((w1-a),150);
            }
            QLabel *newIcon = new QLabel(this);
                 newIcon->setPixmap(pixmap);
                 newIcon->move(((event->pos().x())-offset.x()),100);
                 newIcon->show();
                 newIcon->setAttribute(Qt::WA_DeleteOnClose);
 
               if (event->source() == this) {
                 event->setDropAction(Qt::MoveAction);
                 event->accept();}
               else {
                  event->acceptProposedAction();}
 
 
        } else {
            event->ignore();
        }
 
    }
 
    //! [1]
void line::mousePressEvent(QMouseEvent *event)
    {
        QLabel *child = static_cast<QLabel*>(childAt(event->pos()));
        if (!child)
            return;
 
        QPixmap pixmap = *child->pixmap();
 
        QByteArray itemData;
        QDataStream dataStream(&itemData, QIODevice::WriteOnly);
        dataStream << pixmap << QPoint(event->pos() - child->pos());
    //! [1]
 
    //! [2]
        QMimeData *mimeData = new QMimeData;
        mimeData->setData("application/x-dnditemdata", itemData);
    //! [2]
 
    //! [3]
        QDrag *drag = new QDrag(this);
        drag->setMimeData(mimeData);
        drag->setPixmap(pixmap);
        drag->setHotSpot(event->pos() - child->pos());
    //! [3]
 
        QPixmap tempPixmap = pixmap;
        QPainter painter;
        painter.begin(&tempPixmap);
        painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127));
        painter.end();
 
        child->setPixmap(tempPixmap);
 
        if (drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction) == Qt::MoveAction)
            child->close();
        else {
            child->show();
            child->setPixmap(pixmap);
        }
    }
s'il vous plait proposez moi quelque idées pour l'ameliorer.