1、connect适用范围
connect()函数有且只能在QObject类里面和QObject派生类里面使用,
自己新建的类里面时选择的基类不是QObject类和其QObject派生类,而是Custom,使用connect()函数是无效的!!!,编译时一直报错。 因此新建类可以从Qobject,Qwidget和Qmainwindow里选择为基类。
当然,我们新建工程比如widget,mainwindow,dialog都是QObject的派生类,所以可以直接使用connect()函数,实现信号与槽机制.
2、使用方式
//Qt5及后期所有版本可以使用以下形式
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::test_fun);
即 connect(类对象, &类名::类成员, 类对象, &类名::类成员);
3、自定义信号使用
signals ://定义信号
void ageChanged(int age); //虽然是一个函数,这里只管建立,不管发送。
//关联信号,使信号和槽之间建立联系,必须经发射后槽才会受到信号。
connect(boy,&Person::ageChanged,this,&Person::on_ageChanged);
//发射信号,经和槽函数绑定后,槽函数自动会接受发射过来的信号。
emit ageChanged(age);
//槽函数,处理发射过来的信号,本例中age的值。
private slots:
void Person::on_ageChanged(int a) //参数从信号那里来
{
}
1、信号和槽函数的参数必须一一对应关系,经绑定后,槽函数中的参数就是从信号函数里对应的参数值
如
on_ageChanged(int a) 中的a值对应于ageChanged(int age)的age.
2、信号建立和连接不等于数值会自动传过来,必须经发射(emit)动作才能起作用。
3、注意,槽函数绑定的是信号!!!除了自定义signals外,还有控件产生的动作信号。