Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. Drag & drop desde y hacia una carpeta Windows y Linux
QtWS25 Last Chance

Drag & drop desde y hacia una carpeta Windows y Linux

Scheduled Pinned Locked Moved Spanish
3 Posts 2 Posters 2.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    ChanchoCiego
    wrote on last edited by
    #1

    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-

    1 Reply Last reply
    0
    • T Offline
      T Offline
      tobias.hunger
      wrote on last edited by
      #2

      Also check this identical post in english: https://qt-project.org/forums/viewthread/22807/

      1 Reply Last reply
      0
      • C Offline
        C Offline
        ChanchoCiego
        wrote on last edited by
        #3

        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.

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved