qt connect 函数

建立了teacher,student文件,t,s为两个类的指针,teacher类有hungery信号,student有treat方法,想用函数连接,在teacher类发出信号后学生类接受
但是一直显示参数不匹配

img

treat有两个重载,无法确定是哪一个,建议保留只有一个参数的这个函数,然后根据传入参数是否为空进行判断。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7635654
  • 你也可以参考下这篇文章:Qt中,connect重载的信号问题
  • 除此之外, 这篇博客: QT信号与槽的原理中的 现在我们开始来分析源码,首先第一站就是connect中信号和槽的宏定义 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #ifndef QT_NO_META_MACROS
    #ifndef QT_NO_DEBUG
    # define QLOCATION "\0" __FILE__ ":" QT_STRINGIFY(__LINE__)
    # ifndef QT_NO_KEYWORDS
    #  define METHOD(a)   qFlagLocation("0"#a QLOCATION)
    # endif
    # define SLOT(a)     qFlagLocation("1"#a QLOCATION)
    # define SIGNAL(a)   qFlagLocation("2"#a QLOCATION)
    #else
    # ifndef QT_NO_KEYWORDS
    #  define METHOD(a)   "0"#a
    # endif
    # define SLOT(a)     "1"#a
    # define SIGNAL(a)   "2"#a
    #endif
    

    这两个宏是将信号与槽函数的名称(函数名以及参数)转换为字符串。在方法名称前面给个标识0,在槽函数前面给个标识1,在信号函数前面给个标识2,这3个标识为后面解析参数是所属哪种类型的起到很大的作用。
    还有我们注意到,这里的宏是将信号与槽的名称转换为字符串,这里的名称包括了参数。于是我们可以得出:信号与槽的参数不能包括宏。如果包括宏,是要等里面的宏先展开然后SLOT和SIGNAL再展开还是先SLOT和SIGNAL展开呢?这都是没有定义的。

  • 您还可以看一下 曾志坤老师的Qt语言从入门到精通课程中的 使用方法 - 链接函数Connection小节, 巩固相关知识点

信号连接的是槽函数,普通函数不行。你的treat()函数是public:,不是槽函数,应该是public slots:

public slots:
  void treat();
  void treat(QString foodname);