добавить 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
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
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 соответственно тоже самое)
Спасибо за внимание!
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Akiv Doros
- 11 ноября 2024 г. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
- molni99
- 26 октября 2024 г. 1:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
- molni99
- 26 октября 2024 г. 1:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Давно я не работал с виджетами и с формами, на мой взгляд уже пережитов, и в управлении не очень удобное это все.
Н оя у вас не увидел в коде где вы QCharts растягиваете на область парента.
в функции: "GPlotter::addSeries(QString title, QVector &arr)" я вызываю метод setChart(...), я в конструктор передал адрес на QChartView элемент
А куда собстаенно делся Евгений раз на сайте такой бордак творится?
Я тут. Работы оень много. Отправил его в бан.