Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to make the widget to take the whole window with using scene() -> addWidget
QtWS25 Last Chance

How to make the widget to take the whole window with using scene() -> addWidget

Scheduled Pinned Locked Moved Unsolved General and Desktop
qt6chart view
4 Posts 2 Posters 474 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Aminsl
    wrote on last edited by
    #1

    I'm currently working with two sample project in qt : zoomline chart and callouts . I've combined these two projects and instead of using scene() -> addItem(m_chart) , I used scene() -> addWidget(chartView) in order to use the whole chartview and it's gesture handlers. But I got this:
    Capture03.PNG

    I don't know really what to do , when I use addItem() It all works well but I need to use chartView so I need the addWidget() method.

    Here is my View.cpp code , if it helps :

    #include "view.h"
    #include <QtGui/QResizeEvent>
    #include <QtWidgets/QGraphicsScene>
    #include <QtCharts/QChart>
    #include <QtCharts/QLineSeries>
    #include <QtCharts/QSplineSeries>
    #include <QtWidgets/QGraphicsTextItem>
    #include "callout.h"
    #include "chart.h"
    #include "chartview.h"
    #include <QtGui/QMouseEvent>
    #include <QtCore/QtMath>
    #include <QtCore/QRandomGenerator>
    
    View::View(QWidget *parent)
        : QGraphicsView(new QGraphicsScene, parent),
        m_coordX(0),
        m_coordY(0),
        m_chart(0),
        m_tooltip(0)
    {
        setDragMode(QGraphicsView::NoDrag);
        setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    
        //QLineSeries scope code
        QLineSeries *series = new QLineSeries();
        for (int i = 0; i < 500; i++) {
            QPointF p((qreal) i, qSin(M_PI / 50 * i) * 100);
            p.ry() += QRandomGenerator::global()->bounded(20);
            *series << p;
        }
    
        m_chart = new Chart();
        m_chart->addSeries(series);
        m_chart->setTitle("Zoom in/out example");
        m_chart->setAnimationOptions(QChart::SeriesAnimations);
        m_chart->legend()->hide();
        m_chart->createDefaultAxes();
    
        ChartView *chartView = new ChartView(m_chart);
        chartView->setRenderHint(QPainter::Antialiasing);
    
        scene() -> addWidget(chartView);
    
        m_coordX = new QGraphicsSimpleTextItem(m_chart);
        m_coordX->setPos(m_chart->size().width()/2 - 50, m_chart->size().height());
        m_coordX->setText("X: ");
        m_coordY = new QGraphicsSimpleTextItem(m_chart);
        m_coordY->setPos(m_chart->size().width()/2 + 50, m_chart->size().height());
        m_coordY->setText("Y: ");
    
        connect(series, &QLineSeries::clicked, this, &View::keepCallout);
        connect(series, &QLineSeries::hovered, this, &View::tooltip);
    
        this->setMouseTracking(true);
    }
    
    void View::resizeEvent(QResizeEvent *event)
    {
        if (scene()) {
            scene()->setSceneRect(QRect(QPoint(0, 0), event->size()));
            m_chart->resize(event->size());
            m_coordX->setPos(m_chart->size().width()/2 - 50, m_chart->size().height() - 20);
            m_coordY->setPos(m_chart->size().width()/2 + 50, m_chart->size().height() - 20);
            const auto callouts = m_callouts;
            for (Callout *callout : callouts)
                callout->updateGeometry();
        }
        QGraphicsView::resizeEvent(event);
    }
    
    void View::mouseMoveEvent(QMouseEvent *event)
    {
        m_coordX->setText(QString("X: %1").arg(m_chart->mapToValue(event->pos()).x()));
        m_coordY->setText(QString("Y: %1").arg(m_chart->mapToValue(event->pos()).y()));
        QGraphicsView::mouseMoveEvent(event);
    }
    
    void View::keepCallout()
    {
        m_callouts.append(m_tooltip);
        m_tooltip = new Callout(m_chart);
    }
    
    void View::tooltip(QPointF point, bool state)
    {
        if (m_tooltip == 0)
            m_tooltip = new Callout(m_chart);
    
        if (state) {
            m_tooltip->setText(QString("X: %1 \nY: %2 ").arg(point.x()).arg(point.y()));
            m_tooltip->setAnchor(point);
            m_tooltip->setZValue(11);
            m_tooltip->updateGeometry();
            m_tooltip->show();
        } else {
            m_tooltip->hide();
        }
    }
    
    
    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Based on a quick look at the QChartView documentation, you should directly set your QChart object on the scene and not use QChartView.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      A 1 Reply Last reply
      0
      • SGaistS SGaist

        Hi,

        Based on a quick look at the QChartView documentation, you should directly set your QChart object on the scene and not use QChartView.

        A Offline
        A Offline
        Aminsl
        wrote on last edited by
        #3

        @SGaist well , I did it but I need to set the ChartView on the scene in order to have my gesture handlers. Is there any way to set the ChartView on the scene ?

        SGaistS 1 Reply Last reply
        0
        • A Aminsl

          @SGaist well , I did it but I need to set the ChartView on the scene in order to have my gesture handlers. Is there any way to set the ChartView on the scene ?

          SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Then why don't you resize the widget item created to fit the view ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          1

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved