참조 된 변수 src_의 속성을 참조 할 때 프로그램이 종료됩니다. 코드의 주요 개념은 MainWindow 클래스가 SettingsWindow 클래스를 호출하여 일부 설정을 표시한다는 것입니다. 저장된 설정을 처리하는 추가 클래스가 두 개 있습니다.이 클래스는 ConfigSource 및 ConfigUpdater입니다. src_은 ConfigUpdater에서 참조되는 변수로 정의됩니다. 내가 액세스하려고 할 때참조 변수에 액세스하면 프로그램이 종료됩니다.
#ifndef SETTINGSWINDOW_H
#define SETTINGSWINDOW_H
#include <QMainWindow>
#include <QModelIndex>
#include <QSignalMapper>
#include <QRadioButton>
#include <QSpinBox>
#include <QTimer>
#include "cameracommands.h"
struct Config
{
/* General Options */
QString general_key_lock;
QString general_back_light;
};
class ConfigSource
{
public:
ConfigSource() {
qDebug() << "inside configSource :))";
config_.general_aperture_control = "Reset";
config_.general_automatic_exposure = "Full Auto";
}
Config config() const {return config_;}
void setConfig(const Config& cfg) {config_ = cfg;}
// Config config_;
private:
Config config_;
};
class ConfigUpdater : public QObject
{
Q_OBJECT
public:
ConfigUpdater(ConfigSource& src) : src_(src) {}
public slots:
void apply() {src_.setConfig(tempConfig_);}
void cancel() {tempConfig_ = src_.config();}
public:
void updateGeneralBackLight(QString s) {tempConfig_.general_back_light = s; qDebug() << "BackLight updated :)";}
void updateGeneralKeyLock(QString s) {tempConfig_.general_key_lock = s; qDebug() << "KeyLock updated :)";}
Config tempConfig_;
ConfigSource& src_;
};
//----------------------------
namespace Ui {
class SettingsWindow;
}
class SettingsWindow : public QMainWindow
{
Q_OBJECT
public:
explicit SettingsWindow(ConfigSource &src, QWidget *parent = 0);
~SettingsWindow();
void print_config(Config cfg);
signals:
void clicked(const QString &text);
void sendToPLC(QByteArray);
public slots:
void updateGeneralBackLight();
void updateGeneralKeyLock();
private:
void set_mappings();
Ui::SettingsWindow *ui;
ConfigUpdater *config_updater;
};
#endif // SETTINGSWINDOW_H
설정 소스 파일
SettingsWindow::SettingsWindow(ConfigSource &src, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SettingsWindow)
{
/* initializations */
ui->setupUi(this);
config_updater = new ConfigUpdater(src);
이 부분은 중요하다 : MainWindow를 내부
:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ConfigSource cfg;
settings = new SettingsWindow(cfg,this);
settings->print_config(cfg.config());
...
SettingsWindow 헤더 및 소스 여기 코드는 src_ 슬롯 적용 및 취소에서 프로그램 종료, 예 :
_tempconfig 변수를 인쇄해도 문제가 없습니다. 단순화를 위해 헤더 파일에서 일부 단추 슬롯을 제거했습니다.
이 버그를 해결하는 방법을 나에게 보여 주면 내가 감사합니다 :)
당신이 받고있는 오류와 그것을 일으키는 약간의 코드를 보여주십시오. 문제를 복제하고 격리하는 짧은 예가 훨씬 더 좋을 것입니다. 임시 참조를 사용하는 것 같습니다. – AJG85