Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Loonaticc от Май 27, 2013, 18:28



Название: График по массиву
Отправлено: Loonaticc от Май 27, 2013, 18:28
Добрые люди, помогите кто знает.
Имеется цель:
1) считать из файла массивы точек, скажем X1 и Y1. Ну или двумерный сразу (X1, Y1).
2) построить по этим массивам график.

Я новичок в Qt совсем. Всё собрал, прикрутил- проект работает. Пока самое начало начинаю- пробую как рандомные точки через цикл выводить. Но может кто поможет с кодом? как считать из файла и нарисовать? Спасибо огромное
Код:
// количество данных
    const int N1 = 10;

    // выделить память
    double *X1 = (double *)malloc((2*N1)*sizeof(double));
    double *Y1 = X1 + N1;

    //шаг
    double h = 8./(N1-1);
    for (int k = 0; k < N1; k++)
    {
        X1[k] = k*h;
        Y1[k] = rand()%10;
        curv1->setSamples(X1,Y1,N1);
    }


Название: Re: График по массиву
Отправлено: Loonaticc от Май 27, 2013, 19:35
неужели никто не поможет  :( :(

пробую сначала просто из массивов точки выводить. но выводит что-то не то
Код:
double X1[] = {0, 1, 2, 3, 4};
    double Y1[] = {1, 1, 2, 3, 1};


    double *p1, *p2;
    p1 = X1;
    p2 = Y1;

    for (int i=0; i<N1; i++){

        curv1->setSamples(p1+i,p2+i,N1);
    }


Название: Re: График по массиву
Отправлено: kambala от Май 27, 2013, 20:52
читать из файла — почитай документацию QFile

malloc/free — это больше для чистого си, в плюсах проще использовать new/delete

рисовать можно на QGraphicsView (по-моему проще чем через paintEvent) или с использованием библиотеки QwtPlot

во втором коде обращение к элементам правильное, но неизестно что такое curv1


Название: Re: График по массиву
Отправлено: Loonaticc от Май 28, 2013, 00:03
curve1- это и есть кривая, которую по точкам выводим))
покопался я в QFile, только что- то не пойму до конца.
К примеру, на каждой строке но одному числу. вот так
1
2
4
7
Как сделать, чтобы из файла считывалась первая строка- записывалась в массив X[] под индексом X[0]
потом вторая строка с двойкой записалась в массив Y[0]
затем 4ка- в X[1]
7ка- в Y[1]

и так далее, то есть чтобы попарно числа заполняли 2 массива?
там по идее один цикл всего нужен с проверкой на четность номера операндов. Может кто поделится кодом? а то уже битый час сижу не получается((


Название: Re: График по массиву
Отправлено: kambala от Май 28, 2013, 02:15
в описании QFile есть даже пример как работать с файлами, написано очень прозрачно.
Код
C++ (Qt)
QFile f("input.txt");
if (!f.open(QIODevice::ReadOnly))
{
   qDebug() << "error opening file:" << f.errorString();
   return;
}
 
int size = f.readLine().toInt(); // по-хорошему первой строкой в файле указывают размерность массива
int *x = new int[size], *y = new int[size];
for (int i = 0; i < size; ++i)
{
   x[i] = f.readLine().toInt();
   y[i] = f.readLine().toInt();
}
...
delete [] x;
delete [] y;

если размерность в файле не указана, используй std::vector или QList