- 1. Жоба құрылымы
- 2. виджет.h
- 3. widget.cpp
Динамикалық түрде жасалған графиктердің көп санын қосу қажет болғанда графиктерді құру опциясын талдап көрейік. Осыған ұқсас сабақ виджеттерді динамикалық құру туралы мақалада болды, онда тек [QPushButton] түймелері қосылды (https://evileg.com/en/post/77/) . Дәл осындай жұмыс әдісі мұнда пайдаланылады. Жад үйіндіде бөлінеді, график виджеті конфигурацияланады және виджет графиканың өзін қолданба терезесінде көрсету үшін QScrollArea немесе QLayout ішіне қосылады.
Қолданба келесідей болады:
Бұл мысал көлденең орналасуға 5 диаграмма қосады ( QHBoxLayout ). Сондай-ақ мысалда кейбір ақпаратты қамтитын құралдар кеңесі қосылады. Мысалы, графиктің саны және оқу саны.
Жоба құрылымы
- Graphs.pro - жоба профилі;
- widget.h - қолданба терезесінің тақырып файлы;
- widget.cpp - қолданба терезесінің бастапқы код файлы;
- widget.ui - өтінім терезесінің пішіні;
- main.cpp - негізгі функциясы бар файл.
main.cpp әдепкі бойынша жасалады және жобада өзгермейді. widget.ui файлында тек QHBoxLayout орналасуын жасау керек. Мұны Qt графикалық дизайнері арқылы жасауға болады.
Жоба профиліне диаграммалар модулін қосу керек (ол алдын ала орнатылған болуы керек; QtCharts Qt5.7 бастап алдын ала құрастырылған кітапханалар ретінде қол жетімді).
QT += charts
widget.h тақырып файлына қосымша өзгертулер жасалмаған. Барлық код widget.cpp. файлында болады
виджет.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; }; #endif // WIDGET_H
widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QLogValueAxis> #include <QLineSeries> #include <QValueAxis> #include <QChart> #include <QChartView> #include <math.h> static int randomBetween(int low, int high, int seed) { qsrand(seed); // Установка базового числа для отсчёта рандома в qrand return (qrand() % ((high + 1) - low) + low); } using namespace QtCharts; Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // Инициализирующее число для установки базы рандома в qrand int seed = 0; for (int i = 0; i < 5; ++i) { // Создаём представление графика QChartView *chartView = new QChartView(this); // Добавляем его в горизонтальный Layout ui->horizontalLayout->addWidget(chartView); // Создаём случайную синусоиду seed = randomBetween(0, 100, seed); QLineSeries *series = new QLineSeries(); int k = 0; while (k <= 100) { *series << QPointF(sin((seed+ k)*0.1), k); ++k; } // Создаём график и добавляем в него синусоиду QChart *chart = new QChart(); chart->addSeries(series); chart->legend()->hide(); chart->setTitle("Graphic"); // Добавим всплывающую подсказку для графика chart->setToolTip(QString("График №%1\n" "Количество отсчётов %2").arg(i + 1).arg(k)); // Настройка осей графика QValueAxis *axisX = new QValueAxis(); axisX->setTitleText("x, м"); axisX->setLabelFormat("%i"); axisX->setTickCount(1); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); QValueAxis *axisY = new QValueAxis(); axisY->setTitleText("t, мс"); axisY->setLabelFormat("%g"); axisY->setTickCount(5); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY); // Устанавливаем график в представление chartView->setChart(chart); } } Widget::~Widget() { delete ui; }
Сделайте, пожалуйста пример, где обновление уже существующего графика
Здравствуйте! Можно ли расширить данный пример создания графиков печатью их на принтере. Другими словами, как распечатать эти 5 графиков на принтере, чтобы изображение на листе бумаги было таким же, как на главном окне программы?