Qt не соответствует функции для вызова с использованием глобальных переменных

0

Я совершенно новый в Qt и C++. У меня есть проблема с глобальными переменными QFile-Variables, которые мне нужны в разных функциях, все в моем классе MainWindow-Class.

//mainwindow.h

[...]
public:
    QFile *fIndex;
    QFile *fString;

    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
[...]

в mainwindow.cpp Я попытался создать экземпляр:

//mainwindow.cpp
[...]
void MainWindow::on_btn_load_load_released() 
{
    QString _index_ = this->ui->txt_load_index->text();
    QString _string_ = this->ui->txt_load_str->text();

    fIndex = new QFile(_index_);
    fString = new QFile(_string_);


    foreach(QString iList, xmlActions::GetXMLID(fIndex))
    {
        this->ui->lst_src_result->addItem(iList);
    }

}
[...]

класс, который вызывается здесь в цикле, содержит следующую функцию:

//mainheader.h
QList<QString> GetXMLID (QFile XMLIndex)
{
    QList<QString> xList;
    //QFile* xFile = new QFile(XMLFile);

    if (XMLIndex.open(QIODevice::ReadOnly))
    {
        QXmlStreamReader reader(XMLIndex.readAll());
        XMLIndex.close();
        while(!reader.atEnd())
        {
            reader.readNext();
            foreach(const QXmlStreamAttribute &attr, reader.attributes())
            {
                if (attr.name().toString() == QLatin1String("ID"))
                {
                   //contList.addItem(attr.value().toString());
                    xList << attr.value().toString();

                }
            }

        }
    }
    return xList;
}

так как xmlActions :: getXMLID (fIndex) не любит указатели или что-то в этом роде. Компилятор жалуется:

нет подходящей функции для вызова 'xmlActions :: GetXMLID (QFile * &)'

Я пытаюсь получить этот прогон для осла лет. Я также попытался использовать класс с конструкторами и деструкторами для создания экземпляра. Однако я могу использовать его только в этом сингле on_btn_load_load_released() -function, когда я это делаю. Что я делаю не так?

  • 0
    Есть ли причина, по которой вы используете QFile *fIndex; вместо QFile fIndex; ?
Теги:
qt

2 ответа

0

Это сработало! Большое спасибо. Я также должен был сделать функции static, потому что я не делал экземпляр класса. Использование QFiles не как указатель не получилось, так что я сделал его. Возможно, я узнаю, почему позже. Пока это работает :)

  • 0
    Поместите это как комментарий к ответу, а не сам ответ.
0

Вы используете указатель на QFile, но ваша функция принимает объект QFile качестве аргумента. Вот почему вы получаете эту ошибку. Если вы хотите использовать указатель на QFile, вам нужно переписать функцию с указателем на аргумент QFile.

Попробуй это:

QList<QString> GetXMLID (QFile *XMLIndex)//prototype should be with STAR too
{
    QList<QString> xList;
    //QFile* xFile = new QFile(XMLFile);

    if (XMLIndex->open(QIODevice::ReadOnly))//it is a pointer so we should use ->(not .)
    {
    QXmlStreamReader reader(XMLIndex->readAll());
    XMLIndex->close();
    while(!reader.atEnd())
    {
        reader.readNext();
        foreach(const QXmlStreamAttribute &attr, reader.attributes())
        {
            if (attr.name().toString() == QLatin1String("ID"))
            {
               //contList.addItem(attr.value().toString());
                xList << attr.value().toString();

            }
        }

    }
    }
    return xList;
}

Или используйте QFile fIndex; вместо QFile *fIndex;

После этого ошибка должна исчезнуть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню