• 槽函数与信号连接


    QT模块

    1.父子关系

    默认情况下按钮没有建立父子关系的情况下,是个顶层窗口,想要按钮显示在窗口上,就要跟窗体构造父子关系

    1. setParent
    2. 构造函数传参
         //1.setParent
    
         QPushButton *btn1=new QPushButton;
    
         btn1->setText("按钮1");
    
         btn1->setParent(wid);
    
         //2.构造函数传参
    
         QPushButton *btn2=new QPushButton(QString("按钮2"),wid);

    2.qt坐标系:

    是以父窗口的左上角为00

    以向右的方向为x的正方向

    以向下的方向为y的正方向

    顶层窗口就是一屏幕的左上角为00

    的风格

    3.对象树:

    概念:各个窗口对象通过建立父子关系构造对的一个关系树

    内存管理:父对象释放的时候会自动释放各个子对象(使用children列表)

    注意点:

           1.父对象能够被释放,

           2.父对象,或子对象,直接或间接继承QObject;

           3.只有继承了QObject 类的类,才具备信号和槽的能力,所以凡是QObject类(不管是直接子类还是间接子类),都因该在第一行代码写上Q_OBJECT

    4.自定义信号和槽:

    自定义信号

    1 函数声明在头文件的signals域下面

    2 void类型的函数,没有放回值

    3 信号是可以有参数,也可以重载

    4 只有声明,没有实现定义

    5 触发信号 emit obj->sign(参数…)

    自定义槽

    1 函数声明在类头文件的public/private/protected slots域下面(qt4以前的版本)

           qt5 就可以声明在类的任何位置,还可以是静态成员函数,全局成员函数、lambda表达式

    2 void 类型的函数,没有返回值

    3 可以有参数,也可以重载

    4 不仅有声明,还有实现

    自定义信号和槽传参,以及函数二义性问题解决

    1 使用函数指针赋值,让编译器挑选符合类型的函数

    2 使用static_cast 强制转换,也让编译器自动挑选符合类型的函数\

    1:

    信号:void(类名::*信号函数指针)(信号的参数类型)=&类名::信号;

    槽函数:void (Student::*槽函数指针)(槽函数的参数)=&类名::

    connect(对象名,信号函数指针,对象名,槽函数指针)

    2

    2.1:使用static_cast 来转换无参的函数

    connect(对象名, static_cast类名::*)() >(信号),对象名,static_cast类名::*)() >)

    qt信号槽如何传递参数

    1.当信号与槽函数的参数数量相同的时,他们参数类型要完全一致

    2.当信号的参数与槽函数的数量不一致时,只能是信号的参数数量多于槽函数的参数数量,且前面相同的参数类型应该一致,信号中多余的参数会被忽略;

    几个关键字的原型:

    signals 关键字:最终被#define 置换为一个访问控制符,其简化后为 #define signals public

    slots 关键字:最终被#define 置换为一个空宏,即简化后为 #define slots

    emit 关键字:同样被#define 置换为一个空宏,即简化后为 #define emit

    信号创建:

    • 信号使用 signals 关键字声明,在其后面有一个冒号“:”,在其前面不能有 publicprivateprotected 访问控制符,信号默认是 public 的。
    • 信号只需像函数那样声明即可,其中可以有参数,参数的主要作用是用于和槽的通信,这就像普通函数的参数传递规则一样。信号虽然像函数,但是对他的调用方式不一样,信号需要使用 emit 关键字发射。
    • 信号只需声明,不能对其进行定义,信号是由 moc 自动生成的。
    • 信号的返回值只能是 void 类型的。

    扩展

    1. 信号可以断开连接:disconnect(对象名,信号,对象名,槽)

    4.QDebug

    默认将QString 转义输出:

    1.QString转换成 char*

    qDebug()<<"……"<

    2.使用qDebug().noquote();

    qDebug().noquote()<<"……"<

    模态对话框:

    对话框分为模态对话框和非模态对话框:

    模态对话框:就是会阻塞就同一应用程序中其他窗口的输入:

    非模态对话框:显示对话框的同时,继续对记事本的内容进行编辑;

    自定义消息框:

    模态与非模态的实现:

    使用QDialog::exec() 实现应用程序级别的模态对话框

    使用QDialog::open()实现窗口级别的模态对话框

    使用QDialog::show()实现非模态对话框

    QApplication代表当前应用

    qApp全局变量

    设置整个程序的内容

    比如:

    退出程序

    connect(对象,信号,qApp,QApplication::quit);

    设置全局字体

    connect(字体对象,&QFontComboBox::currentFontChanged,[](QFont font){

    font.setPixelSize(28);

    QApplication::setFont(font);

    })

    Qsettings

    可以将一些新的数据存储在本地,下次启动的时候读取,进行配置

    QVariant:惯用类,任意类型都可以转化为惯用类;

    如果是window 写在注册表;

    QSettings (const QString &organization, const QString &application = QString(), QObject *parent = nullptr):创建的对象是写在注册表中的;

    如果我们想将数据写在程序的配置信息中则使用下面这个构造函数:

    QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)

    枚举类 QSettings::Format

           QSettings::NativeFormat:本地配置格式,在不同系统

           QSettings::Registry32Format:在window系统下

           QSettings::Registry64Format:在window系统下

           QSettings::IniFormat:自定义

  • 相关阅读:
    opencv-python图像处理:Canny边缘检测算法,模板匹配,直方图均衡化,傅里叶变换
    Linux【yum】【git】【gdb】
    使用Django框架快速搭建个人网站
    几何建模Brep边界表达法
    两道 杂题
    CIE A-level经济加权分算法
    GMO Research 2022年旅游调查:旅游业有望强劲增长
    将十进制100.25转换成短浮点数格式(IEEE754例题)
    Go-Excelize API源码阅读(十九)——SetHeaderFooter
    在代码评审中用好这7招,很容易就能建立起你的反对同盟
  • 原文地址:https://blog.csdn.net/weixin_57726902/article/details/126338571