Drag and Drop outside the Main Window



  • Hi, I have a question about the drag and drop.

    I created a custom widget that inherits from QWidget. This custom widget can be located in 2 different places. Initially, the custom widget is located in a QTabWidget (in fact a class that inherits from QTabWidget). This QTabWidget is located into a QDockedWidget in QMainWindow.

    I want to be able to drag the tab containing the custom widget, and create a top level window. So, when the main window will be minimized, my custom widget will not. Finally, I want to be able to put back the top level window in the QTabWidget.

    So far, I have created a class (CustomTabBar) that inherits from QTabBar, in order to be able to drag the custom widget from the QTabWidget to the outside (I'm using Qt 4.4.3 in CentOS 4). I reimplemented the mousePressEvent and mouseMoveEvent functions. In the mouseMoveEvent function, if the moving distance is long enough, I created a QDrag object.

    First problem : I cannot drop outside QMainWindow. Is there a way to do this? Should I use a particular mime data?

    So, now, I'm not able to drop outside QMainWindow, but I can inside it, since I added some code to be able to do it and accept drops. My custom widget is now independant from QMainWindow (I have set his parent to NULL), and I can minimize QMainWindow without affecting my custom widget.

    Now, I want to put back my custom widget into the QTabWidget. So I have reimplemented dragEnterEvent and dropEvent functions in my CustomTabBar and in the QTabWidget, and set them to accept drops. But when I begin the drag, my cursor doesn't change to tell me a drag has begins, and thus the QTabWidget does not accept the drop. So I tried to initialize the drag from my custom widget, ie detect the mouse press and move events, but these are not even called.

    Second problem: How do I initialize the drag from my custom widget (now a top level window)?

    Thanks


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.