EXCEL表里的数据转换成insert into tablename(field)values() SQL插入语句
2008-09-12 11:41
766 查看
信号和槽机制
1.概述
Qt采用了一种全新的对象和方法的关联与通信机制,称为信号和槽机制。信号和槽机制是独立于标准C++编译器的,在编译之前需要经过Qt的专门预处理工具MOC(Meta Object Compiler,元组件编译器)对代码进行预处理后才能进一步进行C++代码的编译。MOC会将Qt应用程序中特有的代码自动转化为相应的标准C++语法代码。
信号和槽的概念是Qt编程中最具代表性的特点之一。GUI编程中通常使用回调函数进行事件处理,而回调函数通常是一个函数指针,不同的事件、不同的对象都有着各自的回调函数。当事件到来时,系统会通过调用对应的回调函数来完成相应的处理。
Qt引入了信号和槽机制来取代回调函数。凡是继承自QObject的类都可以具有信号和槽成员,并可以使用它们。信号和槽的使用可以有效地减少函数指针的使用,使程序代码清晰简洁,对于事件响应管理更加容易。此外,信号和槽没有严格规定函数的类型,因此在调用过程中是安全的。
信号和槽的使用可以实现信息封装,增加程序的灵活性。信号和槽都采用函数作为存在形式。在Qt程序初始化或运行的过程中,可以静态或动态地将信号和槽相关联。当某一事件到来时,会发射信号,但是发射后,它并不需要关心信号的处理者是谁。当触发槽函数时,说明与其关联的信号被接收,但它不需要了解谁发出了信号,它只需要负责进行相应的处理即可。
2.信号
信号是Qt中对事件的一种抽象,当一个事件到来时,会发射信号。所谓的发射信号,就是通过Qt中特有的通信机制,调用和信号相关的各个槽函数。因此当发射信号时,将执行与其相关联的槽函数。信号采用函数的形式,因此,当所有与信号关联的函数全部返回后,信号函数才会返回。信号函数在形式上与标准C++中的虚函数类似,信号函数只有头文件中函数的声明,而没有函数的定义(即函数体)。信号的声明形式如下:
对于信号的声明与普通的C++函数无异,它不限制参数的个数与类型,同时它还支持重载。不过信号的返回值只要求必须为void型,因为事件是一种中断,对于突发性的中断,不可能期望其有返回值。
3.槽
槽是Qt中负责信号处理的实体,当有信号发射时,与信号关联的所有槽会依次执行。槽也采用函数的形式,不过槽需要有实际的函数定义,相当于在标准C++中对虚函数的多态实现。槽函数的声明形式如下:
与信号相同,槽函数的定义同普通的C++函数无异,支持C++函数的一些特性。同时,槽函数可以采用标准C++函数的使用方式,在代码中直接调用。槽函数具有访问权限的标识,它们同C++类的成员函数的标识相同,分别为:public、protected、private。public说明该槽函数可以被其他类的信号所关联,protected说明只能被类本身和其子类的信号所关联,private说明该槽函数只能被类本身的信号所关联。
在Qt的基类QObject中有一个成员函数用来完成信号和槽的映射,函数的原型如下:
其中,sender和receiver分别指定了被关联的信号和槽的发送者和接收者。signal是信号,Qt要求必须使用宏SINGAL将信号函数指针转化为指定的类型。member是槽,Qt要求必须使用宏SLOT转化函数指针。宏SINGAL和SLOT的参数形式如下:
其中,funname是函数名,param_type_x是函数中对应参数的类型。
1.概述
Qt采用了一种全新的对象和方法的关联与通信机制,称为信号和槽机制。信号和槽机制是独立于标准C++编译器的,在编译之前需要经过Qt的专门预处理工具MOC(Meta Object Compiler,元组件编译器)对代码进行预处理后才能进一步进行C++代码的编译。MOC会将Qt应用程序中特有的代码自动转化为相应的标准C++语法代码。
信号和槽的概念是Qt编程中最具代表性的特点之一。GUI编程中通常使用回调函数进行事件处理,而回调函数通常是一个函数指针,不同的事件、不同的对象都有着各自的回调函数。当事件到来时,系统会通过调用对应的回调函数来完成相应的处理。
Qt引入了信号和槽机制来取代回调函数。凡是继承自QObject的类都可以具有信号和槽成员,并可以使用它们。信号和槽的使用可以有效地减少函数指针的使用,使程序代码清晰简洁,对于事件响应管理更加容易。此外,信号和槽没有严格规定函数的类型,因此在调用过程中是安全的。
信号和槽的使用可以实现信息封装,增加程序的灵活性。信号和槽都采用函数作为存在形式。在Qt程序初始化或运行的过程中,可以静态或动态地将信号和槽相关联。当某一事件到来时,会发射信号,但是发射后,它并不需要关心信号的处理者是谁。当触发槽函数时,说明与其关联的信号被接收,但它不需要了解谁发出了信号,它只需要负责进行相应的处理即可。
2.信号
信号是Qt中对事件的一种抽象,当一个事件到来时,会发射信号。所谓的发射信号,就是通过Qt中特有的通信机制,调用和信号相关的各个槽函数。因此当发射信号时,将执行与其相关联的槽函数。信号采用函数的形式,因此,当所有与信号关联的函数全部返回后,信号函数才会返回。信号函数在形式上与标准C++中的虚函数类似,信号函数只有头文件中函数的声明,而没有函数的定义(即函数体)。信号的声明形式如下:
signal: void MySignal(); void MySignal(int x); void MySignalParam(int x, int y);
对于信号的声明与普通的C++函数无异,它不限制参数的个数与类型,同时它还支持重载。不过信号的返回值只要求必须为void型,因为事件是一种中断,对于突发性的中断,不可能期望其有返回值。
3.槽
槽是Qt中负责信号处理的实体,当有信号发射时,与信号关联的所有槽会依次执行。槽也采用函数的形式,不过槽需要有实际的函数定义,相当于在标准C++中对虚函数的多态实现。槽函数的声明形式如下:
public slot: void MySlot(); void MySlot(int x); void MySlotParam(int x, int y);
与信号相同,槽函数的定义同普通的C++函数无异,支持C++函数的一些特性。同时,槽函数可以采用标准C++函数的使用方式,在代码中直接调用。槽函数具有访问权限的标识,它们同C++类的成员函数的标识相同,分别为:public、protected、private。public说明该槽函数可以被其他类的信号所关联,protected说明只能被类本身和其子类的信号所关联,private说明该槽函数只能被类本身的信号所关联。
在Qt的基类QObject中有一个成员函数用来完成信号和槽的映射,函数的原型如下:
#include <QObject> static bool QObject::connect (const QObject *sender, const char *signal, const QObject *receiver, const char *member);
其中,sender和receiver分别指定了被关联的信号和槽的发送者和接收者。signal是信号,Qt要求必须使用宏SINGAL将信号函数指针转化为指定的类型。member是槽,Qt要求必须使用宏SLOT转化函数指针。宏SINGAL和SLOT的参数形式如下:
SIGNAL(funname(param_type_1, param_type_2, …)) SLOT(funname(param_type_1, param_type_2, …))
其中,funname是函数名,param_type_x是函数中对应参数的类型。
相关文章推荐
- 如何往有自增标识字段的表插入数据时,同时给自增标识字段插入值呢,在Inset Into语句前后加上SQL语句:SET IDENTITY_INSERT TableName ON和SET IDENTITY_INSERT TableName OFF
- 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入
- 写一个程序,能够动态生成多条插入语句如:insert into MyStudents values(“人名1”,年龄,‘男’,分数1,分数2)。将生成的插入语句输出到记事本文件 SQLStr.txt中
- 动态生成多条插入语句如:insert into MyStudents values(“人名1”,年龄,‘男’,分数1,分数2)。将生成的插入语句输出到记事本文件 SQLStr.txt中
- 如何优化用SQL语句INSERT INTO … SELECT插入数据时锁全表的问题
- 如何优化用SQL语句INSERT INTO … SELECT插入数据时锁全表的问题
- 优化用SQL语句INSERT INTO … SELECT插入数据时锁全表的问题
- 动态生成多条插入语句如:insert into MyStudents values(“人名1”,年龄,‘男’,分数1,分数2)。将生成的插入语句输出到记事本文件 SQLStr.txt中
- mybatis插入oracle数据库,如果用foreash就用select xx from dual;否则用insert into tablename(,,)values()时不要用foreach
- C# 用sql insert into 语句向oracle插入数据数据一直未更新
- 规则 2.16: insert语句要列出具体字段名,严禁使用insert into tablename values ( … )方式,应使用insert into tablename ( … ) va
- 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的差别,sql文件导入
- 动态生成多条插入语句如:insert into MyStudents values(“人名1”,年龄,‘男’,分数1,分数2)。将生成的插入语句输出到记事本文件 SQLStr.txt中
- 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]
- insert into table 插入多条数据
- SQL里,如何同时插入几条值?不重复进行insert into XX valuesXXX
- 将Excel表格的数据转换成sql的insert语句
- sql insert into select语句写法-将查询结果直接插入到表中
- SQL语句实现不存在即插入,存在则increase某字段的功能insert into … on duplicate key update
- 在SQL语句insert into中,数据来自用户页面的输入和另一个表中的命令行写法!