我有以下布局:Qt的:通过C类从ClassA的传递变量ClassB的
MainWindow <--------- Settings
\
\
V
PerformOps
主窗口接受来自设置传递的变量,并把它们传递到PerformOps。 如果未使用Settings类,则MainWindow将默认传递给PerformOps。
目前我做的:
class Settings{
public:
Settings(*parent);
var1, var2, var3
.
.
void exec();
}
class PerformOps{
public:
PerformOps();
var1, var2, var3;
.
.
void start();
}
class MainWindow{
private:
Settings *set; //share pointers over all methods
PerformOps *op;
bool settings_not_clicked = false;
void saveChanges()
{
QSettings settings("my","app");
settings.setValue("value1", op->var1);
settings.setValue("value2", op->var2);
settings.setValue("value3", op->var3);
}
void loadChanges()
{
QSettings settings("my","app");
op->var1 = settings.value("value1");
op->var2 = settings.value("value2");
op->var3 = settings.value("value3");
}
void closeEvent(QCloseEvent *event)
{
event->ignore();
saveChanges();
event->accept();
}
void takeDataAndDoStuff() //This is always called
{
op = new PerformOps;
if(settings_not_clicked) {
loadChanges()
}
else {
op->var1 = 33;
op->var2 = "Geronimo!";
op->var3 = true;
}
op->start();
}
void getStuff_maybe_if_clicked() //This might not be always called
{
Settings *set = new Settings(this);
set->exec() //Pause parent, run Settings
settings_not_clicked = false;
}
问:是否有不诉诸肮脏的方法来共享跨类数据的更清洁的方式:op->var1 = set->var1;
,考虑到该set
指针可能并不总是被初始化?
只是想知道(无关的问题),你知道'QSettings'ç姑娘? – SingerOfTheFall 2012-08-07 10:06:08
我无法遵循这是什么问题..你为什么称它为“脏”? – 2012-08-07 10:14:15
@SingerOfTheFall是的,我正在使用它 - 这是我的问题的主要来源。 例如,当我保存更改时,我从'set'指针写入所有值。但是当阅读我的更改时,我在哪里阅读?回到设置指针?这是不允许的。 – tetris11 2012-08-07 10:14:24