Идея такова, есть главное окно.
Есть настройки, они вызываются как модальное окно из главного.
В настройках есть LineEdit которые собственно и содержат настройки, на главном окне эти настройки выводятся в LineEdit(только для чтения, ибо с label не хочет работать QDataWidgetMapper).
Есть класс Settings который управляет настройками, тоесть запись в базу данных из окна настроек и вывод этих данных на главную форму.
Settings .h#ifndef SETTINGS_H
#define SETTINGS_H
#include <QObject>
#include <QtGui>
#include <QtSql>
#include <QDataWidgetMapper>
class Settings : public QObject
{
Q_OBJECT
public:
explicit Settings(QObject *parent = 0);
void initMapper();
void initMainMapper(QLineEdit* name,QLineEdit* sodo,QLineEdit* imo,QLineEdit* signal);
void initSettingsMapper(QLineEdit* name,QLineEdit* sodo,QLineEdit* sodokode,QLineEdit* imo,QLineEdit* signal);
void Save();
signals:
public slots:
private:
QSqlTableModel* settingsModel;
QDataWidgetMapper* mapper;
};
#endif // SETTINGS_H
Settings .cpp#include "settings.h"
Settings::Settings(QObject *parent) :
QObject(parent)
{
}
void Settings::initMapper()
{
settingsModel=new QSqlTableModel(this,QSqlDatabase::database());
settingsModel->setTable("settingsisp");
settingsModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
settingsModel->select();
mapper = new QDataWidgetMapper(this);
mapper->setModel(settingsModel);
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
}
void Settings::initMainMapper(QLineEdit *name,QLineEdit *sodo, QLineEdit *imo, QLineEdit *signal)
{
mapper->addMapping(name,settingsModel->fieldIndex("name"));
mapper->addMapping(sodo,settingsModel->fieldIndex("sodo"));
mapper->addMapping(imo,settingsModel->fieldIndex("imo"));
mapper->addMapping(signal,settingsModel->fieldIndex("signal"));
mapper->toFirst();
}
void Settings::initSettingsMapper(QLineEdit* name,QLineEdit* sodo,QLineEdit* sodokode,QLineEdit* imo,QLineEdit* signal)
{
mapper->addMapping(name,settingsModel->fieldIndex("name"));
mapper->addMapping(sodo,settingsModel->fieldIndex("sodo"));
mapper->addMapping(sodokode,settingsModel->fieldIndex("sodokode"));
mapper->addMapping(imo,settingsModel->fieldIndex("imo"));
mapper->addMapping(signal,settingsModel->fieldIndex("signal"));
mapper->toFirst();
}
void Settings::Save()
{
mapper->submit();
settingsModel->submitAll();
mapper->toFirst();
}
пояснения:
void Settings::initMapper() - инициализация мапперов
void Settings::initMainMapper(QLineEdit *name,QLineEdit *sodo, QLineEdit *imo, QLineEdit *signal) - делаем связку в мейн форме
void Settings::initSettingsMapper(QLineEdit* name,QLineEdit* sodo,QLineEdit* sodokode,QLineEdit* imo,QLineEdit* signal) - делаем связку в форме настроек
в конструкторе мейне создаем объект класса Settings, и проводим инициализацию и связку
Settings setting=new Settings();
setting->initMapper();
setting->initMainMapper(ui->lineEdit_name,ui->lineEdit_sodo,ui->lineEdit_imo,ui->lineEdit_signal);
дальше при сигнале(нажали на кнопку вызова настроек) .. 2 параметром передаем указатель на созданный в мейне объект Settings
SettingsDialog* settings_dialog=new SettingsDialog(this,setting);
settings_dialog->setModal(true);
settings_dialog->show();
тыкк..
теперь
SettingsDialog - форма настроек.
SettingsDialog::SettingsDialog(QWidget *parent,Settings* set) :
QDialog(parent),
ui(new Ui::SettingsDialog)
{
ui->setupUi(this);
setting=set; //Settings* setting;
//setting->initMapper(); - если вызываем то редактируем нормально при вы
setting->initSettingsMapper(ui->lineEdit_name,ui->lineEdit_sydo,ui->lineEdit_sydo_code,ui->lineEdit_imo,ui->lineEdit_signal);
}
//setting->initMapper(); - если вызываем то редактируем нормально, при нажатии кнопки сохранить вызываем метод void Settings::Save() и данные нормально записываются в базу
если не вызываем то данные отображаются, но редактированию не поддаются при нажатии сохранить данные не записываются в базу, а на оборот берутся из базы и записываются в lineedit .
вообщем проблема нужно что бы данные записались базу из настроек и отобразились на главной форме.
честно может где уже запутался.. проект большой.
Нормальным способом решить не удалось..
сделал так из
пишем в class Settings
public:
void updateMapper();
void Settings::updateMapper()
{
settingsModel->submitAll();
mapper->submit();
mapper->toFirst();
}
В SettingsDialog
signals:
void UpdateMainMapper();
и вызываем наш сигнал, при сигнале от кнопки Сохранить
void SettingsDialog::on_pushButtonSave_clicked()
{
setting->SaveMapper();
emit UpdateMainMapper();
qDebug()<<"Сохраняет";
}
А в мейне где создаем окно настроек добавляем
SettingsDialog* settings_dialog=new SettingsDialog();
connect(settings_dialog,SIGNAL(UpdateMainMapper()),this,SLOT(MainMapper())); // !это!
settings_dialog->setModal(true);
settings_dialog->show();
И пишем слот
private slots:
void MainMapper();
void MainDialog::MainMapper()
{
qDebug()<<"Сигнал из настроек";
setting->updateMapper();
}
Как то так..