Qt Creator - невозможно подключить сигнал к слоту (нет соответствующей функции для вызова)

Я пишу, чтобы написать простую функцию подключения сигнала к слоту в 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();                

в файле глобальных объектов.


person Narendran Muraleedharan    schedule 29.09.2014    source источник


Ответы (1)


Только подклассы QObject с макросом Q_OBJECT могут использовать механизм сигналов и слотов в Qt

#include <QObject>

class LinkPorts : public QObject
{
    Q_OBJECT
public:

Более того, если вы хотите отправить некоторые данные с сигналом, вы должны использовать следующее:

void LinkPorts::enabledChangeEmit(int port, bool value) {
    emit enabledChanged(port, value);
}
person Kosovan    schedule 29.09.2014
comment
Спасибо! Решение не сработало напрямую, но быстрый поиск вернул следующее: qtforum.org/article/20222/ С общедоступным до QObject в определении подкласса это работает. - person Narendran Muraleedharan; 29.09.2014
comment
@NarendranMuraleedharan Извините, это была опечатка. По умолчанию компилятор устанавливает частное наследование, поэтому оно действительно не может работать должным образом, но я уже исправил это. - person Kosovan; 29.09.2014