Qt и QWT: QwtPlotCurve - кривая не отображается

Я хочу показать простой график, используя QWT и Qt Creator:

Версия Qt: 4.8.2, Qt Creator: 2.5.2, версия QWT: 6.0.0

Я добавил QwtPlot к моему MainWindow (названному «myPlot» в примере). Затем у меня есть функция обратного вызова, которая вызывается каждый раз, когда я нажимаю кнопку:

void MainWindow::forwardPlot()
{
    double x[9] = {1,20,30,40,50,60,70,200,500};
    double y[9] = {1,500,3,1,200,100,2,1,0};
    QwtPlotCurve *curve = new QwtPlotCurve();
    curve->setRawSamples(x,y,9);
    curve->attach( ui->myPlot );
    curve->show();
    ui->myPlot->replot();
    ui->label->setText("bla");
}

Компиляция работает нормально ... Метка установлена ​​​​на «bla», поэтому я знаю, что вызывается функция обратного вызова. Но кривая не отображается. Например, я могу изменить размер myPlot. Но показать кривую не получается. Любые подсказки?


person Michael    schedule 09.12.2013    source источник
comment
был ли ui->myPlot виден раньше? что произойдет, если вы добавите ui->myPlot->show()   -  person UmNyobe    schedule 09.12.2013
comment
Нет, это я уже пробовал. Не помогает :-(   -  person Michael    schedule 09.12.2013


Ответы (2)


Ваши массивы точек находятся в стеке и исчезнут после выхода из forwardPlot().

person Uwe    schedule 15.11.2017

  1. Кажется, вы не устанавливаете цвет пера для кривой:

    кривая->setPen(QColor(Qt::green));

  2. Вам нужно настроить ось, чтобы Qwt знал, какую часть графика показывать:

    ui->myPlot->setAxisScale(QwtPlot::xBottom, 1.0, 500.0);

    ui->myPlot->setAxisScale(QwtPlot::yLeft, 1.0, 500.0);

  3. Я бы также установил заголовок для кривой, чтобы увидеть, работает ли вообще ваш QwtPlot:

    ui->myPlot->setTitle("Название сюжета");

Изменить: я воспроизвел проблему. setRawSamples требует, чтобы буферы данных, которые вы передаете, были действительными в течение всего времени существования графика. В вашем случае вы передаете локальные буферы, которые недействительны, как только forwardPlot() ends

Вместо этого выделяйте буферы в куче.

person George Y.    schedule 10.12.2013
comment
Из подсказок выше работает только часть 3 (Зарисовка заголовка)... Все равно не пойму в чем проблема. - person Michael; 14.12.2013
comment
Под произведениями вы подразумеваете, что на виджете сюжета видно название, но не сам сюжет? Видишь ось? Пожалуйста, рассмотрите возможность публикации компилируемого примера, который воспроизводит проблему, или загрузите куда-нибудь проект, так как проблема может быть где-то еще (например, в файле пользовательского интерфейса). - person George Y.; 15.12.2013
comment
Хорошо, я приведу пример, как только у меня будет время. Что я имел в виду в комментарии ранее, так это то, что я вижу заголовок. Я также вижу область графика, ось и могу изменить цвет оси графика. Но я не могу изменить масштаб обеих осей (точка два вашего ответа). И, самое главное, кривая не появляется... Спасибо за комментарий! - person Michael; 15.12.2013
comment
См. редактирование выше, похоже, это источник проблемы. - person George Y.; 15.12.2013