Spróbuję przedstawić sprawę od strony kodu jak to u mnie wygląda - nie chcę zawalać wątku długim kodem ale zgrubnie opiszę temat - dlaczego to piszę ? Bo może ktoś mi z was podpowie co i gdzie wywołać. Ogólnie wiem jak to zrobić aby to działało, tylko robię tą wrzutkę tutaj, bo chcę to zrobić poprawnie, może ktoś z was wyprowadzi mnie z błędu.
wszystko zaczyna się w klasie AllSettings
- ta klasa zajmuje się utworzeniem całej struktury JSON i wygląda jak poniżej - dla uproszczenia nie podaję szczegółów implementacyjnych
class AllSettings : public QObject
{
Q_OBJECT
public:
AllSettings() = default;
AllSettings(const AllSettings &_settings) = delete;
AllSettings &operator=(const AllSettings &_settings) = delete;
QJsonObject &showSettings();
public slots:
void createNetworkSettings(QJsonObject &networkSettings);
void createDataSettings(QJsonObject &dataSettings);
void UpdateSettings();
private:
QJsonObject *crteNetworkSettings, *crteDataSettings, allSettings;
signals:
void _settings(QJsonObject &allSettings);
};
następnie wszystko z powyższej klasy wędruje do klasy SettingsFile
- klasa ta zajmuje się zapisem do pliku całego utworzonego powyżej json-a
class SettingsFile : public QObject
{
Q_OBJECT
public:
SettingsFile() = default;
QJsonObject *fileSettings();
void saveSettings();
QJsonObject readSettings();
public slots:
void setFileSettingsToSave(QJsonObject &settingsToSave);
void fileSettingsToRead();
private:
QJsonObject *settingsToSave;
QFile settingsToFile;
QString department, connection, ipAddress, login, password;
QJsonObject objectJson;
QMessageBox message;
signals:
// void DataReadFromFile(QJsonObject &dataFromJsonFile);
};
potem tworzę okno podrzędne w stosunku do MainWindow za pomocą klasy WindowSettings
- to jest to okno, które widać w pierwszym poście i zadaniem tego okna jest zebranie wszystkich danych od usera i przekazanie ich do wszystkich obu klas tj. AllSettings
& SettingsFile
- klasa okna podrzędnego wygląda jak niżej
class WindowSettings : public QDialog
{
Q_OBJECT
public:
WindowSettings(QWidget *parent = nullptr);
~WindowSettings();
private:
QHBoxLayout *layoutForLabel, *layoutForButton;
QLabel *label1, *label2;
QFont *fontOptions;
QPalette *fontColor, *fontColor2;
QBrush *brushFont, *brushFont2;
QWidget *mainWidget;
QVBoxLayout *mainLayout;
QStackedWidget *stackedWidget;
QListWidget *optionList;
QMenu *pbClearMenu;
QPushButton *pbSave, *pbApply, *pbShowSettings, *pbPopupOptions, *pbExit;
QHBoxLayout *layoutForStackedWidget;
Page1 *myPage1;
Page2 *myPage2;
SettingsPreview *settingsPreview;
AllSettings mySettings;
SettingsFile mySettingsFile;
QMessageBox messageError;
// void StateReadJsonFile(const int &state);
void dataFromJsonFile(const QJsonObject &data);
private slots:
void clearEdit();
void readSettings();
};
i teraz gdzieś w MainWindow
odpalam to okienko za pomocą takiej funkcji
void MainWindow::createActionMenuTools()
{
actionMenuTools = new QAction(this);
actionMenuTools->setText(QString(tr("Ustawienia")));
actionMenuTools->setIcon(QIcon(":icons/settings.png"));
windowSetting = new WindowSettings(this); //tutaj tworzę okno z ustawieniami
QObject::connect(actionMenuTools, &QAction::triggered, windowSetting, &QDialog::exec);
}
i ogólnie ja chcę zrobić to w ten sposób, że jak wywołuje się konstruktor klasy WindowSettings
w klasie MainWindow
- to przecież zanim on zbuduje całe to okno, to wcześniej odpali mi konstruktory klas AllSettings
i SettingsFile
czyli dane z pliku zostaną wczytane, zanim zbuduje mi się okno klasy WindowSettings
bo na tą okoliczność napisałem funkcję w klasie SettingsFile
która zwraca wskaźnik do całego wczytanego pliku json gdzieś w pamięci i ten fakt właśnie chcę wykorzystać do kilku rzeczy:
- Aby wszystkie opcje które zapisały się w pliku pojawiły się w oknie z ustawieniami za każdym razem gdy wywołam to okno
- Aby program automatycznie łączył się z bazą danych podczas uruchamiania programu - więc funkcja z klasy
SettingsFile
na 100% musiałaby się uruchamiać w klasie MainWindow
Czy dobrze myślę ? A najlepiej wypadałoby zadać pytanie czy rozumnie wam to przedstawiłem ? Bo właśnie w ten sposób od początku myślę.
Jeżeli jakaś moja koncepcja jest zła, to podajcie jakieś pomysły.