QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口

目录

    • 创建新项目
    • 添加控件 button按钮
    • 给控件绑定信号与槽
    • 单击Button弹出子窗口(非模态)
    • 单击Button弹出子窗口(模态)

最近可能会做一些测试工具,于是想到了带GUI界面的QT,正好是C++语言开发比较熟悉,这里就记录下学习过程,QT+VS2017的安装和配置就不说了,网上一搜一大把,本篇作为开篇主要记录下如何用VS创建新的QT项目以及基本的添加控件并且绑定处理函数的流程(QT里面好像是叫做信号与槽的连接)

创建新项目

QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第1张图片
一会要弄个子窗口出来,所以这里起名就叫QtFather吧
然后一路Next就好,创建出来后解决方案的目录结构是这样的
QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第2张图片
简单介绍下:

  • QtFather.ui 编辑UI界面的,双击打开会出现Qt设计师窗口,里面会有一些控件提供给我们使用
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第3张图片

  • QtFather.h和QtFather.cpp就是我们的主窗口类了 默认启动会弹出这个窗口来
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第4张图片

  • main.cpp就是主函数入口了,这个暂时不多说

  • QtFather,也就是主窗口类中默认有个成员变量 Ui::QtFatherClass ui;
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第5张图片
    这里面包含了UI界面上的各种控件对象,一会会用到,可以F12进去看看

添加控件 button按钮

  • 双击QtFather.ui 进入Qt设计师界面 左面栏目找到Push Button控件,直接拖进窗口即可
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第6张图片
  • 双击控件给控件改名,右侧是控件信息,objectName就是这个控件的类名,编译后会在代码中体现
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第7张图片
  • 保存后关闭,然后右键QfFather.ui编译一下(刚开始弄的时候竟然不知道还要编译…搞了半天:)
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第8张图片
  • 编译后F12查看UI_QtFatherClass类会发现多了这个控件的变量,这样就能用了
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第9张图片

给控件绑定信号与槽

  • 刚添加好的控件,在QT中是不会自动给你绑定相关的处理函数的,还需要手动的绑定一下,先在窗口类中定义下pushButton的处理函数(名字随意)
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第10张图片

  • 然后在父窗口类的构造中调用connect函数进行绑定,也就是说一旦产生了clicked信号就调用pushButton_slots()函数

connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(pushButton_slots()));

注:避免和linux socket函数中的connect冲突,网络连接函数可以::connect(fd,…)这样用
QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第11张图片

单击Button弹出子窗口(非模态)

  • 右键FormFiles,添加新窗口
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第12张图片
  • 选择Qt GUI Class,一路next即可
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第13张图片
  • 在父窗口中添加子窗口头文件 并定义子窗口的类指针
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第14张图片
  • 然后在刚刚给控件注册的回调函数中new一个子窗口类出来,并调用子窗口的show函数显示即可
    QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第15张图片
  • 避免内存泄漏,默认关闭子窗口是不会销毁这个类对象的
  • 所以要加上pSon->setAttribute(Qt::WA_DeleteOnClose);

单击Button弹出子窗口(模态)

首先还是重复上面操作,绑定一个button,然后在button单击的处理动作上添加如下代码
QT+VS2017学习笔记一:添加控件 连接信号与槽 点击控件按钮弹出子窗口_第16张图片
setWindowModality的几个参数选项含义:

Qt::NonModal :该窗口不是模态,不会阻塞其它界面接受输入信息;
Qt::WindowModal:该窗口是一个当以层次的模态窗口,会阻塞它的父窗口、祖父窗口和各个兄弟窗口接受输入信息
Qt::ApplicationModal:该窗口是应用模态窗口,会阻塞所有窗口接受输入信息。

注意:本文创建新窗口的方式,从代码角度上QtSon和QtFather是没有任何父子关系的,所以说Qt::WindowModal并不会阻塞QtFather窗口,如果加入父子关系可以在new QtSon(Parent)传入参数指定该窗口的父窗口
在这里插入图片描述
这样也可以实现模态窗口

你可能感兴趣的:(QT)