C
1 июля 2020 г. 23:17
Счечик производительности сети
Здравствуйте!
Я хочу создать график для производительности сети. Но график рисуется не так как должен. Мой пример кода:
- #ifndef CHART_H
- #define CHART_H
- #include <QChart>
- #include <QTimer>
- #include <QAbstractAxis>
- #include <QLineSeries>
- #include <QValueAxis>
- #include <QAreaSeries>
- #include <QDebug>
- QT_CHARTS_BEGIN_NAMESPACE
- class QLineSeries;
- class QValueAxis;
- QT_CHARTS_END_NAMESPACE
- QT_CHARTS_USE_NAMESPACE
- class Chart: public QChart
- {
- Q_OBJECT
- public:
- Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
- void setLabelsOn(bool isOn);
- void setPenStyle(QColor color, int width);
- void setLegendOn(bool isOn);
- void setAxisGridLineOn(bool isOn);
- virtual ~Chart();
- public slots:
- void handleTimeout();
- private:
- QTimer m_timer;
- QLineSeries *m_series;
- QLineSeries *series1;
- QValueAxis *m_axisX;
- QValueAxis *m_axisY;
- qreal m_x;
- qreal m_y;
- QList<double> testList;
- QAreaSeries *areaSeries;
- };
- #endif /* CHART_H */
- #include "chart.h"
- Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
- QChart(QChart::ChartTypeCartesian, parent, wFlags),
- m_series(nullptr),
- m_x(5),
- m_y(0)
- {
- m_axisX = new QValueAxis(this);
- m_axisY = new QValueAxis(this);
- m_series = new QLineSeries(this);
- m_series->append(m_x, m_y);
- series1 = new QLineSeries(this);
- series1->append(1, 1);
- testList << 93.8436 << 777.797 << 2507.78 << 5999.44 << 6806.54 << 7481.16
- << 8008.5 << 1500.5 << 8328.4 << 1998.4 << 9092.04 << 1885.60 << 8093.8 << 8161.83 << 8216.99
- << 8280.46 << 8394.55 << 8469.84
- << 8500.65 << 2500.88 << 8558.16 << 8660.9 << 8638.87
- << 8726.47 << 8715.25 << 8804.48 << 8793.86
- << 8839.42 << 8875.75 << 8938.24 << 8977.09
- << 9020.27 << 9046.7 << 9092.04 << 9121.58
- << 9155.36 << 9199.46 << 10 << 8 << 3 << 1 << 0;
- areaSeries = new QAreaSeries(m_series, series1);
- areaSeries->setBrush(QBrush(QColor(Qt::red)));
- addSeries(areaSeries);
- setAxisX(m_axisX, m_series);
- setAxisY(m_axisY, m_series);
- setAxisX(m_axisX, series1);
- setAxisY(m_axisY, series1);
- m_axisX->setTickCount(5);
- m_axisX->setRange(0, 5);
- m_axisY->setRange(0, 9199.4);
- connect(&m_timer, &QTimer::timeout, this, &Chart::handleTimeout);
- m_timer.setInterval(1000);
- m_timer.start();
- }
- void Chart::setAxisGridLineOn(bool isOn)
- {
- m_axisX->setGridLineVisible(isOn);
- m_axisY->setGridLineVisible(isOn);
- }
- void Chart::setLegendOn(bool isOn)
- {
- if (isOn) {
- legend()->show();
- } else {
- legend()->hide();
- }
- }
- void Chart::setPenStyle(QColor color, int width)
- {
- QPen pen(color);
- pen.setWidth(width);
- m_series->setPen(pen);
- }
- void Chart::setLabelsOn(bool isOn)
- {
- m_axisX->setLabelsVisible(isOn);
- m_axisY->setLabelsVisible(isOn);
- }
- void Chart::handleTimeout()
- {
- qreal x = plotArea().width() / m_axisX->tickCount();
- qreal y = (m_axisX->max() - m_axisX->min()) / m_axisX->tickCount();
- m_x += y;
- if (!testList.isEmpty()) {
- m_y = testList.first();
- testList.takeFirst();
- } else {
- m_timer.stop();
- }
- qDebug() << "m_x: " << m_x << " " << "m_y: " << m_y;
- m_series->append(m_x, m_y);
- series1->append(m_y, 0);
- scroll(x, 0);
- }
- Chart::~Chart()
- {
- }
main.cpp:
- #include "chart.h"
- #include <QChartView>
- #include <QApplication>
- #include <QWidget>
- #include <QHBoxLayout>
- #include <QGraphicsLayout>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QWidget window;
- window.setWindowTitle("Test Chart Widget");
- Chart *chart = new Chart;
- chart->setLabelsOn(true);
- chart->setPenStyle(Qt::blue, 1);
- chart->setLegendOn(false);
- chart->setBackgroundRoundness(1);
- chart->setAxisGridLineOn(true);
- //chart->setContentsMargins(-60, -25, -25, -40);
- chart->layout()->setContentsMargins(0, 0, 0, 0);
- chart->setAnimationOptions(QChart::AllAnimations);
- QChartView chartView(chart);
- chartView.setStyleSheet("border: 1px solid blue;");
- chartView.setRenderHint(QPainter::Antialiasing);
- QHBoxLayout *layout = new QHBoxLayout();
- layout->setContentsMargins(QMargins());
- layout->addWidget(&chartView);
- window.setLayout(layout);
- window.setMinimumSize(810, 400);
- window.show();
- return a.exec();
- }
Как можно исправить эту проблему? Спасибо за помощь.
2
252
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
День добрый.
Собственнно говоря, а как он должен рисоваться вы даже и не описали. Никто не знает, чего именно вы хотите от этого графика.
Здравствуйте!
Я хочу сделать что-то такое чтобы мониторить сеть когда загружается файл: https://i.stack.imgur.com/DpKpF.png . Сначала делал по примеру Dynamicspline для того чтобы график двигался: https://doc.qt.io/qt-5/qtcharts-dynamicspline-example.html . Получился такой график: https://ddgobkiprc33d.cloudfront.net/0ad813d3-4182-4c56-b67f-5df9bc2e3b99.png . Чтобы добавить фон, использовал QAreaSeries и график выходит такой: https://evileg.com/media/users/Cobra91151/photos/photo.jpg . Я думаю что расчеты у меня неверны. Спасибо за помощь.
Также проверил через debug режим и увидел эти сообщения: "Can not find series on the chart."
"Can not find series on the chart.". Думаю что это связано с QLineSeries *series1;
Но, пока не могу определить где именно проблема.
Хорошо. После работы сегодня гляну ваш код внимательно.
Здравствуйте!
Я решил проблему используя QtNetworkMonitor пример с GitHub . Вопрос закрыт.