1 Вопрос: Передайте QMetaMethod в качестве параметра функции, которая использует новый синтаксис QObject :: connect

вопрос создан в Thu, May 2, 2019 12:00 AM

Я хочу создать оболочку для соединения QObject, используя новый синтаксис с проверкой типа во время компиляции. Основная идея была бы такова: «Эй, слушатель, подключи слоты этого объекта к моему сигналу newData»

void Listener::_addClient(const QObject *object, const QMetaMethod& slot)
{
    connect(this, &Listener::newData, object, slot);
}

А какой-то класс Client просто сделает:

Listener myListener;
myListener._addClient(this, &Client::mySlot);

Это, конечно, не компилируется.

  • Поскольку все объекты Listener будут принадлежать классу менеджера, я не могу получить к ним прямой доступ, поэтому традиционное подключение невозможно.

Как я могу создать оболочку для этого соединения, чтобы я мог обеспечить проверку типа во время компиляции?

    
0
1 ответ                              1                         

Вы можете использовать шаблон:

template <typename Receiver, typename Slot>
void Listener::_addClient(const Receiver *object, const Slot& slot)
{
    connect(this, &Listener::newData, object, slot);
}
    
0
2019-05-02 15: 30: 02Z
  1. При его вызове я получаю: error: статическое утверждение не выполнено: Аргументы Signal и Slot несовместимы.
    2019-05-06 15: 24: 34Z
  2. Какие подписи Listener::newData и &Client::mySlot?
    2019-05-06 17: 22: 28Z
источник размещен Вот