Как я могу подключить сигналы одноэлементного класса к слоту или методу класса главного окна? - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть класс последовательной связи, и я хочу отправить сигнал, когда получу рекомендацию, потому что прием данных завершен. В результате этого сигнала я вызываю графический метод. Соединение установлено, но приемный слот не прослушивает сигнал.

синглтон-класс:

class SerialCommunication : public QObject{
Q_OBJECT public:
static SerialCommunication  &   GetInstance()                                                               ;
....

QVector<double>                 ReadDataVector                                                              ;  

частное:

SerialCommunication()                                                                                       ;
static SerialCommunication  *   Instance                                                                    ;
QList<QSerialPortInfo>          PortList                                                                    ;
bool                            IsOpen          =   false   ; ....

частных слотов: void ReceivedData ();

сигналы: void DataIsDone ();

};

Слот ReceivedData:

void SerialCommunication::ReceivedData()

{ ...

for(;true;)
{
    ....
    switch (Commend) {
    case Data_Reply:
        qDebug()<<"Data Reply" ;
        AppendToUint16Vector(ReadDataVector,Package);
       break;
    case Data_Reply_Done:
        qDebug()<<" Data_Reply_Done" ;
        MsgBox.information(0,"Transfer information. ","The data transfer is complete \n Please click draw button.");
        emit SerialCommunication::GetInstance().DataIsDone();
       break;
   default:
        ClearBuffer();
        qDebug()<<" default" ;
       break;
    }}}

и соединение здесь

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

    ui->setupUi(this);
    connect(&SerialCommunication::GetInstance(),SIGNAL(SerialCommunication::DataIsDone),this,SLOT( GraficSetupAndInit()));
    SetupUI();

}

QObject :: connect: ожидаются скобки, сигнализируйте SerialCommunication :: SerialCommunication :: DataIsDone in .. \ Muteferrika \ MainWindow.cpp: 10 QObject :: connect: (имя получателя: 'MainWindow')

1 Ответ

0 голосов
/ 28 апреля 2018

Используя старый синтаксис Qt4, ваш connect вызов должен быть ...

connect(&SerialCommunication::GetInstance(), SIGNAL(DataIsDone()),
        this, SLOT(GraficSetupAndInit()));

Сказав, что вы действительно должны использовать более новый синтаксис сигнального слота , доступный с Qt5. В частности ...

connect(&SerialCommunication::GetInstance(), &SerialCommunication::DataIsDone,
        this, &MainWindow::GraficSetupAndInit);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...