Russian Qt Forum
Ноябрь 24, 2024, 06:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: resizeEvent для QChart  (Прочитано 3843 раз)
oBOXPOH
Гость
« : Май 12, 2017, 10:14 »

Всем здравствуйте!

Сейчас стараюсь сделать resizeEvent хотя бы для какого-то элемента.

У меня есть мною созданный ClassChart, который наследует QChart. В нём есть конструктор, который создаёт 2 элемента QGraphicsSimpleTextItem, а также обработчик resizeEvent. Код далее.

Заголовочный:
Код:
#ifndef CLASSCHART_H
#define CLASSCHART_H

#include <QWidget>
#include <QtCharts>
#include <QGraphicsTextItem>

namespace Ui {
class ClassChart;
}

class ClassChart : public QChart
{
    Q_OBJECT

public:
    explicit ClassChart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
    ~ClassChart();

protected:
    void resizeEvent(QResizeEvent *event);

private:
    QGraphicsSimpleTextItem *chartCoordX, *chartCoordY;
};

#endif // CLASSCHART_H

Исходник:
Код:
#include "classchart.h"

ClassChart::ClassChart(QGraphicsItem *parent, Qt::WindowFlags wFlags)
    : QChart(QChart::ChartTypeCartesian, parent, wFlags)
{
    chartCoordX = new QGraphicsSimpleTextItem(this);
    chartCoordX->setText(tr("X: "));
    chartCoordY = new QGraphicsSimpleTextItem(this);
    chartCoordY->setText(tr("Y: "));
}

ClassChart::~ClassChart(){}



void ClassChart::resizeEvent(QResizeEvent *event)
{
    chartCoordX->setPos(size().width()/2 - 50, size().height());
    chartCoordX->setPos(size().width()/2 + 50, size().height());
}

По идее, когда этот ClassChart изменяет размеры, должен вызываться обработчик события QResizeEvent, но этого не происходит - 2 элемента для координат всегда находятся в левом верхнем углу относительно ClassChart.

Если лезть ещё глубже, то у меня есть главное окно, в котором используется созданный виджет, в котором есть этот ClassChart. При изменении размеров главного окна событие в ClassChart не приходит.

Помогите, пожалуйста. Я уже вообще жесть напотел!
Записан
VPS
Гость
« Ответ #1 : Май 12, 2017, 10:59 »

Если Вы используете современный синтаксис, то поставьте в конце объявления метода "resizeEvent" спецификатор "override". Думаю, что дальше поймёте в чём дело.
Записан
oBOXPOH
Гость
« Ответ #2 : Май 12, 2017, 11:41 »

Если Вы используете современный синтаксис, то поставьте в конце объявления метода "resizeEvent" спецификатор "override". Думаю, что дальше поймёте в чём дело.
Честно, я уже это пробовал, но пишет ошибку, что функция не является перегруженной. А это, скорее всего, потому, что в QChart, от которого я наследую свой класс, метод не является виртуальным.
Есть какие-нибудь ещё идеи? Синтаксис, кстати, я, вроде, использую стандартный.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Май 12, 2017, 11:56 »

[disclaimer]
Не используйте QChart, т.к. он ооочень медленный и ооочень требовательный к ресурсам.
Используйте Qwt (предпочтительно) или QCustomPlot (на худой конец).
[/disclaimer]
Записан

ArchLinux x86_64 / Win10 64 bit
VPS
Гость
« Ответ #4 : Май 12, 2017, 12:00 »

А это, скорее всего, потому, что в QChart, от которого я наследую свой класс, метод не является виртуальным.
Пишет это из-за того, что у класса QChart другой тип параметра в методе resizeEvent (он наследует метод от класса QGraphicsWidget):
Код:
resizeEvent(QGraphicsSceneResizeEvent *event)
Записан
oBOXPOH
Гость
« Ответ #5 : Май 12, 2017, 12:20 »

А это, скорее всего, потому, что в QChart, от которого я наследую свой класс, метод не является виртуальным.
Пишет это из-за того, что у класса QChart другой тип параметра в методе resizeEvent (он наследует метод от класса QGraphicsWidget):
Код:
resizeEvent(QGraphicsSceneResizeEvent *event)
Да, сработало! Огромное спасибо! Наверное, да, QResizeEvent не относится к таким графическим виджетам, как QChart. Для QChart надо использовать resizeEvent(QGraphicsSceneResizeEvent *event).

Стало значительно яснее и понятнее! Ещё раз спасибо большое!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.