Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z wczytaniem danych i wyswietleniem w QT , vector

Ostatnio zmodyfikowano 2022-10-17 17:23
Autor Wiadomość
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:
C/C++
#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:
C/C++
#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() // jak widać próbowałem przez getera ale ciągle gdzieś jest błąd w rozumowaniu,
{
   
}
Czy można wektor podać przez funkcję np (na bank zła składnia)??:
C/C++
double getData() {
   
return lipidX;
}
pozdrawiam i z góry dzięki za odpowiedź.
P-179727
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.
C/C++
std::vector < double > & getData()
{
   
return lipidX;
}
Referencja opcjonalna, ale zalecana dla uniknięcia zbędnego kopiowania danych.
P-179728
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
P-179731
« 1 »
  Strona 1 z 1