Название: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: UVD от Июль 01, 2016, 11:50 нужно такое:
при добавлении записи типа myrecord в конец любого вектора, чтобы другие векторы с записями того же типа myrecord, добавляли в свой конец значение своей последней записи например есть Код: QVector <myrecord> val1; и при добавлении записи в val1: Код: val1.push_back(new_myrecord); надо чтобы в других векторах было: Код: val2.push_back(val2.last()); и так для любого вектора, остальные должны добавлять последнее свое значение начал делать с сигналами и слотами, но так и не понял как связать все вектора между собой Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: Racheengel от Июль 01, 2016, 12:25 Не вектора надо связывать, а сделать контроллер, который будет их синхронизировать.
Т.е. он будет содержать все вектора внутри себя и иметь метод типа AddRecord(myrecord& new_myrecord) { val1.push_back(new_myrecord); val2.push_back(new_myrecord); val3.push_back(new_myrecord); } Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: UVD от Июль 01, 2016, 12:29 должно быть не
AddRecord(myrecord& new_myrecord) { val1.push_back(new_myrecord); val2.push_back(new_myrecord); val3.push_back(new_myrecord); } а для val1 Код: val1.push_back(new_myrecord); для val2 Код: val1.push_back(val1.last()); и т.д. если таких векторов 100, то каждому контроллер? а если я потом 101 вектор добавлю все остальные контроллеры переписывать надо? Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: Racheengel от Июль 01, 2016, 12:42 Не, контроллер только один будет.
Он должен все вектора в себе содержать. Если надо только один обновлять, то тогда как то так: MyVectorContoller::AddRecord(QVector<myrecord>* vecPtr, myrecord& new_myrecord) { val1.push_back(&val1 == vecPtr ? new_myrecord : val1.last()); val2.push_back(&val2 == vecPtr ? new_myrecord : val2.last()); val3.push_back(&val3 == vecPtr ? new_myrecord : val3.last()); ... } Но у меня сразу вопрос: если вектора пустые, то val2.last() работать не будет. Что тогда предполагается делать? Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: Igors от Июль 01, 2016, 12:58 Лучше val1(2, 3) слить в контейнер напр
Код Тогда добавление Код
нужно такое: Возникают сильные сомнения что так действительно "надо". Обычно в таких случаях используются индексы чтобы не дублить данные при добавлении записи типа myrecord в конец любого вектора, чтобы другие векторы с записями того же типа myrecord, добавляли в свой конец значение своей последней записи Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: UVD от Июль 01, 2016, 13:12 Не, контроллер только один будет. Он должен все вектора в себе содержать. Но у меня сразу вопрос: если вектора пустые, то val2.last() работать не будет. Что тогда предполагается делать? сделаем так: инициализировать вектора первым значением при создании, чтобы всегда было начальное значение для last() а можно ли все таки через сигналы и слоты как то сделать? без контроллера? например так (сорри за код т.к. не вполне могу свободно писать на С++): Код: someFunction { Sender.push_back(); } Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: Igors от Июль 01, 2016, 14:17 а можно ли все таки через сигналы и слоты как то сделать? без контроллера? Можно, напр такКод Но такое решение, мягко говоря, "неадекватно", а то и просто неграмотно, т.к. тратит массу ресурсов попусту, "зато" неудобно в использовании. Напр появился еще val4 - и придется связывать его сигналами со всеми уже имеющимися, причем дважды. Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: UVD от Июль 01, 2016, 15:00 Можно, напр так Код
О! мне не хватало "public QObject, ", никак не мог победить ошибку "no matching function for call to 'QObject::connectImpl..." теперь оно скопилировалось. вот что я накорябал Код
накорябал и как то сомнение начало грызть, что это заработает p/s/ при объявлении переменной этого класса и компиляции - ошибка, пока отбросил данный вариант Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: Racheengel от Июль 01, 2016, 22:28 с контроллером и сигналы не нужны, и векторов хоть 100500 можно наделать, а код не поменяется)
Название: Re: Как связать все переменные одного класса сигналами и слотами между собой ? Отправлено: Igors от Июль 02, 2016, 05:43 с контроллером и сигналы не нужны, и векторов хоть 100500 можно наделать, а код не поменяется) Избегать жирных решений - это рефлекс, научить этому нельзя :) |