Russian Qt Forum
Ноябрь 26, 2024, 10:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как лучше пробросить модель в друой диалог?  (Прочитано 3668 раз)
sector
Гость
« : Октябрь 08, 2009, 14:13 »

Есть некая форма, у нее есть своя модель и вью. При определенном событии или клике на вью или на кнопке должен открываться новый диалог с данными выбраными на вью. Подскажите каким более правильным способом лучше передать данные из модели? Всю обработку хотелось бы проводить в новом диалоге. Заранее благодарен)
« Последнее редактирование: Октябрь 08, 2009, 15:22 от sector » Записан
CroCIV
Гость
« Ответ #1 : Октябрь 09, 2009, 08:19 »

Можно указатель на модель сделать public, можно создать родительский класс с protected указателем на модель и унаследовать от него взаимодействующие с этой моделью классы, можно эти классы обьявить дружественными друг к другу и написать функцию получения указателя на модель, можно запихнуть указатель в конструктор нового класса, даже можно указатель кинуть во временный файл, или использовать QSettings, или QResource для хранения указателя, даже можно прокинуть указатель в базу данных на сервере  Строит глазки, можно еще что-нибудь придумать, все зависит от той задачи которую ты решаешь и от того как ты хочешь реализовать ее  Смеющийся
Записан
ranet
Гость
« Ответ #2 : Октябрь 09, 2009, 09:03 »

Можно указатель на модель сделать public.....    можно запихнуть указатель в конструктор нового класса
Я так и делаю Подмигивающий, самый естественный в простейшем случае способ.. конечно по моему скромному мнению:)
Код:
//класс главного окошка приложения
class energy_MainWin : public QMainWindow
{
    Q_OBJECT

public:
    energy_MainWin(QWidget *parent = 0);
    ~energy_MainWin();
    Ui::energy_MainWin *ui;

private:
 //   Ui::energy_MainWin *ui;

......../дофига чего

    //указатель на модель для работы с таблицами площадок, городов и устройств
   QSqlRelationalTableModel * sites_model;

......../еще дофига чего
}

диалог редактирования должен получать этот указатель как параметр при вызове конструктора, то есть:
Код:
class Towns_dialog : public QDialog, public Ui::Towns_dialogClass
{
    Q_OBJECT

public:
    Towns_dialog(QWidget *parent = 0,  QSqlRelationalTableModel * model_in_dialog = 0);
    ~Towns_dialog();
    Ui::Towns_dialogClass dialog_ui;

............//дофига всякой фигни


}

При вызове конструктора передаем указателя:
Код:
//где-нибудь в главное_окошко.cpp
if (!dialog_sites)
    {
        dialog_sites = new SitesDialog(this, sites_model);
    }

Если используем QDataWidgetMapper, то с ним стоит обойтись так же, чтобы потом "спрятать" внутри конструктора нового класса привинчивание его к lineEdit'ам например.
Записан
sector
Гость
« Ответ #3 : Октябрь 09, 2009, 10:38 »

Огромное спасибо)) Этот вариант полностью подходит... он более естественен... а я было начал с QModelIndex заморачиваться))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 21.