QT的优点、项目文件目录、main函数、QpushButton、对象树、Qt中坐标系、Qt中信号和槽、自定义信号和槽、信号和槽的拓展、Qt4版本中的信号和槽的缺点、Lambda表达式

同名文件之间切换的快捷键:F4;

查看帮助文档:去安装目录下的bin/assistant.exe;

1、优点:

(1)跨平台

(2)效率高

(3)嵌入式

(4)市场份额好

应用场景:

(1)linux桌面环境 KDE

(2)WPS

(3)谷歌地图

(4)屏幕共享

(5)VLC播放器

2、QT项目文件目录

.pro文件

2.1 QT+= 所属模块 widget 版本以上

2.2 TARGET   生成.exe程序名称

2.3 TEMPLATE app 应用程序模板

2.4 SOURCE  HEADER  源文件 头文件

3、main函数

3.1 QApplication a  应用程序对象  有且仅有一个

3.2 a.exec() 进行消息循环  阻塞

3.3 MyWidget w  窗口对象

3.4 默认不会弹出窗口 想要显示窗口 需要调用 show

4、QPushButton

4.1 QPushButton * btn  = new QPushButton;

4.2 btn->setParent(this) 设置父亲

4.3 btn->setText (“aaa”)

4.4 btn->move( x, y)

4.5 重置窗口大小  resize(w,h)

4.6 重置窗口标题  setWindowTitle(“aaaa”)

4.7 设置固定窗口大小  setFixedSize(w,h)

QPushButton的两种创建方式:

 

QPushButton * btn = new QPushButton; 头文件 #include <QPushButton>

    //设置父亲
    btn->setParent(this);
    //设置文字
    btn->setText("德玛西亚");
    //移动位置
    btn->move(100,100);

    //第二种创建
    QPushButton * btn2 = new QPushButton("孙悟空",this);
    //重新指定窗口大小
    this->resize(600,400);

    //设置窗口标题
    this->setWindowTitle("第一个项目");

    //限制窗口大小
    this->setFixedSize(600,400);

 

5、对象树

5.1 所有new出来的对象 不用管释放

5.2 原因 children表中的对象会在窗口关闭后进行自动释放

对象树的图示:

 

 

 

6、Qt中坐标系

6.1坐标系:

以左上角为原点0,0),X向右增加,Y向下增加。

如下图所示:

7、Qt中的信号和槽

7.1 需求 点击按钮 关闭窗口

7.2 connect(信号发送者,发送的信号,信号接受者,处理槽函数)

7.3 优点  松散耦合

8、Qt自定义信号和槽

8.1 自定义信号:

  8.1.1  返回值 void

  8.1.2  需要声明 不需要实现

  8.1.3  可以有参数

自定义信号和槽的整个过程:

 

首先定义一个学生类和老师类:
    老师类中声明信号 饿了 hungry
signals:
       void hungury();
    学生类中声明槽   请客 treat
    public slots:
       void treat();
    在窗口中声明一个公共方法下课,这个方法的调用会触发老师饿了这个信号,而响应槽函数学生请客
    void MyWidget::ClassIsOver()
{
    //发送信号
    emit teacher->hungury();
}
    学生响应了槽函数,并且打印信息
//自定义槽函数 实现
void Student::eat()
{
       qDebug() << "该吃饭了!";
}
在窗口中连接信号槽
    teacher = new Teacher(this);
    student = new Student(this);

    connect(teacher,&Teacher::hungury,student,&Student::treat);
并且调用下课函数,测试打印出 “该吃饭了”
自定义信号和槽

 

8.2 自定义槽函数

  8.2.1 返回值void

  8.2.2 需要声明 需要实现

  8.2.3 可以有参数

8.3 触发自定义的信号

  8.3.1  emit

8.4 当自定义信号和槽 出现重载时候,原先写法失效,因为执行的函数地址不明确

8.5 解决方法: 利用函数指针 来明确指向哪个函数的地址

自定义的信号 hungry带参数,需要提供重载的自定义信号和 自定义槽
void hungury(QString name);  自定义信号
void treat(QString name );    自定义槽
但是由于有两个重名的自定义信号和自定义的槽,直接连接会报错,所以需要利用函数指针来指向函数地址, 然后在做连接
void (Teacher:: * teacherSingal)(QString) = &Teacher::hungury;
void (Student:: * studentSlot)(QString) = &Student::treat;
connect(teacher,teacherSingal,student,studentSlot);

8.6 QString转char*    toUtf8 转 QBtyeArray 类型  在利用data 转成char*

qDebug()<<"treat myteacher eat.."<<foodName.toUtf8().data();

9、 信号和槽的拓展

9.1 信号是可以连接信号的

9.2 信号和槽可以断开  disconnect

9.3 一个信号可以连接多个槽函数

9.4 多个信号可以连接同一个槽函数

9.5 信号和槽函数的个数必须一一对应

9.6 信号的参数个数 可以大于槽函数的参数个数 ,反之不可以

10、Qt4版本信号槽写法(以及缺陷)

10.1  信号: SIGNAL下

10.2  槽: SLOT下

10.3  优点: 参数直观 不用写函数指针

10.4  缺点:不会做类型检测

11、Lambda表达式

11.1 [](){}

11.2 []内部 = 值传递 推荐  &引用传递 不推荐

11.3 ()参数

11.4 {} 函数实现体

11.5 mutable改变值传递的内部变量

11.6 返回值  []() -> type {  return 返回值};

 

 

 

 

 

原文地址:https://www.cnblogs.com/yangjiaoshou/p/13050910.html