Как обновить QAbstractListModel из другого виджета в Qt? ⇐ C++
-
Гость
Как обновить QAbstractListModel из другого виджета в Qt?
Прежде всего, я не программист Qt/C++, поэтому не уверен, что смогу правильно описать свою проблему. У меня есть настольное приложение с парой окон (виджетов). Я хотел бы изменить некоторые данные (модель) в окне, а затем обновить QAbstarctListModel в другом окне. Данные хранятся в файле, и я хочу использовать их по-другому в другом окне. Элементы отображаются в ComboBox. Я сделал небольшую функцию, которая загружает данные в модель из центрального файла. Это прекрасно работает, когда окно построено. В init() я загружаю данные в модель. Но когда я меняю данные (меняется содержимое файла) и хочу перезагрузить модель со своей функцией в другом окне, она не меняется. Если я закрою программу и открою ее снова, содержимое ComboBox будет в порядке, однако цель не состоит в том, чтобы перезапустить программу.
Я копирую некоторые фрагменты кода:
(WndPage230.cpp)
RecipeModel WndPage230::model(36); WndPage230::WndPage230(QWidget *parent) : QScadaWindow(родительский), ui(новый пользовательский интерфейс::WndPage230) { таймертик=0; download_status=0; ui->setupUi(это); ui->cm_recipe->setModel(&model); прогресс = новый DlgProgress (это); Connect(ui->btn_up, SIGNAL(clicked()),this, SLOT(on_btn_home_clicked())); connect(ui->btn_view, SIGNAL(clicked()),this, SLOT(on_btn_home_clicked())); } WndPage230::~WndPage230() { удалить интерфейс; } void WndPage230::init() { std::fill_n(lastvalues, sizeof(lastvalues)/sizeof(lastvalues[0]), -1); //ui->cm_recipe->setModel(&WndRcpEditCIP::model); //здесь я загружаю данные model.loadAppr(QApplication::applicationDirPath() + "/data/recipes_cip"); } (WndRcpEdit.cpp)
else if (sender()==ui->btn_approve) { if (!Authenticator::authenticate(Authenticator::LEVEL_QA, this)) return; если (curr_record.status==1) возврат; if (QMessageBox::question(this, tr("Одобрить"), tr("Вы уверены, что одобряете выбранный рецепт?"), QMessageBox::Да | QMessageBox::Нет)!=QMessageBox::Да) return; is_modified = ложь; model.approveRecord(curr_index, curr_record); ui->btn_approve->setEnabled(false); // здесь я хочу перезагрузить данные WndPage230::model.loadAppr(QApplication::applicationDirPath() + "/data/recipes_cip"); addEvent(10009, Authenticator::username(), curr_record.name + "(CIP)"); }
Прежде всего, я не программист Qt/C++, поэтому не уверен, что смогу правильно описать свою проблему. У меня есть настольное приложение с парой окон (виджетов). Я хотел бы изменить некоторые данные (модель) в окне, а затем обновить QAbstarctListModel в другом окне. Данные хранятся в файле, и я хочу использовать их по-другому в другом окне. Элементы отображаются в ComboBox. Я сделал небольшую функцию, которая загружает данные в модель из центрального файла. Это прекрасно работает, когда окно построено. В init() я загружаю данные в модель. Но когда я меняю данные (меняется содержимое файла) и хочу перезагрузить модель со своей функцией в другом окне, она не меняется. Если я закрою программу и открою ее снова, содержимое ComboBox будет в порядке, однако цель не состоит в том, чтобы перезапустить программу.
Я копирую некоторые фрагменты кода:
(WndPage230.cpp)
RecipeModel WndPage230::model(36); WndPage230::WndPage230(QWidget *parent) : QScadaWindow(родительский), ui(новый пользовательский интерфейс::WndPage230) { таймертик=0; download_status=0; ui->setupUi(это); ui->cm_recipe->setModel(&model); прогресс = новый DlgProgress (это); Connect(ui->btn_up, SIGNAL(clicked()),this, SLOT(on_btn_home_clicked())); connect(ui->btn_view, SIGNAL(clicked()),this, SLOT(on_btn_home_clicked())); } WndPage230::~WndPage230() { удалить интерфейс; } void WndPage230::init() { std::fill_n(lastvalues, sizeof(lastvalues)/sizeof(lastvalues[0]), -1); //ui->cm_recipe->setModel(&WndRcpEditCIP::model); //здесь я загружаю данные model.loadAppr(QApplication::applicationDirPath() + "/data/recipes_cip"); } (WndRcpEdit.cpp)
else if (sender()==ui->btn_approve) { if (!Authenticator::authenticate(Authenticator::LEVEL_QA, this)) return; если (curr_record.status==1) возврат; if (QMessageBox::question(this, tr("Одобрить"), tr("Вы уверены, что одобряете выбранный рецепт?"), QMessageBox::Да | QMessageBox::Нет)!=QMessageBox::Да) return; is_modified = ложь; model.approveRecord(curr_index, curr_record); ui->btn_approve->setEnabled(false); // здесь я хочу перезагрузить данные WndPage230::model.loadAppr(QApplication::applicationDirPath() + "/data/recipes_cip"); addEvent(10009, Authenticator::username(), curr_record.name + "(CIP)"); }
Мобильная версия