2010-11-25 72 views
1

我想创建一个文件,其中包含我需要在程序中使用的所有KeyPair。不过,我认为将它嵌入代码会更好,所以我想将它放在一个结构体中。例如,我如何显式地将这些项目放在结构中?明确存储结构中的项目

{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"} 

我怎么也访问这些项目?

回答

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,这似乎是合理的给予您使用的值。如果你需要在某处引用结构体类型,你需要给它一个结构体标签(= class name,用C++)。为简洁起见,我省略了这一点。

Access是像任何其他阵列:

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); 
} 
+0

如何访问这些项目? – Owen 2010-11-25 09:48:59

0

可以(几乎)使用的代码块作为数组初始化。

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()函数的条目。