QT соединяет сигнал и слот из разных классов с классом главного окна? - PullRequest
0 голосов
/ 30 августа 2018

Я хочу реализовать сигнал и слот между двумя классами mainwindow и reader.

Внутри класса reader я объявляю сигнал SetProgress:

reader.h

class reader :public QObject
    {
        Q_OBJECT    
         signals:
             void SetProgress(QString sOperation, int nPercentage);
}

reader.cpp

 void reader::UpdateProgress(double amount)
{
     int nPrecentage = (100 * amount / (max- min));
     emit SetProgress(m_sCurrentOperation, nPrecentage); 
}

mainwindow.h

    public:
    reader *MyReader

private slots:

    void SlotDisplayProgress(QString sActivity_i, int ProgressPercentage_i);

mainwindow.cpp

void mainwindow :: SlotDisplayProgress(QString sActivity_i, int nProgressPercentage_i)
{
     this->ui->QprogressBar->setValue(nProgressPercentage_i);
}

внутри Mainwidow.cpp Я объявлю сигнал и слот

MyReader = reader::New();
connect ( MyReader, &reader::SetProgress, this, &mainwindow::SlotDisplayProgress );

Я попытался отладить, и все работает правильно до emit части. Однако slot никогда не выполняется.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Попробуйте установить Qt :: DirectConnection:

connect ( MyReader, &reader::SetProgress, this, &mainwindow::SlotDisplayProgress, ***Qt::DirectConnection***);

У меня была такая проблема, когда я подключил сигнал и слот, и она работала, только когда я определил тип подключения.

Надеюсь, это поможет.


PS. Я не знаю, зависит ли это от версии QT, но когда я подключаю сигналы и слоты, пишу следующий синтаксис:

ImageURLLoadListener* downloader = new ImageURLLoadListener(&id, socket);
connect(downloader, SIGNAL(imageLoaded(QString*,QTcpSocket*)), this, SLOT(on_resourceImageDownload(QString*,QTcpSocket*)), Qt::DirectConnection);

Я не знаю, связано это или нет ...

0 голосов
/ 30 августа 2018

Указатель MyReader? Используйте & MyReader, если не так.

...