LINUX.ORG.RU

QWT в jpg или png

 ,


0

1

Не получается у меня получить качественное изображение в высоком качестве. Написал следующий код:

QwtPlot *d_plot = new QwtPlot(NULL);
 
d_plot->setTitle( "Изменение емкости аккумулятора" ); // заголовок
d_plot->setCanvasBackground( Qt::white ); // цвет фона
// Параметры осей координат
d_plot->setAxisTitle(QwtPlot::yLeft, "А/ч");
d_plot->setAxisTitle(QwtPlot::xBottom, "t");
d_plot->insertLegend( new QwtLegend() );
// Включить сетку
QwtPlotGrid *grid = new QwtPlotGrid();
grid->setMajorPen(QPen( Qt::gray, 2 )); // цвет линий и толщина
grid->attach( d_plot ); // добавить сетку к полю графика
// Кривая
QwtPlotCurve *curve = new QwtPlotCurve();
curve->setPen( Qt::blue, 6 ); // цвет и толщина кривой
curve->setRenderHint( QwtPlotItem::RenderAntialiased, true ); // сглаживание
// Маркеры кривой
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse, QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
curve->setSymbol( symbol );
// Добавить точки на ранее созданную кривую
QPolygonF points;
points << QPointF( 0.0, 0.0 ) << QPointF( 1.0, 1.0 ) // координаты x, y
       << QPointF( 1.5, 2.0 ) << QPointF( 3.0, 2.0 )
       << QPointF( 3.5, 3.0 ) << QPointF( 5.0, 3.0 );
 
curve->setSamples( points ); // ассоциировать набор точек с кривой
curve->attach( d_plot ); // отобразить кривую на графике
 
QPixmap pixmap(1024,600);
pixmap = QPixmap::grabWidget(d_plot);
QPainter *painter=new QPainter(&pixmap);
QwtPlotRenderer rend;
d_plot->replot();
rend.render(d_plot,painter,d_plot->geometry());
QFile file("Dene.jpg");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "jpg", 100);
file.close();

Перемещено hobbit из general

Ответ на: комментарий от EXL

Вчера пытался сделать resize не получалось. Сегодня добавил заработало ) Вот код если кому надо:

    QwtPlot *d_plot = new QwtPlot(NULL);
    d_plot->setTitle( "Изменение емкости акумулятора" ); // заголовок
    d_plot->setCanvasBackground( Qt::white ); // цвет фона
     // Параметры осей координат
    d_plot->setAxisTitle(QwtPlot::yLeft, "А/ч");
    d_plot->setAxisTitle(QwtPlot::xBottom, "t");
    d_plot->insertLegend( new QwtLegend() );
     // Включить сетку
     QwtPlotGrid *grid = new QwtPlotGrid();
     grid->setMajorPen(QPen( Qt::gray, 2 )); // цвет линий и толщина
     grid->attach( d_plot ); // добавить сетку к полю графика
     // Кривая
     QwtPlotCurve *curve = new QwtPlotCurve();
     curve->setPen( Qt::blue, 6 ); // цвет и толщина кривой
     curve->setRenderHint( QwtPlotItem::RenderAntialiased, true ); // сглаживание
     // Маркеры кривой
     QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse, QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
     curve->setSymbol( symbol );

     // Добавить точки на ранее созданную кривую
     QPolygonF points;
     points << QPointF( 0.0, 0.0 ) << QPointF( 1.0, 1.0 ) // координаты x, y
            << QPointF( 1.5, 2.0 ) << QPointF( 3.0, 2.0 )
            << QPointF( 3.5, 3.0 ) << QPointF( 5.0, 3.0 );

     curve->setSamples( points ); // ассоциировать набор точек с кривой
     curve->attach( d_plot ); // отобразить кривую на графике

     QPixmap pixmap(1024,600);
     QPainter *painter=new QPainter(&pixmap);
     QwtPlotRenderer rend;
     d_plot->resize(1024,600);
     d_plot->replot();
     rend.render(d_plot,painter,d_plot->geometry());
     QFile file("Dene.jpg");
     file.open(QIODevice::WriteOnly);
     pixmap.save(&file, "jpg", 100);
     file.close();
Alex_Golubev
() автор топика
Ответ на: комментарий от Alex_Golubev

Сегодня добавил заработало

Отметь тогда тему как решённую.

Вот код если кому надо:

Это правильно!

Хотя я бы, во-первых, проверял результат, возвращаемый QFile::open() (мало ли что может приглючиться с записью в файл, вплоть до банальной попытки записать в read-only каталог).

А во-вторых, результат открытия файла по имени без указания пути не очень предсказуем и зависит от ОС. Винда скорее всего запишет (если сумеет) в текущий каталог, линукс (опять-таки скорее всего) — в хомяк, где пользователь будет его долго и упорно искать.

Надёжнее всего в качестве пути по умолчанию использовать системный каталог для картинок. В Qt4 он ищется через QDesktopServiсes, в Qt5 (и скорее всего, в Qt6 тоже) — через QStandardPaths. И чтоб уж совсем красиво — сохранять последний выбранный вариант в конфиге.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 3)