[gelöst] QDrag mit Button
[gelöst] QDrag mit Button
Hallo,
ich habe einen Button erstellt, und auf das signal clicked() ein QDrag erstellt, mit der übergabe des Buttons (ui.objButtonTF1).
Mein Ziel war es, den Button "auzuheben" und über meinen Label "loszulassen" und dann die Position relativ zum Label zu speichern...
Ich möchte der der Benutzer bestimmte Anzeigeelemente Positionieren kann.... doch das einzige was ich bekomm is eine Fehlermeldung die aussagt, das ich keine MimeData gesetzt habe, bevor ich das "Drag" starte...
mit den MimeData kann ich irgendwie leider nichts anfangen....
irgendwelche Tipps?
ich habe einen Button erstellt, und auf das signal clicked() ein QDrag erstellt, mit der übergabe des Buttons (ui.objButtonTF1).
Mein Ziel war es, den Button "auzuheben" und über meinen Label "loszulassen" und dann die Position relativ zum Label zu speichern...
Ich möchte der der Benutzer bestimmte Anzeigeelemente Positionieren kann.... doch das einzige was ich bekomm is eine Fehlermeldung die aussagt, das ich keine MimeData gesetzt habe, bevor ich das "Drag" starte...
mit den MimeData kann ich irgendwie leider nichts anfangen....
irgendwelche Tipps?
Zuletzt geändert von CSchirner am 9. Juli 2007 14:13, insgesamt 1-mal geändert.
-
NoobSaibot
- Beiträge: 99
- Registriert: 27. Januar 2005 15:55
Also habs etz anhand des Beispiels von Qt4.2 geschafft drag and drop mit nem label zu machen... funktioniert sehr gut... dennoch hab ich bissl abneigung gegen sachen, die ich net versteh wie die funktionieren...
Die Events verstehe ich wie die funktionieren... aber
http://doc.trolltech.com/4.2/draganddro ... t-cpp.html
Das Dropevent... da wird einfach n neues label erstellt ... aber was passiert mit dem alten? Wird der alleine gelöscht? Weil ein Delete gibts ja net...
Wenn mir jemand das erklären könnte wäre nett...
MFG
Christopher Schirner
Die Events verstehe ich wie die funktionieren... aber
http://doc.trolltech.com/4.2/draganddro ... t-cpp.html
Das Dropevent... da wird einfach n neues label erstellt ... aber was passiert mit dem alten? Wird der alleine gelöscht? Weil ein Delete gibts ja net...
Wenn mir jemand das erklären könnte wäre nett...
MFG
Christopher Schirner
Das entfernen des verschobenen Labels wird in der Klasse draglabel.cpp durchgeführt mit dem Befehl "close()".
http://doc.trolltech.com/4.2/draganddro ... l-cpp.html
http://doc.trolltech.com/4.2/draganddro ... l-cpp.html
MfG @udisello
Qt Version 4.3.0, MS VS 2005
Qt Version 4.3.0, MS VS 2005
Dabei hilft Dir sicher die Funktion:
Was meinst Du denn mit verwalten?const QObjectList & QObject::children () const
Returns a list of child objects. The QObjectList class is defined in the <QObject> header file as the following:
typedef QList<QObject*> QObjectList;
The first child added is the first object in the list and the last child added is the last object in the list, i.e. new children are appended at the end.
MfG @udisello
Qt Version 4.3.0, MS VS 2005
Qt Version 4.3.0, MS VS 2005
-
NoobSaibot
- Beiträge: 99
- Registriert: 27. Januar 2005 15:55
um alle QLabels zu bekommen kannst du die funktion aufrufen.
Code: Alles auswählen
findChildren<QLabel*>()Naja ich will die "Verwalten" weil ich nen paar Membervariablen von der Vererbten Klasse abfragen will.. Name, Position, Bezeichnung blablalba 
Wollte das erst in nem Vektor verwalten... wie verhält sich das egtl in der Objectlist? Werden die von Qt gelöschten objekte auch aus der Objectlist gelöscht?
EDIT:
Ist es auch möglich das Label zu verschieben ohne es zu löschen und wieder zu erstellen!? O_o
Wollte das erst in nem Vektor verwalten... wie verhält sich das egtl in der Objectlist? Werden die von Qt gelöschten objekte auch aus der Objectlist gelöscht?
EDIT:
Ist es auch möglich das Label zu verschieben ohne es zu löschen und wieder zu erstellen!? O_o
Das sollte so sein, hab es noch nicht überprüft. Du kannst das Label natürlich auch nur verschieben, ohne es zu löschen und neu zu erstellen.wie verhält sich das egtl in der Objectlist? Werden die von Qt gelöschten objekte auch aus der Objectlist gelöscht?
Code: Alles auswählen
wordLabel->move(x, y);MfG @udisello
Qt Version 4.3.0, MS VS 2005
Qt Version 4.3.0, MS VS 2005
Also das Drag and Drop funktioniert etz perfekt... doch eine Frage hab ich noch...
Ich will jetzt von einem QTabWidget aus mein Label ins "MainWindow" droppen... hab schon probiert das parent mit "setParent" aufs MainWindow zu legen beim DragEvent, damit ich vom TabWidget ein Objekt aufheben kann und ins Mainwidget "draggen"... doch irgendwie funktioniert das net
Hab etz 2 Stundenlang danach gesucht und auch QDrag etc durchgelesen... ich komm einfach net drauf wie ich das Realisieren kann
//EDIT:
Ich hab etz mal folgendes Versucht.. ich hab das TabWidget überladen... und dann in meiner erbenden Klasse DragList die Events wie dragEnterEvent, dragMoveEvent, dropEvent eingebaut...
Genauso wie ich diese Methoden in meinem "Haupt-Fenster" implementiert habe...
Je nach dem wo das ding gedroppt wird, wird im DragList oder im MainWindow das dropEvent aufgerufen...
So sieht der Code vom DragList aus...
der Einzige unterschied im MainWindow ist das setzen es Parents... dort wird er auf this gesetzt...
Dennoch "verschwindet" das zu Objekt das ich Drag'n'Droppen will... es existiert zwar noch... aber aufn Widget kann ich es nicht mehr sehen...
Innerhalb des TabWidgets funktioniert übrigens das Drag and Drop... ich kann auf dem gleichen Tab die "Items" hin und herschieben. .. zwar passt noch was mit der position nicht ganz... das lässt sich aber lösen...
Hat jemand noch ne idee an was das drag and drop noch scheitern könnte?
Vielen Dank schonmal für eure Hilfe...
Ich will jetzt von einem QTabWidget aus mein Label ins "MainWindow" droppen... hab schon probiert das parent mit "setParent" aufs MainWindow zu legen beim DragEvent, damit ich vom TabWidget ein Objekt aufheben kann und ins Mainwidget "draggen"... doch irgendwie funktioniert das net
Hab etz 2 Stundenlang danach gesucht und auch QDrag etc durchgelesen... ich komm einfach net drauf wie ich das Realisieren kann
//EDIT:
Ich hab etz mal folgendes Versucht.. ich hab das TabWidget überladen... und dann in meiner erbenden Klasse DragList die Events wie dragEnterEvent, dragMoveEvent, dropEvent eingebaut...
Genauso wie ich diese Methoden in meinem "Haupt-Fenster" implementiert habe...
Je nach dem wo das ding gedroppt wird, wird im DragList oder im MainWindow das dropEvent aufgerufen...
So sieht der Code vom DragList aus...
der Einzige unterschied im MainWindow ist das setzen es Parents... dort wird er auf this gesetzt...
Code: Alles auswählen
void DragList::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasText())
{
QString sText = event->mimeData()->text();
QPoint position = event->pos();
event->source()->setParent(this->widget(0));
event->source()->move(position);
if (children().contains(event->source())) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->acceptProposedAction();
}
} else {
event->ignore();
}
}
Dennoch "verschwindet" das zu Objekt das ich Drag'n'Droppen will... es existiert zwar noch... aber aufn Widget kann ich es nicht mehr sehen...
Innerhalb des TabWidgets funktioniert übrigens das Drag and Drop... ich kann auf dem gleichen Tab die "Items" hin und herschieben. .. zwar passt noch was mit der position nicht ganz... das lässt sich aber lösen...
Hat jemand noch ne idee an was das drag and drop noch scheitern könnte?
Vielen Dank schonmal für eure Hilfe...