2012-07-01 5 views
0

У меня есть один QList, который хранится в классе, который владеет указателем на экземпляр другого класса, который имеет некоторые функции для редактирования QList. Я хочу, чтобы один QList редактировался из нескольких классов на C++. Когда я удаляю элемент из списка, я хотел бы удалить его из переменной myvariable в classA. Код находится нижеРедактировать один и тот же QList из разных функций

class classA { 
    ... 

private: 
    ClassB *myclass; 
    QList<mytype> myvariable; 
} 

class classB { 
    classB::classB(QList<mytype> &variable) { 
     this->myvariable = variable; 
    } 

    ... 

private: 
    QList<mytype> myvariable; 
} 
+0

Когда вы говорите «один» QList, является то, что один в процессе, или по одному на экземпляр объекта? Когда вы говорите «несколько классов», вы имеете в виду несколько экземпляров объектов одного и того же класса? или действительно вы хотите, чтобы один QList был доступен из всех классов? Почему бы просто не сделать QList глобальной переменной, если вы действительно хотите, чтобы один экземпляр был доступен для всех классов. –

+0

QList должен быть разделен между двумя классами, A и B. Но класс A, собственный экземпляр списка – Stefano

+0

FYI, 'myclass', вероятно, должен быть' std :: unique_ptr myclass', если ему принадлежит myclass. – Zac

ответ

2

Вы очень близко всего пару твиков. Сделать myvariable ссылку, и инициализировать его в конструкторе ClassB, как это:

class classB 
{ 
    classB(QList<mytype> &variable) 
    : myvariable(variable) 
    { 
    } 

private: 
    QList<mytype>& myvariable; 
} 
+0

это работает, всего несколько вещей: это единственный способ сделать то, что я хочу? Кажется немного уродливым, чтобы иметь все эти & и инициализировать переменную myvariable таким образом. – Stefano

+1

Это C++, есть гора разных способов сделать это! :-) В этой реализации существует определенная опасность, предполагающая, что время жизни списка больше, чем 'classB'. Вы можете использовать указатель или, еще лучше, умный указатель, если вы действительно пытаетесь передать право собственности на список. Мы могли бы предложить больше предложений по разработке того, что вы пытаетесь выполнить, если вы разделили больше кода. – Zac

+0

Но, непосредственно отвечая на ваш первоначальный вопрос, это путь & его, безусловно, самый простой. – Zac

0

Вы можете ввести класс c, содержащий Static qlist. Затем сделайте его общим подклассом классов a и b.

EDIT:

class classC { 
protected: 
    static QList<mytype> mystatic; 
}  

class classA : public classC { 
private: 
} 

class classB : public classC { 
    classB::classB(QList<mytype> &variable) { 
     mystatic = variable; 
    } 
} 
+0

нет, мне нужно передать QList через конструкторы так, как я разместил. Я думаю, что можно делать то, что я хочу, но я не знаю, как – Stefano

+0

Не см., Как нужно вмешаться YouTube. Euthanasie мое предложение. Вы можете передать qlist через конструктор и затем назначить его члену Stativ. – Matthias

+0

Cleartext: Я не вижу, как ваши потребности в передаче QList через конструктор мешают моему предложению. Вы можете передать QList через конструктор и затем назначить его статическому члену (точно так же, как вы назначаете свой нестатический член). (извините за неясный комментарий в первом комментарии) – Matthias

Смежные вопросы