Я совершенно новый в 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, когда я это делаю. Что я делаю не так?
Это сработало! Большое спасибо. Я также должен был сделать функции static, потому что я не делал экземпляр класса. Использование QFiles не как указатель не получилось, так что я сделал его. Возможно, я узнаю, почему позже. Пока это работает :)
Вы используете указатель на 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;
После этого ошибка должна исчезнуть.
QFile *fIndex;
вместоQFile fIndex;
?