问题遇到的现象和发生背景
#include <QPushButton>
#include <QWidget>
#include "student.h"
#include "teacher.h"
class mywidget : public QWidget
{
Q_OBJECT
public:
student* st = new student(this);
teacher* wt = new teacher(this);
QPushButton *wtb1 = new QPushButton("无参",this);
QPushButton *wtb2 = new QPushButton("有参",this);
void(student::*Nopartreat)()=&student::treat;
void(teacher::*Noparhungry)()=&teacher::hungry;
void(student::*partreat)(QString,int)=&student::treat;
void(teacher::*parhungry)(QString,int)=&teacher::hungry;
// connect(wt,Noparhungry,st,Nopartreat);
// connect(wt,parhungry,st,partreat);
// connect(wtb1,&QPushButton::clicked,wt,Noparhungry);
// connect(wtb2,&QPushButton::clicked,this,&mywidget::classisover);
void classisover(); //classisover() 是信号触发的函数
mywidget(QWidget *parent = 0);
~mywidget();
};
报错提示
这四个connect是不合法的。
connect本身,connect的 前三个参数的报错提示:error: C++ requires a type specifier for all declarations
第四个参数的报错提示:error: unknown type name 'Noparhungry'
尝试思路
只能把connect 语句 放在头文件对应的 cpp源文件里。
#include "mywidget.h"
mywidget::mywidget(QWidget *parent)
: QWidget(parent)
{
connect(wt,Noparhungry,st,Nopartreat);
connect(wt,parhungry,st,partreat);
connect(wtb1,&QPushButton::clicked,wt,Noparhungry);
connect(wtb2,&QPushButton::clicked,this,&mywidget::classisover);
wtb2->move(100,100);
}
我想要达到的结果
我想当然的认为,头文件和源文件里写 connect语句,不都是在mywidget这个窗口类的作用域里吗?
为什么会出现这种现象?
(头文件中除了connect语句,许多初始化工作 像函数指针绑定、按钮类的new等在源文件/头文件皆可。)
难道跟头文件有关?