标签: qchart

如何使用Qt Designer在表单中插入QChartView?

我想添加QChart到表单中.但我在Widget Box中找不到它.所以我在代码中创建了它.我怎样才能将其插入QWidget或者QFrame还是其他什么东西?

我想在QtDesigner中设置该小部件的区域.

qt qt-designer qt5 qchart qchartview

16
推荐指数
1
解决办法
8031
查看次数

QPolarChart的反转轴

我需要修改QPolarChart来创建Satellite SkyPlot

为此,我需要反转径向轴(高程轴),以便将90放置在原点上,将0放置在外圈上。

成员列表中,QValueAxis我找到了method setReverse,这似乎可以满足我的需要。

但是,setReverse(true)在高程轴上进行操作并不会像我期望的那样翻转轴。

那我该如何反转轴?

极坐标图

这是运行此示例所需的最少代码:

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QPolarChart>
#include <QtCharts/QValueAxis>
#include <QScatterSeries>

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QtCharts::QPolarChart *chart = new QtCharts::QPolarChart();
    chart->legend()->hide();

    QScatterSeries *series = new QScatterSeries();
    for (int i = 0; i < 360; i += 10) {
        series->append(i, i);
    }
    chart->addSeries(series);

    QValueAxis *azimuthAxis = new QValueAxis();
    azimuthAxis->setRange(0, 360);
    azimuthAxis->setTickCount(9);
    azimuthAxis->setLabelFormat("%d");
    azimuthAxis->setLabelsVisible(true);
    chart->addAxis(azimuthAxis, QPolarChart::PolarOrientationAngular);

    QValueAxis …
Run Code Online (Sandbox Code Playgroud)

c++ qt qchart

10
推荐指数
1
解决办法
382
查看次数

在 QChartView 上实现选择

我想实现基于QChartQChartView的图表选择。这些类的家族有一个很大的优势 -易于使用 openGL动画,例如:

QLineSeries *series = new QLineSeries();
series->setUseOpenGL(true); // <==

QChart *chart = new QChart();
chart->addSeries(series);
chart->setAnimationOptions(QChart::AllAnimations); // <==

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);    
Run Code Online (Sandbox Code Playgroud)

QChartView类提供了有用的缩放功能- QChartView :: setRubberBand()

chartView->setRubberBand(QChartView::RectangleRubberBand);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

主要问题是橡皮筋只能用于缩放,但我需要实现它用于不缩放的水平选择,因为该功能通常在音频编辑器中实现: 在此处输入图片说明

现在,当我继承 QChartView 时,我可以在选择后禁用缩放:

class ChartView : public QChartView
...
bool m_drawRubberBand;
QRubberBand m_rubberBand;
...

ChartView::ChartView(QChart *chart, QWidget *parent) 
    : QChartView(chart, parent)
{
    setRubberBand(QChartView::HorizontalRubberBand);
}
...

// Just copy-paste from the Qt 5 sources - file \Src\qtcharts\src\charts\qchartview.cpp:
/*! …
Run Code Online (Sandbox Code Playgroud)

plot qt qt5 qtcharts qchart

6
推荐指数
1
解决办法
3294
查看次数

将数据添加到QLineSeries后如何更新/重画QChart?

我正在生成一些我想使用QChart和朋友绘制的数据。这是我第一次使用QChart,因此基本上我所做的是复制QLineSeries示例并根据需要进行修改。我当前的代码如下所示:

    quint64 last=0;
    quint64 *lastp=&last;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , series( nullptr )
{
    ui->setupUi(this);
    QChart *chart = new QChart();
    series=new QLineSeries(chart);
    chart->legend()->hide();
    chart->addSeries(series);
    chart->createDefaultAxes();
    chart->setTitle("Simple line chart example");
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    setCentralWidget(chartView);
    GeneticTask *gTask = new GeneticTask();
    connect(gTask, &GeneticTask::point, this, [=](QPointF pt) {
        // New point added to series
        *series<<pt;
        // Limit updates to once per second
        quint64 now=QDateTime::currentMSecsSinceEpoch();
        if(now-(*lastp)>1000) {
            qDebug()<<"UPDATE";
            // [A] WHAT TO PUT …
Run Code Online (Sandbox Code Playgroud)

c++ qt updates qt5 qchart

5
推荐指数
1
解决办法
7640
查看次数

QChart实时表现

我正在使用 QChart 作为应用程序。该应用程序需要实时显示一些数据。将有一张图表和图表中的24个系列。每个通道的数据速率为400pts 。

我使用另一个线程来接收和处理接收到的数据,并将处理后的数据发送到插槽以附加数据以更新图表系列。

我参考了https://doc.qt.io/qt-5/qtcharts-audio-example.html。在我的例子中,每个系列限制为2000点,如果系列中的点数少于2000,则将新点添加到系列中,如果系列中的点数超过2000,则删除第一个点,将其余数据向左移动并在最后添加新点。这将使图表看起来像是从右向左移动。

为了获得良好的性能,我还使用了series->replace()series->setUseOpenGL(true)

我的问题是应用程序启动后很快就会被冻结。我尝试删除更新图表的代码,一切看起来都很好。谁能帮助我如何提高更新图表的性能?

谢谢!

c++ qt qt5 qchart

5
推荐指数
1
解决办法
5134
查看次数

在 openGL 开启的情况下使用 QLineSeries 时,无法正确将 QChartView 保存为图像

我正在尝试创建一个可以绘制大型数据集的应用程序(因此使用 OpenGL 对我来说很重要)。我用QChartView,QChartQLineSeries. 也为QLineSeries我打开使用 openGL。但是当我尝试将图表保存为图像时,我得到的绘图没有数据。我知道使用 openGL 时它会在图表绘图区域顶部QLineSeries创建一个,但我不知道如何访问它。QOpenGLWidget

那么问题是:如何将图表另存为带有绘制线条的图像?

一些图片:

我想要什么(不使用 openGL 绘图):

不使用 openGL 绘图

我得到什么(用 openGL 绘图):

使用 openGL 绘图

这是代码示例:

主窗口构造函数:

chartView = new QChartView(generate_sin_chart(), ui->centralWidget);
ui->centralWidget->layout()->addWidget(chartView);
Run Code Online (Sandbox Code Playgroud)

生成正弦图():

QLineSeries *series = new QLineSeries();
series->setUseOpenGL(true); //this line cause a problem

constexpr double PI = 3.14159265359;
for(int i = 0; i < 100; ++i)
{
    double temp = i*PI/6;
    series->append(temp, sin(temp));
}

QChart *chart = new QChart();
chart->legend()->hide();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("Simple line chart example"); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl qt qchart

4
推荐指数
1
解决办法
3819
查看次数

如何在Qt中隐藏QBarCategoryAxis中的一些类别

QBarCategoryAxis当我创建图表时,我没有找到隐藏某些类别的方法。如果我不指定轴的类别,默认情况下类别将是从 1 到QBarSetsize。如果我指定类别,我如何才能仅显示 axis 中的某些类别。例如:如何只显示第一个和最后一个类别以及中间的类别QBarCategoryAxis

编辑:
目前我得到的是这样的:在此输入图像描述

我有一个QBarSet有 6 个元素的。而且我没有设置类别文本,所以默认情况下这些类别文本是从1到6。我想要的是显示一些类别文本,比如只显示1、3、6和其余文本(2 , 4, 5) 被隐藏。

我为什么要这样做?
因为当QBarSet元素较多并且我自己指定类别文本时,通常我需要最大化窗口,以便可以看到 axisX 中显示的所有类别文本。但我只希望图表具有固定的大小,因此对于文本,我只希望显示其中的一部分。
顺便说一句,如果一个栏集有很多元素,这将是这样的,并且在最大化窗口之前,下面的文本不会完整显示。 在此输入图像描述
编辑2:
这就是我想要的,我希望图表看起来像这样:在此输入图像描述

正如您所看到的,在 x 轴下方,只有 5 个文本。

c++ qt qt5 qchart

4
推荐指数
1
解决办法
2174
查看次数

qt 图表删除标题/图例/的空间

我想在 QChartView 中显示 QPolarChart。

除了 QPolarChart 之外,我不会添加标题或图例。不幸的是,当我添加图表时,QPolarChart 周围有一些空白。我猜这是标题和/或图例的空间......

有没有办法减少这个空间?

我已经用过

chart->layout()->setContentsMargins(0, 0, 0, 0);
chart->setBackgroundRoundness(0);
Run Code Online (Sandbox Code Playgroud)

这有点帮助。

我想减少红边:

图像

c++ qt qtcharts qchart

4
推荐指数
1
解决办法
3077
查看次数

QT在其他小部件中插入小部件

我用qt Creator创建了一个UI,在这个UI中只有一个按钮和一个小部件(让我们分别调用它按钮和char_container); 我需要在chart_container中以编程方式添加chartview.我没有更改默认布局.

我尝试了以下代码,但它不起作用:

void MainWindow::button_slot(){
    QtCharts::QChart *chart = new QtCharts::QChart();
    QtCharts::QChartView *chartView = new QtCharts::QChartView(chart);
    chartView->setParent(ui->chart_container);
    this.repaint();
}
Run Code Online (Sandbox Code Playgroud)

c++ qt qwidget qt5 qchart

2
推荐指数
1
解决办法
2153
查看次数

使用 Qt Designer 时显示 PySide2 QCharts

我有一个与这里的问题类似的问题:How to insert QChartView in form with Qt Designer?

所以我在 Qt Designer 中创建了我的 UI 的 MainWindow 并且我试图让一个QtChart显示在我的窗口中的一个选项卡中。我正在将 .ui 文件导入 python 程序,到目前为止我可以让主窗口正常显示,但不能正常显示图表。我花了一天的大部分时间尝试按照上述答案中列出的说明进行操作,但到目前为止,我还无法将我升级的小部件正确导入到我的主程序中。我一直在想,部分原因是否是我尝试在 Qt 的 Python 版本(即 PySide2)而不是 C++ 版本中执行此操作,这个答案可能是为之编写的。

我已经尝试使用 aQWidget和推荐QGraphicsView作为我的基础来提升我QChartView的目标,但到目前为止,每次尝试都会给我一个错误: "QFormBuilder was unable to create a custom widget of the class 'QChartView'; defaulting to base class 'QWidget'."我做错了什么?

就像链接的问题/答案状态一样,我将我的升级小部件设置为“升级类名称”QChartView和“头文件” QtCHarts。下面是我的 Python 程序的基本代码(一开始忽略我奇怪的导入,因为这是我正在处理的一个单独的问题,除非我以这种方式格式化它们,否则我的程序将找不到类导入。)

任何帮助将不胜感激!谢谢!

import sys
import PySide2.QtCore as Qt_Core
import PySide2.QtGui as Qt_Gui
import PySide2.QtWidgets as Qt_Widgets
import …
Run Code Online (Sandbox Code Playgroud)

python qt-designer pyside2 qchart qchartview

2
推荐指数
1
解决办法
1665
查看次数

标签 统计

qchart ×10

qt ×9

c++ ×7

qt5 ×6

qchartview ×2

qt-designer ×2

qtcharts ×2

opengl ×1

plot ×1

pyside2 ×1

python ×1

qwidget ×1

updates ×1