显式存储结构中的项目

时间:2010-11-25 09:42:22

标签: c++ qt struct

我想创建一个文件,其中包含我需要在程序中使用的所有KeyPairs。但是,我认为将它嵌入代码中会更好,所以相反,我想把它放在一个结构中。例如,如何将这些项显式放在结构中?

 {Qt::Key_0, "Win1"},
 {Qt::Key_1, "Win2"},
 {Qt::Key_2, "Win3"},
 {Qt::Key_3, "Win4"},
 {Qt::Key_4, "Win5"},
 {Qt::Key_5, "Win6"},
 {Qt::Key_6, "Win1"},
 {Qt::Key_7, "Win7"},
 {Qt::Key_8, "Win3"},
 {Qt::Key_9, "Win5"}

我如何访问这些项目?

3 个答案:

答案 0 :(得分:5)

只需声明结构,然后对其进行初始化:

const struct
{
  Qt::Key mKey;
  const char* mKeyName;
} key_names[] = {
 {Qt::Key_0, "Win1"},
 {Qt::Key_1, "Win2"},
 {Qt::Key_2, "Win3"},
 {Qt::Key_3, "Win4"},
 {Qt::Key_4, "Win5"},
 {Qt::Key_5, "Win6"},
 {Qt::Key_6, "Win1"},
 {Qt::Key_7, "Win7"},
 {Qt::Key_8, "Win3"},
 {Qt::Key_9, "Win5"}
};

在这里,我假设Qt::Key_0等值是Key enumeration类型的值,根据您的使用情况,这似乎是合理的。如果你需要在某处引用struct类型本身,你需要给它一个struct标签(= C ++中的类名);为简洁起见,我省略了它。

访问与任何其他阵列一样:

for(size_t i = 0; i < sizeof key_names / sizeof *key_names; i++)
{
  printf("the key value %u is mapped to the name '%s'\n",
      (unsigned int) key_names[i].mKey,
      key_names[i].mKeyName);
}

答案 1 :(得分:2)

嗯...

选项1:

struct myPair
{
   Qt::Key k;
   QString s; 
};

myPair mykeys[] = {{Qt::Key1, "Hello"}, {Qt::Key2, "Blah"}, etc};

选项2:

#include <boost/assign.hpp>
#include <map>
using namespace boost::assign

std::map<Qt::Key, Qstring> myMap;

int main()
{
   myMap += (key1, val1)(key2, val2)(etc);
}

选项3:

只需要你想要的任何数据结构(我投票给std :: map)并在一些Init()函数中手动插入这些条目。

答案 2 :(得分:0)

您可以(几乎)将该块代码用作数组初始值设定项。