Russian Qt Forum

Qt => Базы данных => Тема начата: ivanbars от Апрель 21, 2010, 12:42



Название: помогите студенту ...
Отправлено: ivanbars от Апрель 21, 2010, 12:42
надо создать таблицу, данные в которую вносятся из файла, .csv 
дальше по этим данным должен строиться график...
очень прошу описать подробно... 


Название: Re: помогите студенту ...
Отправлено: shirushizo от Апрель 21, 2010, 13:50
Мда... я думаю телепаты в отпуске...
Во-первых, зачем база не понятно и если так сильно нужна какая СУБД?
Во-вторых, стоит воспользоваться поиском - для графиков есть компонента и по чтению файлов инфы завались.


Название: Re: помогите студенту ...
Отправлено: Vass от Апрель 21, 2010, 14:34
Мда... я думаю телепаты в отпуске...
Во-первых, зачем база не понятно и если так сильно нужна какая СУБД?
Во-вторых, стоит воспользоваться поиском - для графиков есть компонента и по чтению файлов инфы завались.

Я думаю топикстартер имел ввиду "напишите мне нахаляву программу которая умеет.... <Текст топика> и расскажите как это работает, а то меня из института выгонят"



Название: Re: помогите студенту ...
Отправлено: lit-uriy от Апрель 21, 2010, 14:35
лучше начать c SQLite, т.к. можно всё сделать в программе, освоить азы SQL'я.
1) Создать соединение с БД
2) Создать в БД таблицу
3) Читать построчно файл, разбивая на поля (столбцы) каждую строку
4) Записывать строку в БД

В принципе могу код дать, частично.


Название: Re: помогите студенту ...
Отправлено: lit-uriy от Апрель 21, 2010, 14:36
Vass, ну может быть и не так. Просто не имеет никаких представлений, нужна схема для изучений.


Название: Re: помогите студенту ...
Отправлено: ivanbars от Апрель 21, 2010, 14:39
прошу прощение, это не база а скорей занесение данных в таблицу из файла Excel
просто дело в том что я только начал изучать C++ и не успеваю за все хвататься, а сроки с выполнением этой работы поджимают!...
я так понимаю что надо в ТаблВиджет внести данные из файла в котором они хранятся... при открытии текстовым редактором выглядит как:
Цитировать
#12.01.07.Fri;TRIGGER;FA(Hz);Angle_FA(Deg.);UA(kV);P(MW);Q(MVA);KHARANOVSKAYA TPP-HOLBON SS
13:35:36.000;-115.66;49.9999;113.470;137.490;85.880;-31.650;
13:35:36.020;-115.64;49.9997;113.470;137.490;85.880;-31.650;
13:35:36.040;-115.62;49.9994;113.470;137.500;85.870;-31.660;
через точку с запятой идет отдельная ячейка....(я прикреплю файл в котором хранятся данные)
ну и по данным надо построить график, если можете помогите это реализовать, или может у кого то есть подобные примеры, ну а там я уж попробую разобраться...


Название: Re: помогите студенту ...
Отправлено: Vass от Апрель 21, 2010, 14:50
А для вывода графика либо придется лезть в QWT, там есть класс QwtPlot http://qwt.sourceforge.net/class_qwt_plot.html
либо, если не хочется возиться с QWT,  на просторах итернета советуют QtBasicGraph http://code.google.com/p/ewiframework/source/browse/third_party/basicgraph/?r=46940a8648fa434414899c7da5820d8926c79ecf вот тут например


Название: Re: помогите студенту ...
Отправлено: vadim303 от Апрель 21, 2010, 14:58
Ну например из cvs c двумя столбцами можно прочитать и заполнить табличку так:
Код:
void Dialog::loadCSV(QString filename)
{
    QFile file(filename);

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    table.clear();

    bool ok;
    qreal x,y;
    QTextStream in(&file);
    QString line = in.readLine(); // первая строка - заголовок. пропускаем
    while (!in.atEnd()) {
        line = in.readLine();
        QStringList strList = line.split(QChar(','));
        if (strList.size()<2) break;
        x = strList.at(0).toDouble(&ok);
        if (ok) y = strList.at(1).toDouble(&ok);
        if (!ok) break;
        table.append(QPointF(x,y));
    }
    updateTableWidget();
}

void Dialog::updateTableWidget()
{
    ui->tableWidget->setColumnCount(2);
    if (table.size() == 0)
    {
        ui->tableWidget->setRowCount(1);
        ui->tableWidget->clear();
    }
    else
    {
        ui->tableWidget->setRowCount(table.size());
        for (int i=0; i<table.size(); ++i)
        {
            ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number((double)table.at(i).x(),'f')));
            ui->tableWidget->setItem(i,1,new QTableWidgetItem(QString::number((double)table.at(i).y(),'f')));
        }
    }

}

Объявления в Dialog-е:
Код:
QVector<QPointF> table;
void loadCSV(QString filename);
void updateTableWidget();

Для нескольких столбцов надо будет вместо QPointF свой класс данных строки создать. Ну и функции чтения и заполнения подредактировать для большего числа столбцов. Но принцип вроде ясен?

Про график уже советовали... но если учебная задача, то наверно лучше будет свою функцию рисования написать


Название: Re: помогите студенту ...
Отправлено: ivanbars от Апрель 21, 2010, 15:04
спасибо всем большое, сейчас попробую воспользоваться советами!.... а насчет учебного задания, это просто я вызвался изучить  С++.... и преподаватель посоветовал данную среду..
еще раз спасибо, сейчас попробую разобраться!...


Название: Re: помогите студенту ...
Отправлено: NicK от Апрель 22, 2010, 13:02
А для вывода графика либо придется лезть в QWT, там есть класс QwtPlot http://qwt.sourceforge.net/class_qwt_plot.html
либо, если не хочется возиться с QWT,  на просторах итернета советуют QtBasicGraph http://code.google.com/p/ewiframework/source/browse/third_party/basicgraph/?r=46940a8648fa434414899c7da5820d8926c79ecf вот тут например

Где можно посмотреть на скриншоты работ с использованием этого QtBasicGraph ?