2014-09-11 3 views
0

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

//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(), когда я это делаю. Что я делаю не так?

+0

Есть ли причина, по которой вы используете 'QFile * fIndex;' вместо 'QFile fIndex;'? – thuga

ответ

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;

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

0

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

+0

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

Смежные вопросы