Problem z wczytaniem danych i wyswietleniem w QT , vector
Ostatnio zmodyfikowano 2022-10-17 17:23
pgogo Temat założony przez niniejszego użytkownika |
Problem z wczytaniem danych i wyswietleniem w QT , vector » 2022-10-17 16:51:04 Witam, mam problem czegoś nie rozumiem, potrzebuje wrzucić dane z pliku do dwóch wektorów (to udało się) lecz później nie potrafię zmusić QT do wyświetlenia tych danych. Jeżeli w klasie Dialog wrzucę dane do dwóch wektorów od razu to wszystko gra, lecz mam około 20 plików z ponad 2k punktami pomiarowymi i wolę aby wczytywały się. Poniżej zamieszczam kod. setData przyjmuje tylko vectory jako argument. KOD DIALOG: #include "dialog.h" #include "ui_dialog.h" #include "Lipids.h"
Dialog::Dialog( QWidget * parent ) : QDialog( parent ) , ui( new Ui::Dialog ) { ui->setupUi( this ); ui->plot->setInteraction( QCP::iRangeDrag, true ); ui->plot->setInteraction( QCP::iRangeZoom, true ); ui->plot->addGraph(); Lipids dmpc1, dmpc2; ui->plot->graph( 0 )->setData( dmpc1.lipidX, dmpc2.lipidY ); ui->plot->xAxis->setLabel( "Temperatura [K]" ); ui->plot->yAxis->setLabel( "Entalpia [jednostki arbitralne]" ); ui->plot->xAxis->setRange( 284, 316 ); ui->plot->yAxis->setRange( - 5, 140 ); }
Dialog::~Dialog() { delete ui; } KOD LIPIDS: #include "Lipids.h" #include <iostream> #include <fstream> #include <string> #include <sstream> #include <QVector>
void Lipids::loadDataX() { std::ifstream input; input.open( "1.txt", std::ios::in ); while( input >> column1 >> column2 ) { lipidX.push_back( column1 ); } }
void Lipids::loadDataY() { std::ifstream input; input.open( "1.txt", std::ios::in ); while( input >> column1 >> column2 ) { lipidY.push_back( column2 ); } }
void Lipids::getData() { } Czy można wektor podać przez funkcję np (na bank zła składnia)??: double getData() { return lipidX; } pozdrawiam i z góry dzięki za odpowiedź. |
|
pekfos |
» 2022-10-17 17:03:25 Po co wczytujesz to samo dwa razy? Wczytaj obie kolumny naraz. Wektor można zwrócić z funkcji, tylko musisz podać wektor jako typ zwracany. std::vector < double > & getData() { return lipidX; } Referencja opcjonalna, ale zalecana dla uniknięcia zbędnego kopiowania danych. |
|
pgogo Temat założony przez niniejszego użytkownika |
» 2022-10-17 17:23:00 dzięki za odpowiedź, próbowałem najpierw na raz wczytać, później rozdzielić itp itd dlatego jest kod rozdzielony. Bedzie tak: void Lipids::loadData() { std::ifstream input; input.open( "1.txt", std::ios::in ); while( input >> column1 >> column2 ) { lipidX.push_back( column1 ); lipidY.push_back(column2); } } std::vector<double>&getDataX(){ return lipidX; } std::vector<double&getDataY(){ return lipidY; }
dzięki |
|
« 1 » |