• QT使用信号与槽时编译错误“no matching function for call to connect“


    转转于:http://t.csdn.cn/K3aYh

    初学QT,在尝试用connect手动关联一个按钮和QlineEdit的时候编译报错,如下:

    img

    然后贴上主要代码块:

    //以下是mainwindow.h
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include 
     
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
     
    private:
        Ui::MainWindow *ui;
     
    public slots:
        void self_pushButton_clicked();
    };
    #endif // MAINWINDOW_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    //以下是mainwindow.cpp
     
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include
    #include
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        ui->myline->setText("hello");
        ui->mybtn->setText("clicked me");
        connect(ui->mybtn,&QPushButton::clicked,ui->myline,&MainWindow::self_pushButton_clicked);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::self_pushButton_clicked()
    {
        ui->myline->setText("你好");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    ui长这样:

    img

    上网查了查,这种错误叫重载不匹配(好像叫这个名),于是我找了半天没找到哪里不匹配,期间去问了某个大佬学长结果学长也没看出来,总之经过两天的折磨之后被迫重新从自定义信号和槽去学,才注意到这样的一条规则

    connect(发送信号的类,&信号函数,接收信号的类,&槽函数);[QT5]

    期中信号函数一般是发送信号类的成员函数,而槽函数一般是接收信号的类的成员函数;(槽函数也可以是全局函数)

    再来看原来程序里的connect:

    connect(ui>mybtn,&QPushButton::clicked,ui>myline,&MainWindow::self_pushButton_clicked);
    
    • 1

    这里myline是ui里引入的一个QlineEdit类。

    所以问题就很明白了!

    因为self_pushButton_clicked()不是QlineEdit的成员函数,所以自然是不匹配的,它是MainWindow的成员函数,所以这句话的正确表述是:

    connect(ui>mybtn,&QPushButton::clicked,this,&MainWindow::self_pushButton_clicked);
    
    • 1

    没错这个SB错误困扰了我两天充分证明了我也是SB

    以上

    (小白第一次发博客,写的不对还请包容指出,谢谢)

  • 相关阅读:
    Python实战:读取MATLAB文件数据(.mat文件)
    十一:以理论结合实践方式梳理前端 React 框架 ———框架架构
    项目实战-经验复盘
    常识——绳结打折法
    FastAPI 学习之路(二)
    始祖双碳新闻 | 2022年8月9日碳中和行业早知道
    java中switch同if关键字的不同之处
    Django 自定义用户 VS 用户资料
    第七第八mooc+循环练习
    基于NET 6.0 自研轻量级ORM框架
  • 原文地址:https://blog.csdn.net/qq_41854911/article/details/128059174