Back2zer0 2022-05-19 15:48 采纳率: 100%
浏览 76
已结题

QT中,connect 关键字 在窗口类头文件里使用时 发生报错

问题遇到的现象和发生背景
#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等在源文件/头文件皆可。)
难道跟头文件有关?

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-05-19 16:58
    关注

    百度搜“c++ 头文件中和源文件中 区别”

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月3日
  • 已采纳回答 5月26日
  • 创建了问题 5月19日

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大