Название: как передать контейнер в другой класс
Отправлено: mokynis от Март 24, 2016, 19:03
имеется класс формы, в ней QMap. И таблица в этой форме, заполняемая из модели на основе этой QMap. Как мне передать указатель на этот контейнер или его адрес во второй класс, чтобы, меняя значения контейнера, менять их в классе формы? Хидер выглядит примерно так: class myform : public QDialog { private: QMap<QString,QString> m1; }; class mytab:public QAbstractTableModel { private: QMap<QString,QString> m2; //тут пробовал и &m2, и *m2 public: mytab(QMap<QString,QString>&,QObject *pobj=0); void myfunc(); };
и реализация //заполняем m1 mytab tt=new mytab(m1);
void mytab::mytab(QMap<QString,QString>&t) { m2=t; t.insert("a","aa"); //изменяется и в m1-это хорошо } void mytab::myfunc() {//вот тут надо бы, чтобы тоже изменялось сразу в m1 m2.insert("b","bb");//а оно только m2 меняет }
как сделать, чтобы потом не придумывать лишние сигналы для передачи изменений в класс формы?
Название: Re: как передать контейнер в другой класс
Отправлено: gil9red от Март 24, 2016, 20:32
Используйте, например, указатели: C++ (Qt) class myform : public QDialog { private: QMap<QString,QString>* m1; }; class mytab: public QAbstractTableModel { private: QMap<QString,QString>* m2; public: mytab(QMap<QString,QString>*t, QObject *pobj=0) { m2=t; t->insert("a","aa"); } void myfunc() { m2->insert("b","bb"); } // Заглушки int rowCount(const QModelIndex &parent = QModelIndex()) const {return 0;} int columnCount(const QModelIndex &parent = QModelIndex()) const {return 0;} QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {return QVariant();} };
Проверяем: C++ (Qt) QMap<QString,QString>* m1 = new QMap<QString,QString>(); //заполняем m1 mytab* tt = new mytab(m1); qDebug() << m1->size(); // 1 tt->myfunc(); qDebug() << m1->size(); // 2
Название: Re: как передать контейнер в другой класс
Отправлено: Igors от Март 25, 2016, 11:27
Объявление ссылкой (&m2) более соответствует целям что Вы рассказали - хотя неплохо и указатель. Ссылка четко показывает что этот (и только этот) контейнер используется/редактируется, а с указателем контейнер может быть и другим.
|