我想添加QChart到表单中.但我在Widget Box中找不到它.所以我在代码中创建了它.我怎样才能将其插入QWidget或者QFrame还是其他什么东西?
我想在QtDesigner中设置该小部件的区域.
我需要修改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) 我想实现基于QChart和QChartView的图表选择。这些类的家族有一个很大的优势 -易于使用 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) 我正在生成一些我想使用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) 我正在使用 QChart 作为应用程序。该应用程序需要实时显示一些数据。将有一张图表和图表中的24个系列。每个通道的数据速率为400pts 。
我使用另一个线程来接收和处理接收到的数据,并将处理后的数据发送到插槽以附加数据以更新图表系列。
我参考了https://doc.qt.io/qt-5/qtcharts-audio-example.html。在我的例子中,每个系列限制为2000点,如果系列中的点数少于2000,则将新点添加到系列中,如果系列中的点数超过2000,则删除第一个点,将其余数据向左移动并在最后添加新点。这将使图表看起来像是从右向左移动。
为了获得良好的性能,我还使用了series->replace()和series->setUseOpenGL(true)。
我的问题是应用程序启动后很快就会被冻结。我尝试删除更新图表的代码,一切看起来都很好。谁能帮助我如何提高更新图表的性能?
谢谢!
我正在尝试创建一个可以绘制大型数据集的应用程序(因此使用 OpenGL 对我来说很重要)。我用QChartView,QChart和QLineSeries. 也为QLineSeries我打开使用 openGL。但是当我尝试将图表保存为图像时,我得到的绘图没有数据。我知道使用 openGL 时它会在图表绘图区域顶部QLineSeries创建一个,但我不知道如何访问它。QOpenGLWidget
那么问题是:如何将图表另存为带有绘制线条的图像?
一些图片:
我想要什么(不使用 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) QBarCategoryAxis当我创建图表时,我没有找到隐藏某些类别的方法。如果我不指定轴的类别,默认情况下类别将是从 1 到QBarSetsize。如果我指定类别,我如何才能仅显示 axis 中的某些类别。例如:如何只显示第一个和最后一个类别以及中间的类别QBarCategoryAxis?
编辑:
目前我得到的是这样的:
我有一个QBarSet有 6 个元素的。而且我没有设置类别文本,所以默认情况下这些类别文本是从1到6。我想要的是显示一些类别文本,比如只显示1、3、6和其余文本(2 , 4, 5) 被隐藏。
我为什么要这样做?
因为当QBarSet元素较多并且我自己指定类别文本时,通常我需要最大化窗口,以便可以看到 axisX 中显示的所有类别文本。但我只希望图表具有固定的大小,因此对于文本,我只希望显示其中的一部分。
顺便说一句,如果一个栏集有很多元素,这将是这样的,并且在最大化窗口之前,下面的文本不会完整显示。
编辑2:
这就是我想要的,我希望图表看起来像这样:
正如您所看到的,在 x 轴下方,只有 5 个文本。
我想在 QChartView 中显示 QPolarChart。
除了 QPolarChart 之外,我不会添加标题或图例。不幸的是,当我添加图表时,QPolarChart 周围有一些空白。我猜这是标题和/或图例的空间......
有没有办法减少这个空间?
我已经用过
chart->layout()->setContentsMargins(0, 0, 0, 0);
chart->setBackgroundRoundness(0);
Run Code Online (Sandbox Code Playgroud)
这有点帮助。
我想减少红边:
我用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) 我有一个与这里的问题类似的问题: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)