Qt学习day02 信号和槽 面向对象的Qt编程

一 信号和槽
1 概念
信号和槽中Qt自行定义的一种通信机制,实现对象之间数据交互.
2 定义
class XX:public QObject{
Q_OBJECT //moc编译器
public slots:
void slot_func(…);//槽
signals:
void signal_func(…);//信号
};
注:槽函数可以连接到某个对象的信号上,通过信号触发槽的执行;槽函数也可以当做普通成员直接调用.
注:信号函数只需声明,不能定义.

3 信号和槽连接
QObject::connect(
const QObject* sender,
const char * signal,
const QObject* receiver,
const char * method);
功能:建立信号和槽的连接
参数:
sender:信号的发送对象
signal:信号函数
receiver:信号的接收对象
method:槽函数
注:
SIGNAL(clicked(void));//将信号转换为const char*
SLOT(close(void));//将槽转换为const char*

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

4 信号和槽连接时语法要求
1)信号和槽参数要一致
QObject::connect(A,SIGNAL(sigfunc(int)),
B,SLOT(slotfunc(int)));//ok
QObject::connect(A,SIGNAL(sigfunc(int)),
B,SLOT(slotfunc(int,int)));//error
2)可以带有缺省参数
QObject::connect(A,SIGNAL(sigfunc(int)),
B,SLOT(slotfunc(int,int=0)));//ok
3)信号函数的参数可以多于槽函数,多于参数将被忽略
QObject::connect(A,SIGNAL(sigfunc(int)),
B,SLOT(slotfunc(void)));//ok
4)一个信号可以同时连接到多个槽函数(一对多)
QObject::connect(A,SIGNAL(sigfunc(int)),
B1,SLOT(slotfunc1(int)));//ok
QObject::connect(A,SIGNAL(sigfunc(int)),
B2,SLOT(slotfunc2(int)));//ok
注:当A发送信号后,B1和B2的槽函数都将被执行,但是执行顺序不确定.

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

6)两个信号可以直接连接(信号级联)//了解
QObject::connect(A1,SIGNAL(sigfunc1(int)),
A2,SIGNAL(sigfunc2(int)));//ok
注:当A1对象发送信号时,A2对象的信号也将随之发送

案例:事件同步,滑块和选值框保持同步运行
1)QSlider滑块
//构造函数
QSlider(水平/垂直,父窗口);
//设置滑块滑动范围的函数
void setRange(int min,int max);
//滑动滑动时发送的信号
void valueChanged(int value)[singals]
//设置滑块位置
void setValue(int)[slots]

2)QSpinBox选值框(微调框)
//构造函数
QSpinBox(父窗口);
//设置选值框数值变化范围的函数
void setRange(int min,int max);
//选值框数值改变时发送的信号
void valueChanged(int value)[singals]
//设置选值框当前数值
void setValue(int)[slots]

二 面向对象的Qt编程
1 基于对象Qt编程//Qt功能受到限制,不推荐
2 面向对象的Qt编程
案例:加法计算器
思路:
class CalculatorDialog:public QDialog{
Q_OBJECT //moc
public:
CalculatorDialog(void){
//界面初始化
//信号和槽连接
}
public slots:
void 使能等号按钮槽函数(){}
void 计算和显示结果槽函数(){}
private:
QLineEdit,QLabel,QPushButton
};
int main(int argc,char** argv){
QApplication app(argc,argv);
CalculatorDialog calc;
calc.show();
return app.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值