最好的方法是什么? (Qt和Enum风格参数)

时间:2014-02-06 21:42:15

标签: qt dictionary struct enums settings

在Qt中,通常会看到类似于以下内容的内容:

QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner");

重要的是QSettings :: SystemScope,它是一个枚举。

我希望有一个设置提供程序(在此处不关注前面的示例,它与以下内容无关),具有get / set属性。

Settings.set(Settings::refreshRate)

refreshRate必须链接到键(字符串)和默认值(变体)。

我应该为密钥和默认值创建一个枚举和两个dicts,还是制作一个结构和一大堆变量来封装我需要的设置?我应该尝试别的吗?

谢谢!

编辑!

这就是我所做的。

// Interface
class Settings {
public:
  static QVariant get(Setting setting);
  static void set(Setting setting, QVariant value);

  const static Setting serverRefreshRate;
  const static Setting serverReportTimeout;
};

// Implementation
const Setting Settings::serverRefreshRate   = { "server/refreshRate",   10000 };
const Setting Settings::serverReportTimeout = { "server/reportTimeout", 1000 };

1 个答案:

答案 0 :(得分:0)

好吧,我想你已经使用了enum,这很可能很容易被转换为从0N-1的数字我想只是将变体和字符串存储在两个向量中或一个对矢量可以正常工作。

还有另一个问题 - 如何初始化所有这些以及如何为其添加新设置。我可以建议两种方法 - 第一种是用参数编写一堆函数调用:enumstringvariant。因此,如果程序员为枚举添加另一个值,他可以忘记调用初始化函数。另一种方法是创建函数(或者两个),它将打开所有枚举值(没有默认情况)并返回stringvariant对。您可以打开关于在switch中处理的所有枚举值的编译器警告,从而控制是否忘记在该函数中实现其中的一些。然后使用所有枚举值的循环初始化您的结构。应该在程序开头附近(最初读取设置之前)调用这些初始化函数。

嗯,这是我的想法,你可以尝试不同的方式。