Russian Qt Forum
Ноябрь 22, 2024, 16:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Так и не понял куда задать свой вопрос, поэтому задам сюда.  (Прочитано 14355 раз)
vfrcbvrf23
Гость
« Ответ #15 : Апрель 12, 2016, 14:03 »

а почему на картинке от -10 до 10 график? в коде рэндж ставиться ui->widget->xAxis->setRange(-1, 1);

Ренж выставил от -10 до 10 везде, ибо если ставить ренж (-1;1), то 5 туда точно не войдет.
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #16 : Апрель 12, 2016, 14:04 »

ну так по х оставте -1,1, а по у -10, 10

ui->widget->xAxis->setRange(-1, 1);
ui->widget->yAxis->setRange(-10, 10);
Записан
vfrcbvrf23
Гость
« Ответ #17 : Апрель 12, 2016, 14:08 »

Цитировать
   char* p = new char(ui->lineEdit_3->text().length() + 1);
    strcpy(p, ui->lineEdit_3->text().toUtf8().constData());

вообще адище Грустный

имхо хватит вызова functparcer(ui->lineEdit_3->text().toUtf8().constData());
При таком написании выдает ошибку:
D:\QT\kurc\mainwindow.cpp:129: ошибка: invalid conversion from 'const char*' to 'char*' [-fpermissive]
     functparcer(ui->lineEdit_3->text().toUtf8().constData());
Именно из-за этой ошибки все было сделано так как оно есть, ибо по другому реализовать не получалось

                                                           ^
Как объявлена функция functparcer()? Очевидно, что в неё передается указатель на строку для разбора, а не для того, чтобы изменить эту строку. Поэтому нужно объявлять с константным аргументом functparcer(const char *p), тогда можно передать константный указатель functparcer(ui->lineEdit_3->text().toUtf8().constData());
functparcer::functparcer(char* massiv)
Если я правильно понял о чем вы, могу вставить код парсера если нужно.
Записан
vfrcbvrf23
Гость
« Ответ #18 : Апрель 12, 2016, 14:09 »

ну так по х оставте -1,1, а по у -10, 10

ui->widget->xAxis->setRange(-1, 1);
ui->widget->yAxis->setRange(-10, 10);
Стало вот так: http://c2n.me/3wODL3c
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #19 : Апрель 12, 2016, 14:10 »

Цитировать
Стало вот так: http://c2n.me/3wODL3c
а парабола строиться нормально?
Записан
vfrcbvrf23
Гость
« Ответ #20 : Апрель 12, 2016, 14:15 »

Цитировать
Стало вот так: http://c2n.me/3wODL3c
а парабола строиться нормально?
Да, парабола строится нормально. Даже в изначальном варианте она строилась нормально. Ведь в самом графике параболы есть точка с координатами (0;0).
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #21 : Апрель 12, 2016, 14:21 »

functparcer::functparcer(char* massiv)
Если я правильно понял о чем вы, могу вставить код парсера если нужно.
У вас парсер должен модифицировать строку массив? по задумке - должен или нет? Могу предположить, что нет. Тогда нужно конструктор объявлять так
functparcer::functparcer(const char* massiv)

Если предполагается внунтри класса модифицировать строку во время парсинья.... то сделайте внутри конструктора копию строки

functparcer::functparcer(const char* massiv)
{
ownerStr = new char[strlen(massiv) + 1];
strcpy(this->ownerStr, massive);
...
}
в деструкторе зачистку с delete.
functparcer::~functparcer()
{
delete [] ownerStr;
} Вобщем тут от задумки зависит
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #22 : Апрель 12, 2016, 14:27 »

Да, парабола строится нормально. Даже в изначальном варианте она строилась нормально.
т.е. меняете одну строчку y = x*x на y = 5 и  QCustomPlot перестает работать? странно. а если рэндж везде -1, 1 и y = 0.5?

Цитировать
Ведь в самом графике параболы есть точка с координатами (0;0).
а если y = x*x + 0.1, то не будет точки 0.0.

ps я бы сам поигрался бы с QCustomPlot, только эта библа у меня не установлена....
Записан
vfrcbvrf23
Гость
« Ответ #23 : Апрель 12, 2016, 14:46 »

Да, парабола строится нормально. Даже в изначальном варианте она строилась нормально.
т.е. меняете одну строчку y = x*x на y = 5 и  QCustomPlot перестает работать? странно. а если рэндж везде -1, 1 и y = 0.5?

Цитировать
Ведь в самом графике параболы есть точка с координатами (0;0).
а если y = x*x + 0.1, то не будет точки 0.0.

ps я бы сам поигрался бы с QCustomPlot, только эта библа у меня не установлена....

Код:
for (int i=0; i<101; ++i)
    {
        x[i] = i/50.0 - 1 ; // x goes from -1 to 1
        y[i] = 0.5 ; // let's plot a quadratic function
    }
    // create graph and assign data to it:
    ui->widget->addGraph();
    ui->widget->graph(0)->setData(x, y);
    // give the axes some labels:
    ui->widget->xAxis->setLabel("x");
    ui->widget->yAxis->setLabel("y");
    // set axes ranges, so we see all data:
    ui->widget->xAxis->setRange(-1, 1);
    ui->widget->yAxis->setRange(-1, 1);
    ui->widget->replot();

Вот в таком варианте нормально все строится.

Код:
 x[i] = h*i - dlina ;
Когда меняем на это,уже не получается
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #24 : Апрель 12, 2016, 14:53 »

Код:
 x[i] = h*i - dlina ;
Когда меняем на это,уже не получается
чтобы получилось, должно в рандж попасть. сделайте  h = 0.02, а dlina = 1. тогда первая точка должна быть (-1, 0.5), последняя (1, 0.5)
Записан
vfrcbvrf23
Гость
« Ответ #25 : Апрель 12, 2016, 15:10 »

Код:
 x[i] = h*i - dlina ;
Когда меняем на это,уже не получается
чтобы получилось, должно в рандж попасть. сделайте  h = 0.02, а dlina = 1. тогда первая точка должна быть (-1, 0.5), последняя (1, 0.5)

Я вот немного не пойму, а от куда из вот этого:
Код:
x[i] = i/50.0 - 1 ;
Получается вот это:
Код:
x[i] = h*i - dlina
Записан
vfrcbvrf23
Гость
« Ответ #26 : Апрель 12, 2016, 18:04 »

Код:
 x[i] = h*i - dlina ;
Когда меняем на это,уже не получается
чтобы получилось, должно в рандж попасть. сделайте  h = 0.02, а dlina = 1. тогда первая точка должна быть (-1, 0.5), последняя (1, 0.5)

Я вообщем решил проблему, но немного не тем путем.
Все решилось дописыванием 2х строчек:
Код:
 
x.resize(i);
y.resize(i);
Вот так вот
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Апрель 12, 2016, 18:56 »

Вот так вот
Ну и слава богу что все порешали
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #28 : Апрель 13, 2016, 05:47 »

Код:
 x[i] = h*i - dlina ;
Когда меняем на это,уже не получается
чтобы получилось, должно в рандж попасть. сделайте  h = 0.02, а dlina = 1. тогда первая точка должна быть (-1, 0.5), последняя (1, 0.5)

Я вот немного не пойму, а от куда из вот этого:
Код:
x[i] = i/50.0 - 1 ;
Получается вот это:
Код:
x[i] = h*i - dlina

Цитировать
сделайте  h = 0.02, а dlina = 1
i/50 -1 = i * 1/50 -1 = i * 0.02 -1 = i*h - dlina
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.352 секунд. Запросов: 23.