zoukankan      html  css  js  c++  java
  • 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 返回值};

     

     

     

     

     

  • 相关阅读:
    MVC视图展现模式之移动布局解析-续集
    网站就必须用响应式布局吗?MVC视图展现模式之移动布局
    用Word写博客园文章
    扩:new and override
    通告
    List-style-type属性失效
    在线浏览PDF之PDF.JS (附demo)
    08. Web大前端时代之:HTML5+CSS3入门系列~H5 Web存储
    07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置
    06. Web大前端时代之:HTML5+CSS3入门系列~HTML5 画布
  • 原文地址:https://www.cnblogs.com/yangjiaoshou/p/13050910.html
Copyright © 2011-2022 走看看