Drag & Drop v QT 4.2

February 25, 2007 on 5:20 pm | In Poznámečky |

Drag&drop je technologie, kterou Vám jistě nemusím představovat. Něco někde chytnete, pustíte úplně někde jinde a hle ono se s tím něco provede. Vzhledem k jednoduchosti s jakou se takto pracuje, jsem se rozhodl naučit se tuto vlastnost implementovat i do mých QT aplikací (nejnovější budiš mata). Trolltech (firma stojící za celým QT) má v dokumentaci velice pěkně napsaný návod jak na to. Buhužel pro mě je v něm chyba, kterou se snažím vyřešit už půl dne.

Drag část mi funguje bezvadně. Dokonce pokud prvek vezmu a dám do jiné aplikace, tak se pokusí něco udělat. Třeba v konzoli se vypíše textová informace poslaná v mimeData. Problém nastává až u drop (tedy u položení prvku). Je asi potřeba zmínit, že jsem dědil od QTreeWidget, přepsal si metody dragEnterEvent() a dropEvent() a zavolal setAcceptDrops(true), přesně jak po mě tento návod žádá.

Jenže při přenesení prvku na takto upravený widget jde vidět na kurzoru zamítavé přeškrtlé kolečko (omlouvám se, ale nedokázal jsem vytvořit screenshot této scenérie). Metoda dragEnterEvent() se volá - pokud jsem do ní uložil debug code (std::cout << “dragEnterEvent() se vola” << std::endl;), tak se text vypíše. Nevolá se až dropEvent(), což docela zamrzí, když je to metoda, která celou akci má řídit. Po mnoha pokusech a omylech jsem konečně přišel na příčinu. Tou je metoda dropMoveEvent(). Netuším co za svinstvo dělá v rodiči (QTreeWidget::dropMoveEvent()), ale zabraňuje drop operaci nad celým widgetem. Pokud si ji ve svém potomku předefinuji a hlavně ji opět nevolám, tak vše funguje krásně. Kdyby tento fakt neopoměli napsat i do manuálu, tak by mi ušetřili pár hodin práce… :-)

2 Comments »

RSS feed for comments on this post. TrackBack URI

  1. ty voe pred maturitou vytvori prvni spustitelny program ja se poseru tak tomu se rika extrem

    to ja hulil pred maturou a dnes delam reditele hotelu chro chro chro

    Comment by cune — 2007-02-26 #

  2. Pokrok doby :-D

    Comment by jarcec — 2007-02-26 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^