【问题标题】:Qt Creator - cannot connect signal to slot (no matching function for call to) [duplicate]Qt Creator - 无法将信号连接到插槽(没有匹配的调用函数)[重复]
【发布时间】:2014-11-24 05:59:01
【问题描述】:

我写信是为了在 Qt Creator (Qt5.1) 中编写一个简单的信号槽连接函数。这是我的(部分)代码。

linkports.h

#ifndef LINKPORTS_H
#define LINKPORTS_H
#include "portconfig.h"

class LinkPorts
{
public:
    LinkPorts();
    PortConfig ports[16];
    void enabledChangeEmit(int port, bool value);
signals:
    void enabledChanged(int port, bool value);
};

#endif // LINKPORTS_H

linkports.cpp [函数定义]

void LinkPorts::enabledChangeEmit(int port, bool value) {
    emit enabledChanged();
}

linkcontrol.h [槽定义]

private slots:
    void updateEnabled(int port, bool value);

linkcontrol.cpp [连接和插槽定义]

LinkControl::LinkControl(QWidget *parent) :
QMainWindow(parent),
    ui(new Ui::LinkControl)
{
    ui->setupUi(this);
    connect(hardware, SIGNAL(enabledChanged(int, bool)), this, SLOT(updateEnabled(int, bool)));
    portSliders[16] = {ui->slider1, ui->slider2, ui->slider3, ui->slider4, ui->slider5, ui->slider6, ui->slider7, ui->slider8, ui->slider9, ui->slider10, ui->slider11, ui->slider12, ui->slider13, ui->slider14, ui->slider15, ui->slider16, };
}


void LinkControl::updateEnabled(int port, bool value)
{
    this->portSliders[port]->setEnabled(value);
}

我得到了错误:

/home/narendran/QtWorkspace/LinkControl/linkcontrol.cpp:17: error: no matching function for call to 'LinkControl::connect(LinkPorts*&, const char*, LinkControl* const, const char*)'
     connect(hardware, SIGNAL(enabledChanged(int, bool)), this, SLOT(updateEnabled(int, bool)));

非常感谢您的帮助,谢谢。

顺便说一句,我使用以下方法将硬件定义为 LinkPorts 对象:

LinkPorts *hardware = new LinkPorts();                

在全局对象文件中。

【问题讨论】:

    标签: c++ qt signals connect slot


    【解决方案1】:

    只有带有Q_OBJECT宏的QObject的子类才能使用Qt中的信号和槽机制

    #include <QObject>
    
    class LinkPorts : public QObject
    {
        Q_OBJECT
    public:
    

    此外,如果你想发送一些带有信号的数据,你应该使用下一个:

    void LinkPorts::enabledChangeEmit(int port, bool value) {
        emit enabledChanged(port, value);
    }
    

    【讨论】:

    • 谢谢!该解决方案没有直接工作,但快速搜索返回:qtforum.org/article/20222/… 在子类定义中的 QObject 之前的 public,它工作。
    • @NarendranMuraleedharan 打扰一下,这只是一个错字。默认情况下编译器设置了私有继承,所以确实不能正常工作,但我已经修复了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多