一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

  最近初学Qt,在做项目的过程中遇到 E:\QT Project\WinCalculater\mainwindow.cpp:132: 错误:no matching function for call to 'MainWindow::connect(MyButton*&, void (MyButton::*)(), MainWindow* const, const char*)' 的问题,然后我就上网查错误的原因,但是查到的答案都没有解决我的问题,后来自己发现了问题所在,故在此与大家分享下。

错误代码:

connect(but0,&MyButton::clicked,this,SLOT(button1()));

错误原因:
这样不满足connect()五个重载函数的参数要求,也就是参数列表出了问题。

在 Qt 5 中,QObject::connect()有五个重载:

 1 QMetaObject::Connection connect(const QObject *, const char *,
 2                                 const QObject *, const char *,
 3                                 Qt::ConnectionType);
 4  
 5 QMetaObject::Connection connect(const QObject *, const QMetaMethod &,
 6                                 const QObject *, const QMetaMethod &,
 7                                 Qt::ConnectionType);
 8  
 9 QMetaObject::Connection connect(const QObject *, const char *,
10                                 const char *,
11                                 Qt::ConnectionType) const;
12  
13 QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
14                                 const QObject *, PointerToMemberFunction,
15                                 Qt::ConnectionType)
16  
17 QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
18                                 Functor);

我的错误是混用了第一个和第四个重载函数: 信号&MyButton::clicked是PointerToMemberFunction类型的,槽函数SLOT(button1())是const char * 类型的,所以会报错。
因为我的button1()是自定义的private slots:的函数,所以我把SLOT(button1())换成&MainWindow::button1就可以了。

posted on 2022-09-26 15:50  一杯清酒邀明月  阅读(1457)  评论(0编辑  收藏  举报