2010-11-25 79 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()函數的條目。