Unsolved Getting information about dragged item - QTreeWidgetItem
-
Hello,
I have a QTreeWidget with only one column.
This column has one top item with some subitem, and some of these subitem have some subsubitem:main subitem subsubitem1 subsubitem2 subsubitem3 subitem1 subsubitem11 subsubitem12 subsubitem13
Only subsubitem are draggable.
QByteArray e = event->mimeData()->data("application/x-qabstractitemmodeldatalist"); QDataStream stream(&e, QIODevice::ReadOnly); QString dropped; while (!stream.atEnd()) { int row, col; QMap<int, QVariant> roleDataMap; stream >> row >> col >> roleDataMap; dropped = roleDataMap[0].toString(); }
This get the text of the item, col is always 0 but row isn't enough to tell which item is parent.
If i drag subsubitem3, row = 2, being an index only tied to the parent item, how to get the parent, or how to solve this?
Note that I'm dropping into a QTextEdit of another class, I can't access my QTreeWidget from there -
Hi and welcome to devnet,
What exactly do you want to get in your QTextEdit ?
-
The handling of the drag and drop is done already, but depending on the parent item, i need to use a different member
The QTextEdit doesn't matter, that part is working, i just need to get the parent of the item -
In that case, shouldn't you rather provide everything in the dragged data ? Otherwise, you'll be starting a tight coupling between widgets who shouldn't need to know anything from each other.
-
Well, I wouldn't be asking here if I knew what I should do.
Let's breakdown this more, the app is an editor, the QTreeWidget item which are draggable are filename (not complete, only filename) but i do have a vector of complete filename to be used when we need to open that file, I do not want to display the complete filename in the tree.
While working on the drag and drop into the Qtextedit, i only used the filename i had in the tree as testing purpose (dropping on a tabbar of a QTabWidget which contains the QTextedit creates a new tab, but if you drop on the qtextedit at some specific part, it splits the view, and create a new qtabwidget with a tab where the text of that tab is 'dropped' from the code in my first post.
But to access the corresponding complete filename in my vector to open the file, i need to use the index of item in the tree.
However I do have a problem of 'communication' between my class. At first i was just playing around so i made a main class inheriting qmainwindow which has my tree and the different vectors, but I made a second class inheriting QTabwidget and all the drag and drop event of the QTextedit are then handled from that class. Are you suggesting that I get rid of that second class and that i put everything in my main class? I admit that when i started I was unsure about signals and i thought i had to create another class to access the event such as drag&drop here, but i could use signals from my main class, correct? -
In that case, it looks like a QTreeView with a custom model would be better.
From that model, you can then provide all the data that your various widgets need through QMimeData and thus make them independent of the source.