Qt C ++: сигнал и аргумент слота несовместимы - PullRequest
0 голосов
/ 09 мая 2020

Я не знаю, в чем проблема с этим кодом, синтаксис, который я использовал для подключения сигналов и сортировки, выглядит правильным, но по какой-то причине я продолжаю получать эту ошибку

error: static assertion failed: Signal and slot arguments are not compatible.
 #  define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
                                             ^

это код для файла заголовка

include <QString>
#include <QStringList>
#include <QTextStream>

class filereader : public QObject
{
    Q_OBJECT
public:
    Q_PROPERTY(QString filename READ getFileName WRITE setFileName NOTIFY fileNameChanged) 
    Q_PROPERTY(QString output READ getOutput) 
    Q_PROPERTY(QString error READ getErrorString)

    explicit filereader(QObject *parent = 0);

    QString getFileName();
    QString getOutput();
    QString getErrorString();

    void setFileName(const QString &fileName);

    Q_INVOKABLE void readFile(); // this allows us to use this is as a function so we could do something like onClicked{ <text_id>.text = <file_reader_id>.readFile() }
signals:
    void fileNameChanged();
    void outputChanged(QString &Output);
    void gotError(QString &&err);
    void errorSignal();
protected slots:
    void handleOut(QString &output);
    void handleError(QString &err);
private:
    QString fileName;
    QString output;
    QString error;
};

#endif // FILEREADER_H

это код исходного файла

#include "filereader.h"

filereader::filereader(QObject *parent):    
    QObject(parent)
{
    connect(this,&filereader::gotError,this,&filereader::handleError);
    connect(this,&filereader::outputChanged,this,&filereader::handleOut);
}

QString filereader::getFileName()
{
    return this->fileName;
}

QString filereader::getOutput()
{
    return this->output;
}

QString filereader::getErrorString()
{
    return this->error;
}

void filereader::setFileName(const QString &fileName)
{
    if(this->fileName == fileName)
        return;
    this->fileName = fileName;
    emit fileNameChanged();
}

void filereader::readFile()
{
    QFile file(this->fileName);
    if (file.open(QIODevice::ReadOnly))
    {
       QTextStream in(&file);
       while (!in.atEnd())
       {
          QString line = in.readAll();
          outputChanged(line);
          qDebug() << line;
       }
       file.close();
       file.flush(); // this flushes the file stream
    }else{
        gotError("Could not open the file!");
    }
}

void filereader::handleOut(QString &output)
{
    if(this->output == output)
        return;
    this->output = output;
}

void filereader::handleError(QString &err)
{
    if(this->error == err)
        return;
    this->error = err;
    emit errorSignal();
}

Я новичок в Qt и Qml, поэтому, пожалуйста, помогите мне разобраться в проблеме. Спасибо :)

...