Название: несколько коннектов(помочь решить вопрос) Отправлено: koldun90 от Июль 24, 2014, 18:57 проблема в следующем есть коннекты:
Код: connect(model1,SIGNAL(poluchinf(QString)),ui->treeView,SIGNAL(putpapki(QString))); суть в том когда допустим model1 испускает сигнал она передает путь куда дропается файл или папка Код: bool myqfilesystemmodel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) проблема в том заключается что слот должен вызываться допустим если я дропаю на тривиев(дерево) то метод копирования вызываться должен только Код: connect(model1,SIGNAL(poluchinf(QString)),ui->treeView,SIGNAL(putpapki(QString))); ТО я дропаю на тривиев а вызываются слоты еще и на тейблвиев и на листвиев Код: connect(model1,SIGNAL(poluchinf(QString)),ui->tableview,SIGNAL(putpapki(QString))); так вот нельзя мне сделать как нибудь так что бы вызывался слот в соответствии с тем на какой я дропаю элемент(тривиев листвиев или тейблвиев) Можно выполнить проверку над каким элементом находится курсор мыши в dropMimeData? Посоветуйте вообще как лучше сделать? Название: Re: несколько коннектов(помочь решить вопрос) Отправлено: kambala от Июль 24, 2014, 20:25 putpapki должно быть слотом SLOT, а не сигналом SIGNAL.
а putpapki точно определен в классах-наследниках твоих отображений? может правильнее this ставить 3-м параметром? Название: Re: несколько коннектов(помочь решить вопрос) Отправлено: koldun90 от Июль 24, 2014, 20:58 в общем вот так вот полная картина
Код:
mytreeview класс Код: void mytreeview::copirovanie(QString putpapki) //putpapki-------���� ���������� ����������� ���������� ����� dropmimedata mylistview.cpp Код: void mylistview::copirovanie(QString putpapki) //putpapki-------���� ���������� ����������� ���������� ����� dropmimedata Код: void mytableview::copirovanie(QString putpapki) //putpapki-------���� ���������� ����������� ���������� ����� dropmimedata ВООБЩЕМ СМЫСЛ ТАКОЙ что я дропаю на тейблвиев допустим ,а выполняются у меня все три метода и тейбл виев и листвиеве и тривиев как сделать так чтобы при дропе допустим на тейблвиев (активировался метод копирования только на тейблвиеве) ps метод у всех классов(mytreeview mylistview mytableview наследников одинаковый (всмысле код и функционал) файл менеджер имеется 6 окон 3 левых окна и 3 правых поначалу отображается окна тейблвиев тейблвиев model1--модель файловой системы в 3 левых окнах model2-- модель файловой системы в 3 правых окнах вот и смысл втом блин что при вызове копиорования slot (copirovanie) он начинает поочередно выполнять всем методы копирования( не зависимо куда я дропаю) а должен выполнять только один метод( допустим дропую на тейблвиев и выполняется метод ТОЛЬКО который в тейблвиев) а сейчас пока выполняютсявсе поочередно 3 метода КОНЕчНО МОЖНО РЕШИТЬ ЭТОТ ВОПРОС взять и тупо сделать ( model1, model2,model3,model4,model5,model6) 6 моделей на каждый виджет по модели ( а у меня пока одна модель на 3 левых и одна на 3 правых виджета) но это уж слишком кошерно поэтому прошу помощи Название: Re: несколько коннектов(помочь решить вопрос) Отправлено: kambala от Июль 24, 2014, 22:18 копипаста — это плохо. выдели этот метод в отдельный класс и сделай множественное наследование.
6 моделей — это неправильно конечно (как, в общем, и две). посмотри в сторону *View::dropEvent и оттуда просто вызывай свой метод вместо высылки сигнала из модели. Название: Re: несколько коннектов(помочь решить вопрос) Отправлено: koldun90 от Июль 25, 2014, 05:16 Я так понял
1)убрать все коннекты 2) вызывать тупо этот метод из dropeventa 3)сделать 1 метод на все 3 класса(общий) если допустим дропаю на тривиев то метод копирования вызывается из mytreeview::dropevent(event ) я правильно понял тогда и получится что не будет так сказать конфликтов Название: Re: несколько коннектов(помочь решить вопро Отправлено: s_Creator от Июль 25, 2014, 06:07 имхо, копирование должна выполнять модель, т.е. в ней должен находится метод копирования который будешь вызывать из dropevent.
Тогда и не будет копи пасты и каждый будет делать свое дело. модель работать с файловой системой а виевы отображать эту модель. Причем метод копирования лучше сделать слотом а в виевах сигналы к нему Название: Re: несколько коннектов(помочь решить вопрос) Отправлено: koldun90 от Июль 25, 2014, 19:22 я вызываю метод копирования в dropmimedata модели
а как иначе?. Ведь только тогда можно получить папку в которую я дропаю объекты поэтому копирование нужно вызывать в dropmimedata Название: Re: несколько коннектов(помочь решить вопрос) Отправлено: s_Creator от Июль 25, 2014, 20:23 Ну так в чем вопрос?
модели не важно как вы это отображаете, ей важно что делать: т.е. слот (в моделе) должен понимать команду что и куда копировать (копировать можно либо файл в другую папку, либо файл в другую или туже но под другим именем, либо папку аналогично файлу со всем содержимым). Продумайте входные параметры слота чтоб было ему понятно (как в проводнике винды или тотал командер по F5). А Ваши представления (которые могут представлять модель как им хочется или как умеют) будут давать модели команду (сигнал) что надо произвести копирование и входными параметрами объяснят модели, что надо именно сделать (т.е. файл или папку скопировать в другую папку или с переименованием) |