2020년 3월 26일 목요일

QT : Qwt 및 Qt Creator. 빠르고 쉽습니다 .. part 1



Qwt 및 Qt Creator. 빠르고 쉽습니다. 1 부 : 데이터 시각화 도구



이 기사를 이해하려면 독자는 Qt Creator 환경에서 Windows 애플리케이션을 개발 한 경험이 있어야합니다.
예제는 Qt Creator 3.0.0 (MinGW) 및 Qwt-6.1.0을 사용합니다.


Qwt는 프로그램에서 데이터를 시각화하는 프로세스를 크게 단순화 할 수있는 그래픽 라이브러리입니다. 단순화는 다음과 같습니다. 좌표 스케일, 그리드, 데이터 곡선 등과 같은 디스플레이 요소를 수동으로 처방 할 필요가 없습니다. 이러한 요소의 매개 변수 만 설정하면됩니다.
유추 : Excel에서 그래프를 작성하기 위해 데이터를 선택하고 최소 및 최대 스케일, 곡선 색상, 데이터 레이블 등의 표시 매개 변수를 구성합니다. Excel은 시각화를 담당합니다. 요소 자체는 프로그래밍하지 않습니다.
Qwt를 사용하면 성가신 "제동"없이도 많은 양의 데이터 (200,000 포인트로 작업)를 처리 할 수 ​​있습니다.
이 기사에서는 그래프에 곡선을 표시하고 크기를 조정하고 그래프 주위를 이동하며 커서의 좌표를 봅니다. 따라서 그래프를 표시하고 보는 데 필요한 최소 기능을 구현합니다. 다음 기사에서는 그래픽 편집기에 추가 기능이 제공됩니다.

물론 인터넷에도 비슷한 지침이 있습니다. 그러나 그들 중 아주 적은 수가 있습니다. Qwt와 관련된 다양한 문제를 해결하는 데 대한 많은 정보가 있으며, 이는 이미 라이브러리 작업에 대한 기본 기술이 이미 강한 프로그래머에게만 유용합니다. 이 기사에서는 간단한 그래프 시각화 도구를 만들 수있는 서로 다른 코드 예제를 수집했습니다.
아래로 내려 갑시다.

1 단계 : Qwt를 Qt Creator에 연결
(Win 7 x64 및 Win 8.1 x64에서 테스트)

  • Qt Creator 3.0.0 (MinGW)을 설치하십시오. 기본 디렉토리를 변경하지 않았습니다.
  • Qwt-6.1.0을 다운로드하여 루트 디렉토리 C : \에 압축을 푸십시오. 다른 디렉토리로 압축을 풀 때 이상한 오류가 발생합니다.
  • “내 컴퓨터”를 마우스 오른쪽 버튼으로 클릭하고“시스템”을 선택하십시오. 다음으로“고급 설정”을 선택하고“환경 변수”버튼을 클릭하십시오. "시스템 변수"목록에서 경로를 강조 표시하고 "편집"을 클릭하십시오.
  • “;”표시 마지막 레코드 다음에 따옴표없이 다음 텍스트를 추가하십시오.“C : \ Qt \ Qt5.2.0 \ 5.2.0 \ mingw48_32 \ bin; C : \ Qwt-6.1.0-rc3 \ lib ".
  • 여기에서 "사용자 변수"목록에서 "새로 작성"을 클릭하고 다음 변수를 추가하십시오.
    이름 : QT_PLUGIN_PATH
    값 : C : \ Qwt-6.1.0-rc3 \ 플러그인
    이름 : QMAKEFEATURES
    값 : C : \ Qwt-6.1.0- rc3 \ 기능

    참고 : “C : \ Qwt-6.1.0-rc3”폴더는 아직 존재하지 않습니다. 이후에 생성됩니다. 현재는 "C : \ qwt-6.1-rc3"만 있습니다.
  • 명령 행을 실행하고 "C : \ qwt-6.1-rc3"디렉토리로 이동하십시오.
  • qmake, mingw32-make, mingw32-make install 명령을 입력하고 실행 한 후 기다립니다. 마지막 명령 후에“C : \ Qwt-6.1.0-rc3”폴더가 나타납니다.
  • 컴퓨터를 재부팅하십시오.


2 단계 : Qwt 라이브러리 사용

1 단계 : 환경 준비

  • Qt Creator에서 Qt 위젯 애플리케이션 프로젝트 (QMainWindow 기반 클래스)를 작성하십시오. 내 프로젝트 이름은“Qwt_howTo”였습니다.
  • 프로젝트 파일 트리에서 확장자가“.pro”인 파일을 찾아 아래에“CONFIG + = qwt”줄을 추가하십시오 (이하 인용 부호는 구문의 일부가 아니며 읽기 쉽도록 만 사용됩니다).
  • 프로젝트 이름으로 루트 폴더를 마우스 오른쪽 단추로 클릭하고 "qmake 실행"을 선택하십시오.


Qwt 라이브러리를 사용하려는 각 프로젝트에 대해 2 단계와 3 단계를 수행해야합니다.

2 단계 : Qwt 기능 구현

main.cpp 파일은 변경되지 않습니다. 이 예제에서 코드는 mainwindow.cpp 파일에 작성됩니다. 이것은 완전히 우아하지는 않지만 예제로 받아 들일 수 있습니다.

1. mainwindow.cpp의 시작 부분에 다음 줄을 추가하십시오.
#include <qwt_plot.h>
#include <qwt_plot_grid.h>

#include <qwt_legend.h>

#include <qwt_plot_curve.h>
#include <qwt_symbol.h>

#include <qwt_plot_magnifier.h>

#include <qwt_plot_panner.h>

#include <qwt_plot_picker.h>
#include <qwt_picker_machine.h>


이러한 헤더에 "File not found"라는 문구가 밑줄로 표시되면 1 단계의 3 단계를 완료하지 않은

것입니다 2. 이제 MainWindow 생성자에서만 코드를 작성합니다. 코드를 메소드로 나누는 것이 가능하지만 훈련 예제의 일부로이 작업을 수행하지 않았습니다.

차트의 기본 필드를 작성하십시오.

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

     // Создать поле со шкалами для отображения графика
     // (this) - разместить поле на текущем окне
     // #include <qwt_plot.h>
    QwtPlot *d_plot = new QwtPlot( this );

}


우리는 매력적이지 않은 그림을 컴파일하고 실행하며 봅니다


.
setCentralWidget(d_plot); // привязать поле к границам окна


우리는 시작합니다. 창을 전체 화면으로 확장하려고합니다. 그래프 필드도 적절한 배율로 전체 화면으로 확장됩니다. 나쁘지 않아!


3. 다음 코드 줄을 추가하여 필드를 장식하십시오.
   d_plot->setTitle( "Qwt demonstration" ); // заголовок
    d_plot->setCanvasBackground( Qt::white ); // цвет фона

    // Параметры осей координат
    d_plot->setAxisTitle(QwtPlot::yLeft, "Y");
    d_plot->setAxisTitle(QwtPlot::xBottom, "X");
    d_plot->insertLegend( new QwtLegend() );


    // Включить сетку
    // #include <qwt_plot_grid.h>
    QwtPlotGrid *grid = new QwtPlotGrid(); //
    grid->setMajorPen(QPen( Qt::gray, 2 )); // цвет линий и толщина
    grid->attach( d_plot ); // добавить сетку к полю графика


시작 결과 (필드는 이미 꽤 예쁘다) :



4. 그래프 추가

    // Кривая
    //#include <qwt_plot_curve.h>
    QwtPlotCurve *curve = new QwtPlotCurve();
    curve->setTitle( "Demo Curve" );
    curve->setPen( Qt::blue, 6 ); // цвет и толщина кривой
    curve->setRenderHint
            ( QwtPlotItem::RenderAntialiased, true ); // сглаживание

    // Маркеры кривой
    // #include <qwt_symbol.h>
    QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,
        QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
    curve->setSymbol( symbol );

    // Добавить точки на ранее созданную кривую
    QPolygonF points;

           points << 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 ); // отобразить кривую на графике



결과 :


최소 및 최대 축이 자동으로 결정됩니다. 이것은 즐거운 놀라움입니다! 물론이 줄을 사용하여 이러한 값을 수동으로 설정할 수 있습니다.
d_plot->setAxisScale(QwtPlot::xBottom, 0, 10);


5.이 모든 것이 좋지만 차트에 접근 / 삭제하거나 필드를 이동할 가능성이 있다는 사실에 익숙합니다. 문제 없습니다! 몇 줄만 있으면이 기능이 편집기에 나타납니다.

     // Включить возможность приближения/удаления графика
     // #include <qwt_plot_magnifier.h>
     QwtPlotMagnifier *magnifier = new QwtPlotMagnifier(d_plot->canvas());
     // клавиша, активирующая приближение/удаление
     magnifier->setMouseButton(Qt::MidButton);


     // Включить возможность перемещения по графику
     // #include <qwt_plot_panner.h>
     QwtPlotPanner *d_panner = new QwtPlotPanner( d_plot->canvas() );
     // клавиша, активирующая перемещение
     d_panner->setMouseButton( Qt::RightButton );


스케일 및 이동 :



6. 마지막으로 커서 좌표를 결정하는 기능을 활성화합니다.

    // Включить отображение координат курсора и двух перпендикулярных
    // линий в месте его отображения
    // #include <qwt_plot_picker.h>

     // настройка функций
    QwtPlotPicker *d_picker =
            new QwtPlotPicker(
                QwtPlot::xBottom, QwtPlot::yLeft, // ассоциация с осями
    QwtPlotPicker::CrossRubberBand, // стиль перпендикулярных линий
    QwtPicker::ActiveOnly, // включение/выключение
    d_plot->canvas() ); // ассоциация с полем

    // Цвет перпендикулярных линий
    d_picker->setRubberBandPen( QColor( Qt::red ) );

    // цвет координат положения указателя
    d_picker->setTrackerPen( QColor( Qt::black ) );

    // непосредственное включение вышеописанных функций
    d_picker->setStateMachine( new QwtPickerDragPointMachine() );



결론 :
주로 뷰어의 모양을 조정하는 것으로 구성된 약간의 코딩이 이루어졌으며 기본 기능을 구현했습니다.

다음은 무엇입니까? 이 주제에 관심이 있다면 다음 기사에서 방법에 대해 설명 할 수 있습니다.
1. 상태 표시 줄에 커서의 좌표를 표시하고이 좌표를 별도의 변수에 저장합니다.
2. 마우스를 클릭하여 커서 영역에 포인트를 놓습니다.
3. 컨트롤 버튼과 다른 것을 추가하십시오.

추신 : "C : \ qwt-6.1-rc3 \ examples"폴더에 Qwt의 많은 흥미로운 예의 소스 코드와 .exe 파일이 있습니다. 주석없는 코드.

댓글 없음:

댓글 쓰기