qt中数组如何定义和使用?Qt怎么定义槽函数?

数组是用于储存多个相同类型数据的集合,它们是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起,那在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工具网。

推荐阅读:

JSON数据的语法格式是什么?JSON数组怎么操作?

java工程师怎么考证?java工程师考证要掌握哪些知识?

git合并是合并到前一次提交吗?git合并多次提交怎么操作?