zoukankan      html  css  js  c++  java
  • QT

    Date: 2021/3/12开始学习

    教程视频: 

    QT基本介绍:

    1. 跨平台图形界面引擎
    2. 优点 
      • 跨平台
      • 接口简单,容易上手
      • 一定程度上简化了内存回收
    3. 创建第一个QT程序 
      • 点击创建项目后,选择项目路径以及给项目起名称
      • 默认创建窗口类,比如MyWidget,基类有三种选择:QWidget   QMainWindow   QDialog
      • main函数
        • QApplication a      应用程序对象,有且仅有一个
        • myWidget w;  实例化窗口对象
        • w.show() 调用show函数, 显示窗口
        • return a.exec() 窗口进入消息循环
    4.  按钮控件常用APIs
      • 创建QPushButton *btn = new QPushButton;
      • 设置父亲  SetParent(this);
      • 设置文本  SetText("Hello");
      • 设置位置   move("width, height")
      • 重新指定窗口大小  resize
      • 设置窗口标题   SetWindowTitle
      • 设置窗口固定大小  SetFixedSize()
    5. 快捷键
      • 注释/取消注释     Ctrl  +   /
      • 运行   Ctrl + r
      • 编译   Ctrl + b
      • 字体缩放  Ctrl + 鼠标滚轮
      • 查找   Ctrl + F
      • 整体移动    Ctrl + shift + ↑ 或者↓
      • 帮助文档   F1
      • 自动对齐   Ctrl + i
      • 同名之间的 .h和.cpp 切换   F4
    6.  当创建的对象在堆区的时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,对象会被放入对象树中。
      • 一定程度上简化了内存回收机制
    7. 信号与槽
      • 连接函数:connect
      • 参数
        • 参数1   信号的发送者
        • 参数2   发送的信号(函数的地址)
        • 参数3   信号的接收者
        • 参数4   处理的槽函数(函数的地址)
      • 松散耦合
      • connect(btn, &QPushButton::clicked, this, &QWidget::close);    (点击按钮会关闭窗口)
    8. 自定义信号和槽
      • 自定义信号
        • 返回void
        • 需要声明,不需要实现 (声明void hungry();即可)
        • 可以有参数,可以重载
        • 写到signals下
      • 自定义槽函数
        • 返回void
        • 需要声明,需要实现(不仅需要声明void treat(); 还需要定义它)
        • 可以有参数,可以重载
        • 写到public下或者public slot下或者全局函数
    9. 当自定义信号和槽出现重载
      • 需要利用函数指针明确指向函数的地址
      • 比如: 
        void (Teacher:: *teachersignal)(QString) = &Teacher::hungry;
      • QString转为char*
        • .ToUtf8() 转为 QByteArray
        • .Data()转为 char*
        • 例子:
          qDebug()<<"Invite the teacher to dinner: "<<foodname.toUtf8().data();
      • 信号可以连接信号
      • 断开信号  disconnect
    10. 拓展
      • 信号可以连接信号
      • 一个信号可以连接多个槽函数
      • 多个信号可以连接同一个槽函数
      • 信号和槽函数的参数必须类型一一对应
      • 信号和槽的参数个数是不是要一致? 信号参数的个数可以多余槽函数的参数个数
      • 信号槽可以断开连接  disconnect
    11. Qt4版本写法
      • connect(信号的发送者, 发送的信号 SIGNAL(信号), 信号的接收者, 槽函数SLOT(槽函数))
      • 优点: 参数直观 
      • 缺点: 编译器不检查参数类型
    12. Lambda表达式 [](){}()
      • []标识符 匿名函数
      • = 值传递
      • & 引用传递
      • () 参数
      • {} 实现体
      • mutable 修饰 值传递变量,可以修改拷贝出的数据, 改变不了本体
      • 返回值 [](){} ->int {}

     一些代码:

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //创建一个老师对象
        this->zt = new Teacher(this);
    
        //创建一个学生对象
        this->st = new Student(this);
    
        //老师饿了 学生请客吃饭
     //   connect(zt, &Teacher::hungry,st,&Student::treat);
    
        void (Teacher:: *teachersignal)(QString) = &Teacher::hungry;
        void (Student::*studentslot)(QString) = &Student::treat;
        connect(zt,teachersignal,st,studentslot);
    
        classisover();
    
        //创建一个按钮
        QPushButton *btn = new QPushButton("class is over");
        btn->move(200,200);
        btn->setParent(this);
        //无参数
        void (Teacher:: *teachersignal2)(void) = &Teacher::hungry;
        void (Student::*studentslot2)(void) = &Student::treat;
        connect(zt,teachersignal2,st,studentslot2);
        connect(btn,&QPushButton::clicked,zt,teachersignal2);
    
        //断开连接
        disconnect(zt,teachersignal2,st,studentslot2);
    
        //QT4版本
     //   connect(zt, SIGNAL(hungry()),st,SLOT(treat()));
    
        [=](){
            btn->setText("abc");
        }();
    
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::classisover()
    {
        //下课后,调用触发饿了的信号
       // emit zt->hungry();
        emit zt->hungry("jiding");
    }

    环境变量设置:

     

     在运行编译好的exe可执行文件时,会出现无法定位到输入点的错误,按照上面的环境变量来设置路径。 (针对QT5.14的版本)

    一些网站链接:https://github.com/ithewei/hplayer

                             https://blog.csdn.net/Bixiwen_liu/article/details/102939840

  • 相关阅读:
    你看懂了程序员的这些笑话吗?
    SharePoint 2013 Designer 自己定义操作菜单
    Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的使用方法
    【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
    LeetCode 122 Best Time to Buy and Sell Stock II
    Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
    HDU 4914 Linear recursive sequence(矩阵乘法递推的优化)
    TS4
    angularjs1-过滤器
    angularjs1- ng-include
  • 原文地址:https://www.cnblogs.com/strive-sun/p/14526929.html
Copyright © 2011-2022 走看看