Сигнал Qt не работает при передаче указателя на структуру - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть форма Qt, которая испускает сигнал;сигнал передает указатель на структуру, которая содержит загрузку данных, которые затем отправляет главное окно из моего qextserialport.

Это работало, но я что-то сделал [неизвестно], и теперь, когда я подключаю сигнал к слоту, если я не изменю его так, чтобы сингал ничего не пропустил, соединение с сигналом не будет работать,

В mainwindow.cpp у меня есть это:

void MainWindow::qt1245ValuesReceivedFromKeypad(char *dataPtr)
{

    bool connected;

    qt1245Window = new qt1245(this);
    connected = connect(qt1245Window,SIGNAL(sendMessageToKeypad(struct qt1245MessageStruct *qm)),this,SLOT(sendToQT1245(struct qt1245MessageStruct *qm)));
    qt1245Window->setupDataFromKeypad(dataPtr);
    qt1245Window->keyMapping(BinData);
    qt1245Window->keyDropDownChanged("DIM");       
 //   connected = connect(qt1245Window,SIGNAL(sendMessageToKeypad()),this,SLOT(sendToQT1245()));
    qt1245Window->exec();        
}

Если я раскомментирую второе соединение, прокомментирую первое и изменим соответствующий код, соединение работает.

Структура определяется следующим образом:

struct qt1245MessageStruct
{

    quint8 *dataPtr;
    quint8 length;
    quint8 keypadStartAddress;
    quint8 programType;

};

В qt1245.h у меня есть это как часть объявления класса:

signals:
    void sendMessageToKeypad(struct qt1245MessageStruct *qm);

в qt1245.cpp. сигнал излучается следующим образом:

void qt1245::sendQT1245Message(qt1245MessageStruct *qm)
{

    emit sendMessageToKeypad(qm);

}

Может кто-нибудь пролить свет на то, почему connect возвращает false, если я пытаюсь передать указатель на структуру, пожалуйста? Кроме того, можно ли заставить Qt предоставлять информацию о том, почему происходит сбой соединения, вместо того, чтобы просто сказать, что имеет ?

Если вам потребуется дополнительная информация, я опубликую ее. Я не уверен на данном этапе, что помогло бы.

FWIW Я нахожусь на Linux, Qt Creator 4.9.0 на основе Qt 5.12.2.

1 Ответ

1 голос
/ 07 ноября 2019

Параметры в вызове соединения неверны.

connect(qt1245Window,
        SIGNAL(sendMessageToKeypad(struct qt1245MessageStruct*qm)),
        this,
        SLOT(sendToQT1245(struct qt1245MessageStruct *qm)));

Имя параметра не входит в макросы SIGNAL и SLOT. Правильный синтаксис:

connect(qt1245Window,
        SIGNAL(sendMessageToKeypad(struct qt1245MessageStruct*)),
        this,
        SLOT(sendToQT1245(struct qt1245MessageStruct *)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...