Drag & drop desde y hacia una carpeta Windows y Linux
-
Hola, buenas tardes,
Estoy comenzando a migrar a Qt desde Borland C++Builder, la última versión que usé es la XE, y lamento haber tardado tanto tiempo en migrar, Qt me parece muchísimo más simple y rápido para trabajar que BCB.
Como todo principiante en este IDE y en las librerías Qt, estoy con algunos problemas para los que solicito que me ayuden.
Tengo una aplicación con un QTreeWidget y un QListWidget, y cada widget debe poder aceptar listas de archivos arrastrados desde una carpeta de Windows (el escritorio como carpeta o cualquiér otra carpeta) o de Linux y también debe poder arrastrar listas de ítems y soltarlos en una carpeta.
En BCB (Windows) yo lo hacía de esta manera (solamente desde una carpeta al componente:
En la cabecera de la clase del formulario, en la sección pública colocaba estos "capturadores":
@
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
END_MESSAGE_MAP( TForm )
@y los implementaba así:
@
void __fastcall TfrmBandeja::WmDropFiles(TWMDropFiles& Message)
{
wchar_t buff[MAX_PATH];
HDROP hDrop = (HDROP)Message.Drop;
int numFiles = DragQueryFile(hDrop, -1, NULL, NULL);
// PRUEBA
TStringList* lst = new TStringList;for (int i=0;i < numFiles;i++)
{DragQueryFile(hDrop, i, buff, sizeof(buff));
lst->Add( buff );
}
DragFinish(hDrop);expandirDirectorios( lst );
FEvArchivosIngresados( (TObject*)this, (TStringList*)lst ); // disparador del evento
}
@Uso Qt compilado con VC2010, entonces me imagino que, en Windows no debe ser complicado implementarlo. Por el lado de Linux, si se arrastra un archivo desde o hacia el escritorio, dependerá del escritorio que esté usando, pero si se arrastra desde o hacia una carpeta, supongo que la implementación debe ser bastante especifica de Qt.
Entonces:
¿Como puedo implementar la captura de estos eventos en Qt?
además:
¿Como puedo arrastrar ítems de los Widget (que son Archivos) y soltarlos en una carpeta?
Muchisimas gracias desde ya con toda ayuda o guia que me puedan dar.
Saludos.
Darío-
-
Also check this identical post in english: https://qt-project.org/forums/viewthread/22807/
-
Perdon por hacer una pregunta sobre un tema completamente documentado.
Asumí que el Drag and Drop documentado era para operaciones entre widgets de una misma aplicación. Son resabios de BCB.
La documentación completa: "http://qt-project.org/doc/qt-4.8/dnd.html":http://qt-project.org/doc/qt-4.8/dnd.html
Saludos.