G
May 5, 2024, 1:13 a.m.

добавить qlineseries в функции

qlineseries

Всем доброго времени суток!
Товарищи, помогите, юному падавану обуздать QChart, уже неделю пытаюсь сам решить проблему, в интернете подходящих статей не нашел:)

Проблема в следующем:
Хочу иметь собственный, пользовательский класс для создания графиков QChart. Идея заключается в том, чтобы в класс через функцию, можно было добавлять данные, а они уже автоматически будут строиться
мой код

профайлер
QT += core gui charts

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

!!!DEFINES += QT_DEPRECATED_WARNINGS

You can make your code fail to compile if it uses deprecated APIs.

In order to do so, uncomment the following line.

DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
GrarhPlotter.cpp \
callout.cpp \
main.cpp \
mainwindow.cpp

HEADERS += \
GraphPlotter.h \
callout.h \
mainwindow.h

FORMS += \
mainwindow.ui

Default rules for deployment.

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

mainwindow.h

ifndef MAINWINDOW_H

define MAINWINDOW_H

include

include

include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
};

endif // MAINWINDOW_H

mainwindow.cpp

include "mainwindow.h"

include "ui_mainwindow.h"

include "GraphPlotter.h"

//#include

MainWindow::MainWindow(QWidget parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// GPlotter gplotter(ui->view);
GPlotter
gplotter = new GPlotter(ui->view);

QVector<double> arr1{6, 7, 8, 9, 10};
QVector<double> arr2{5, 4, 3, 2, 1};

// int idOne = gplotter.addSeries("plot1", arr1);
int idOne = gplotter->addSeries("plot1", arr1);
// int idOne = gplotter->addSeries("plot1", arr1);
// int idTwo = gplotter.addSeries("plot2", arr2);

// QLineSeries oneSeries = gplotter.takeSeries(idOne);
// QLineSeries
twoSeries = gplotter.takeSeries(idTwo);

// oneSeries->append(QPointF(5, 100));
// twoSeries->insert(0, QPointF(1, 50));
// gplotter.update();
}

MainWindow::~MainWindow()
{
delete ui;
}

мой пользовательский класс: GPlotter
GraphPlotter.h

ifndef GRAPHPLOTTER_H

define GRAPHPLOTTER_H

include

include

include

include

include

include

include "callout.h"

//namespace Ui {
//class GPlotter;
//}

//namespace Ui {
//class MainWindow;
//}

QT_CHARTS_USE_NAMESPACE

class GPlotter : public QChartView
{
Q_OBJECT

public:

explicit GPlotter(QWidget *parent = nullptr);
~GPlotter();

int addSeries(QString title, QVector <double> &arr);
QLineSeries* takeSeries(int key);
void setConf(QString param);
void clearChart(QString title);
void update(void);

// QLineSeries series;
QChart
chart;
QString title;
QMap map;

void saveAxisRange();

private:
//Ui::MainWindow *ui;

QPoint m_lastPoint;
bool m_isPress;
bool m_ctrlPress;
bool m_alreadySaveRange;
double m_xMin, m_xMax, m_yMin, m_yMax;
QGraphicsSimpleTextItem* m_coordItem;

protected:
void mousePressEvent(QMouseEvent *event);

public slots:
};

endif // GRAPHPLOTTER_H

GrarhPlotter.cpp

include "GraphPlotter.h"

include

//#include
//#include

include "ui_mainwindow.h"

GPlotter::GPlotter(QWidget *parent) :
QChartView(parent)
//QWidget (view),
//ui(new Ui::MainWindow)
{

chart = new QChart();

// QChartView view = new QChartView(chart);
// QChartView
view = new QChartView(parent);
// view->setParent(parent);
// view->setChart(chart);

// view->setMouseTracking(true);
// setChart(chart);
setMouseTracking(true);
// QLineSeries series = new QLineSeries();
// series = new QLineSeries();
//
series << QPointF(1, 1);
// series << QPointF(2, 2);
//
series << QPointF(3, 3);
// series << QPointF(4, 4);
//
series << QPointF(5, 5);
// chart->addSeries(series);
// chart->createDefaultAxes();
}

int GPlotter::addSeries(QString title, QVector &arr){

QLineSeries *series = new QLineSeries();
series->setName(title);

//chart = new QChart();
QValueAxis *axisX = new QValueAxis();
chart->addAxis(axisX, Qt::AlignBottom);


QValueAxis *axisY = new QValueAxis();
chart->addAxis(axisY, Qt::AlignLeft);

// this->setChart(chart);

for(int i = 0; i < arr.count(); i++)

// series->append(QPointF(i, arr.at(i)));
*series << QPointF(i, arr.at(i));

map.insert(map.count(), series);
//qDebug() << map;
//chart->legend()->hide();
//chart->setTitle(title);


chart->addSeries(series);
series->attachAxis(axisX);
series->attachAxis(axisY);

// chart->createDefaultAxes();
// series->attachAxis(chart->axisX());
// series->attachAxis(chart->axisY());

setChart(chart);
return map.firstKey();

}

QLineSeries GPlotter::takeSeries(int key){
QLineSeries
ans;
ans = map[key];
return ans;
}

void GPlotter::update(void){

for(int i = 0; i < map.count(); i++){
    chart->removeSeries(map[i]);
    chart->addSeries(map[i]);
}
chart->createDefaultAxes();

}

void GPlotter::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
m_lastPoint = event->pos();
m_isPress = true;
}
}

GPlotter::~GPlotter()
{
//chart->removeAllSeries();
//delete chart;
}

На выходе получаю это:

1) Не понимаю почему изображение не "натягивается" на весь chart
2) после chart->createDefaultAxes(); не могу подключить ось series->attachAxis(chart->axisY()) ( для X соответственно тоже самое)

Спасибо за внимание!

4

Do you like it? Share on social networks!

4
BlinCT
  • May 5, 2024, 2:44 p.m.

Давно я не работал с виджетами и с формами, на мой взгляд уже пережитов, и в управлении не очень удобное это все.
Н оя у вас не увидел в коде где вы QCharts растягиваете на область парента.

    G
    • May 7, 2024, 9:27 a.m.

    в функции: "GPlotter::addSeries(QString title, QVector &arr)" я вызываю метод setChart(...), я в конструктор передал адрес на QChartView элемент

      NSProject
      • June 23, 2024, 10:48 p.m.

      А куда собстаенно делся Евгений раз на сайте такой бордак творится?

        Evgenii Legotckoi
        • June 25, 2024, 12:11 a.m.

        Я тут. Работы оень много. Отправил его в бан.

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • Evgenii Legotckoi
            March 9, 2025, 9:02 p.m.
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            March 9, 2025, 4:14 p.m.
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            Nov. 22, 2024, 9:51 p.m.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          • Evgenii Legotckoi
            Oct. 31, 2024, 11:37 p.m.
            Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
          • A
            Oct. 19, 2024, 5:19 p.m.
            Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html