у меня есть проблемы с чтением моих данные карт или, возможно, даже писать его.Не может прочитать мои данные карты
приложение я делаю это основным конвертер валют.
Загружаем обменные курсы с веб-сайта, сохраняем его в txt-файле, который затем обрабатывает, чтобы сохранить значения на карте и использовать мой класс калькулятора для преобразования.
класс загрузчика работает безупречно (я получил его из официальных форумов QT), поэтому я не буду публиковать его, так как проблема не существует.
код: main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMap<QString,double> currency_map;
downloader d;
d.Do_download();
parser p;
p.read_line(currency_map);
p.print_map(currency_map);// this line works, and it prints out the map
MainWindow w(currency_map);
w.show();
return a.exec();
};
parser.cpp им вполне уверен, что он хорошо работает, потому что print_map функция выполняет свою работу.
void parser::process_line(QString line, QMap<QString, double> &my_map)
{
QStringList temporary_list;
for(int i = 0; i< currency_list.size();i++)
{
if(line.contains(currency_list.at(i),Qt::CaseInsensitive))
{
temporary_list=line.split(" ",QString::SkipEmptyParts);
temporary_list.replaceInStrings(",",".");
my_map.insert(currency_list.at(i),temporary_list[6].toDouble());
}
}
}
int parser::read_line(QMap<QString, double> &my_map)
{
QFile file("C:/Qt/test/downloaded.txt");
if(!file.exists())
{
QMessageBox msgBox;
msgBox.setText("There is no such file");
msgBox.exec();
return 1;
}
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox msgBox;
msgBox.setText("Error while opening file");
msgBox.exec();
return 1;
}
QTextStream in_stream(&file);
QString line=in_stream.readLine();
while (!line.isNull())
{
process_line(line, my_map);
line = in_stream.readLine();
}
return 0;
}
void parser::print_map(QMap<QString, double> &my_map)
{
QMapIterator<QString, double> i(my_map);
while(i.hasNext())
{
i.next();
qDebug()<< i.key() << ": " << i.value();
}
}
теперь у меня есть класс калькулятора:
.h
class Calculator
{
public:
explicit Calculator(QMap<QString,double> ¤cy_map);
void multiply();
void getValues(QString strFrom, QString strTo);
double getTotal();
private:
double total, firstCurr, secondCurr;
QMap<QString,double> ↦
};
.cpp
#include "calculator.h"
Calculator::Calculator(QMap<QString,double> ¤cy_map):map(currency_map)
{
total = 0;
firstCurr = 0;
secondCurr= 0;
}
void Calculator::getValues(QString strFrom, QString strTo)
{
QMap<QString, double>::iterator i;
for(i=map.begin();i!=map.end();i++)
{
if(!i.key().compare(strFrom))
firstCurr=i.value();
if(!i.key().compare(strTo))
secondCurr = i.value();
}
//firstCurr = 2;
//secondCurr = 3;
}
void Calculator::multiply()
{
total = firstCurr * secondCurr;
}
double Calculator::getTotal()
{
return total;
}
тогда я создать объект Калькулятор в моем классе MainWindow .h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QMap<QString,double> ¤cy_map, QWidget *parent = 0);
~MainWindow();
private slots:
void on_convert_button_clicked();
private:
Ui::MainWindow *ui;
Calculator calc;
};
.cpp
MainWindow::MainWindow(QMap<QString, double> ¤cy_map, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),calc(currency_map)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_convert_button_clicked()
{
calc.getValues(ui->from_Combox->currentText(),ui->to_Combox->currentText());
calc.multiply();
ui->lcdNumber->display(calc.getTotal());
}
, но я не могу показаться, чтобы получить какое-либо значение из карты. странная вещь также, когда я отлаживаю (я использую визуальную студию), она всегда показывает карту как пустую, которую я не могу понять, поскольку работает функция печати.
любая помощь будет оценена. thx
У меня возникло ощущение, что проблема может возникнуть при создании экземпляра calc; вы можете попробовать объявить calc как указатель и построить его в свой конструктор MainWindow с помощью параметра & currency_map, поэтому что-то вроде calc = new Calculator (currency_map) – Marco
, ничего не изменилось. – user3219947
Можете ли вы попытаться сделать объявление карты в классе калькулятора не ссылкой? – Harry