一个长度可变的数组结构体的用法(命名空间的用法)

结构定义如下:

namespace QEvdevKeyboardMap {
 
    struct Mapping {
        quint16 keycode;
        quint16 unicode;
        quint32 qtcode;
        quint8 modifiers;
        quint8 flags;
        quint16 special;
 
    };
	#define MAX_COMPOSING_STEPS	6
    struct Composing {
        quint8 type;
	quint32 result;
	struct
	{
	    quint32 qtcode; 			// QT code
	    bool pressed;			// Pressed or released			
	    quint32 holdtime;			// Hold time, unit: ms			
	}step[MAX_COMPOSING_STEPS+1];           // The last one mark end     
    };
}
 这里定义的是一个组合按键的结构,后面的这个数组长度可以变,实例如下: 
#define ONE_KEY_LONG_PRESS      0x01
#define TWO_KEY_LONG_PRESS      0x02
#define THREE_KEY_LONG_PRESS    0x03
 
const QEvdevKeyboardMap::Composing QEvdevKeyboardHandler::s_keycompose_default[] = {
    {ONE_KEY_LONG_PRESS,     0x01000290,{{0x0100024a,true,5000},{0,false,0}}}, // One key long press
    {TWO_KEY_LONG_PRESS,     0x01000291,{{0x01000265,true,2000},{0x01000264,true,2000},{0,false,0}}}, // Two key long press 
    {TWO_KEY_LONG_PRESS,     0x01000292,{{0x01000260,true,2000},{0x0100025f,true,2000},{0,false,0}}}, // Two key long press 
    {THREE_KEY_LONG_PRESS,   0x01000293,{{0x01000267,true,2000},{0x01000266,true,2000},{0x01000265,true,2000},{0,false,0}}}, // Threee key long press
};

由于这个数组的成员可能很多,所以它被定义在一个单独的头文件中。注意这里对该数组进行初始化时的引用方法:

const QEvdevKeyboardMap::Composing  QEvdevKeyboardHandler::s_keycompose_default[]
 
 这里用了一个命名空间 
QEvdevKeyboardHandlers_keycompose_default 
[] 定义在类 
QEvdevKeyboardHandler
class QEvdevKeyboardHandler : public QObject
{
    ......
    static const QEvdevKeyboardMap::Composing s_keycompose_default[];
};

用起来还是蛮方便的:

m_keycompose = s_keycompose_default;
m_keycompose_size = sizeof(s_keycompose_default) / sizeof(s_keycompose_default[0]);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,数组结构体都是用来存储一组相关数据的数据类型。 数组是一组相同类型的数据元素的集合,可以通过下标来访问和操作数组中的元素。数组的声明格式为:`type arrayname[length];`,其中type表示数组元素的数据类型,arrayname表示数组的名称,length表示数组长度。 例如,下面是一个包含5个整数的数组的声明和初始化过程: ```c int numbers[5] = {1, 2, 3, 4, 5}; ``` 结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。结构体的声明格式为:`struct structname { member1; member2; ... } var;`,其中structname表示结构体的名称,member1、member2等表示结构体的数据成员。结构体的实例化格式为:`struct structname var;`。 例如,下面是一个包含姓名和年龄两个数据成员的结构体的声明和实例化过程: ```c struct Person { char name[20]; int age; }; struct Person p1 = {"Tom", 18}; ``` 当然,我们也可以定义一个包含数组数据成员的结构体: ```c struct Student { char name[20]; int scores[3]; }; struct Student s1 = {"Mike", {80, 85, 90}}; ``` 在这个示例中,我们定义一个包含姓名和成绩数组两个数据成员的结构体,然后实例化一个具体的学生对象。 需要注意的是,数组结构体在内存中的存储方式是不同的。数组的元素在内存中是连续存储的,而结构体的数据成员则是按照声明的顺序依次存储的。因此,在使用数组结构体时需要注意它们的特点和使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值