数组是用于储存多个相同类型数据的集合,它们是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起,那在qt中数组如何定义和使用?Q下面来我们就来给大家讲解一下。
一、数组的定义
1. 类型[] 数组名
2. 类型 数组名[]
数组是一种引用类型的变量,使用他进行定义时,仅仅定义一个引用变量【指针】,这个引用类型的变量并未指向任何一个内存,所以定义数组的时候,不能指定数组长度,定义的数组不能被使用,对数组进行初始化后才能使用。
二、使用数组
数组初始化完成后,就可以使用数组元素了,包括访问数组,为数组赋值,获取数组长度
访问数组元素:数组变量后紧跟一个[],里面为数组的索引
访问数组元素后就可以为数组元素赋值。eg: arr[1]=""
数组越界异常:java.lang.ArryIndexOutOfBoundsException:N。N为试图访问的索引
Qt怎么定义槽函数?
Qt5 中,槽函数既可以是普通的全局函数、也可以是类的成员函数、静态成员函数、友元函数、虚函数,还可以用 lambda 表达式表示。
和信号函数不同,槽函数必须手动定义(实现)。槽函数可以在程序中直接调用,但主要用来响应某个信号。自定义一个槽函数时,需要注意以下几点:
槽函数的返回值必须和信号函数相同,由于信号函数的返回值一定是 void,所以槽函数的返回值也必须为 void;
对于带参的信号函数,槽函数可以选择接收所有参数,则参数的类型、顺序、个数都必须与信号函数相同;也可以选择接收前几个参数,这些参数的类型、顺序都必须与信号函数相同;还可以选择不接受任何参数。
槽函数的参数个数只能比信号函数少,不能比信号函数多;
槽函数的参数不能有默认值。
举个例子,自定义响应 MySignal 信号的槽函数:
class MyWidget: public QWidget { //Q_OBJECT 是一个宏,添加它才能正常使用 Qt 的信号和槽机制 Q_OBJECT signals: void MySignal(QString mess1, QString mess2); public: void emitSignal() { emit MySignal(message1, message2); } //类的成员函数 void recSlot1(QString mess) { qDebug() << "执行 recSlot1() 成员函数,输出" << mess; } //指明定义的是槽函数 public slots: void recSlot2(QString mess1, QString mess2) { qDebug() << "执行 recSlot2() 槽函数,输出" << mess1 << " " << mess2; } public: QString message1; QString message2; }; //全局函数 void recSlot3() { qDebug() << "执行 recSlot3() 全局函数"; }
程序中,重点关注 recSlot1()、recSlot2()、recSlot3() 这 3 个函数:
recSlot1() 是 MyWidget 类内部的 public 成员函数,可以当做槽函数使用;
recSlot2() 位于 MyWidget 类的内部,修饰它的关键字是 public slots。slots 和 emit 一样,是 Qt 扩展的一个关键字,专门用来修饰槽函数。也就是说,recSlot2() 是 MyWidget 类中的槽函数。
recSlot3() 是全局函数,可以当做槽函数使用。
slots 关键字可以和 public、protected、private 搭配使用,它们的区别是:
public slots:该关键字修饰的槽函数,既可以在当前类及其子类的成员函数中调用,也可以在类外部的其它函数(比如 main() 函数)中调用;
protected slots:该关键字修饰的槽函数,仅允许在当前类及其子类的成员函数内调用,不能在类外部的其它函数内调用;
private slots:该关键字修饰的槽函数,只允许在当前类的成员函数内调用,不能在子类中调用,也不能在类外部的其它函数内调用。
通常情况下,槽函数使用 public slots 修饰。
很多读者会问,既然 public 修饰的成员函数可以当做槽函数,为什么还要提供 slots 关键字呢?笔者认为,“兼容旧的 Qt 版本”是其中的一个原因。Qt4 中的槽函数只能是 slots 修饰的类成员函数,Qt5 中取消了这一限制,但考虑到要兼容旧的 Qt 版本,Qt5 保留了旧版本中 connect() 函数的语法格式,也保留了 slots 关键字。
调用 connect() 函数,将 MySignal() 信号函数分别连接 recSlot1()、recSlot2()、recSlot3() 三个槽函数,实现代码为:
//类的成员函数作为槽函数 QObject::connect( & mywidget, & MyWidget::MySignal, & mywidget, & MyWidget::recSlot1); //信号函数和槽函数相连接 QObject::connect( & mywidget, & MyWidget::MySignal, & mywidget, & MyWidget::recSlot2); //全局函数作为槽函数 QObject::connect( & mywidget, & MyWidget::MySignal, & recSlot3);
我们按照以上的方法就可以定义槽函数了,不过大家需要注意的就是,槽函数必须手动定义,并且槽函数可以在程序中直接调用,最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: