C++学习笔记day51-----Qt-信号,槽

xiaoxiao2021-02-28  14

信号,槽 Qt中的对标准C++语法进行了扩展-信号,槽。 用于对象之间的交互。可以说是Qt事件模式的基础。 可以将一个对象的信号函数和另一个对象的槽绑定。 当一个对象收到一个事件之后,通过信号函数将必要的信息传递给与其绑定的对象的槽函数。

面向对象的Qt编程 Qt含有大量的类,这些类在很大程度上提高了开发的效率。只有使用面向对象的编程方法,才能物尽其用。

总的来说,Qt的开发,就是看文档,了解的越多,思路也就越多。 ———————————- 今天: 一、信号和槽 1、概念 信号和槽是QT自定义一种通信机制,实现对象之间的数据交换。

2、定义 1) 信号函数: class XX:public Qobbjent{ Q_OBJECT=T//元对象编译器moc signals: void sigfunc(…)//信号函数

}; 注:信号函数,只需要beject生命,不能定义

2) 槽 class XX:puiblic QObject{ Q_OBJECT public slots: void slotfunc(); }; 注:槽函数可以连接到其他对象的信号上,当信号被发送时,槽函数将被自动执行。 注:槽函数也可以当作不同成员函数来使用

3、信号和槽的连接 QMetaObject::Connection connect( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection) sender:信号发送的对象(任何QObject子类都可以) signal:要发送的信号函数 //把信号函数转换成const char* SIGNAL(信号函数名(参数表)); receiver:信号的接受对象 method:接受对象要执行的槽函数 //把一个槽函数返回值转换为const char* SLOT(槽函数函数名(参数表));

创建一个Qt的应用程序,包含一个标签和一个按钮,实现点击按钮关闭标签的功能。

4、信号和槽连接的语法要求 1) 信号和槽参数要一致 QObject::connect(A,SIGNAL(sigfun(int)),B,SLOT(slotfun(int)));//ok QObject::connect(A,SIGNAL(sigfun(void)),B,SLOT(slotfun(int)));//error

2) 可以带有缺省参数 QObject::connect(A,SIGNAL(sigfun(void)),B,SLOT(slotfun(int=0)));//ok

3) 信号函数参数可以比槽函数多,多余将被忽略 QObject::connect(A,SIGNAL(sigfun(int,int)),B,SLOT(slotfun(int)));//ok

4) 一个信号可以被连接到多个槽函数(一对多) QObject::connect(A,SIGNAL(sigfun(int,int)),B1,SLOT(slotfun1(int)));//ok QObject::connect(A,SIGNAL(sigfun(int,int)),B2,SLOT(slotfun2(int)));//ok 注:当A发送信号时,B1,B2的槽函数都会被执行,但是执行的顺序是不确定的。

5) 多个信号可以连接到一个槽函数(多对一) QObject::connect(A1,SIGNAL(sigfun1(int,int)),B,SLOT(slotfun(int)));//ok QObject::connect(A2,SIGNAL(sigfun2(int,int)),B,SLOT(slotfun(int)));//ok 注:无论A1还是A2发送信号后,B的槽函数都会被执行。

6) 信号级联,两个信号函数可以直接连接 QObject::connect(A,SIGNAL(sigfun1(int,int)),B,SLOT(sigfun2(int)));//ok

1) 滑块(Qslider) QSlider(垂直/水平,父窗口); void setRange(int min,int max);

signal: void valueChanged(int value) void setValue(int calue)

2) 选值框(QSpinBox) QSpinBox(父窗口) void SetRange(int min,int max); signal void valueChanged(int value);

二、面向对象的Qt编程 1) 基于对象的Qt编程//不推荐

2) 面向对象的Qt编程 <计算器>

转载请注明原文地址: https://www.6miu.com/read-2800071.html

最新回复(0)