所有Qt图表似乎都有边距和圆角.
如何删除?
我希望白色区域填满整个对话框.我在Qt文档中找不到任何信息.我找到了一个没有这个间距的示例的屏幕截图.但我找不到禁用它的代码.
我的初始化代码如下所示:
QPieSeries *series = new QPieSeries();
series->append("Jane", 1);
series->append("Joe", 2);
series->append("Andy", 3);
series->append("Barbara", 4);
series->append("Axel", 5);
QChart *chart = new QChart();
chart->addSeries(series);
QChartView *chartView = new QChartView(chart);
chartView->setBackgroundBrush(Qt::red);
chartView->setRenderHint(QPainter::Antialiasing);
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(400, 300);
window.show();
Run Code Online (Sandbox Code Playgroud) 我正在使用QtCharts.
我需要在追加值后重新调整两个轴.我附加的值不在0和1之间,也不是从1970年开始.
我的对话框的构造函数代码如下所示:
m_series = new QLineSeries;
m_series->setName(name);
auto chart = new QChart;
chart->legend()->setVisible(false);
chart->addSeries(m_series);
m_axisX = new QDateTimeAxis;
//m_axisX->setFormat("HH:mm:ss");
m_axisX->setTitleText(tr("Zeitpunkt"));
chart->addAxis(m_axisX, Qt::AlignBottom);
m_series->attachAxis(m_axisX);
auto axisY = new QValueAxis;
axisY->setTitleText(unit);
chart->addAxis(axisY, Qt::AlignLeft);
m_series->attachAxis(axisY);
auto chartView = new QChartView(chart, this);
chartView->setRenderHint(QPainter::Antialiasing);
Run Code Online (Sandbox Code Playgroud)
我的MainWindow发出包含新值的信号.多个打开的图表对话框连接到该信号.
void ChartDialog::liveUpdate(const RealTimeMeasureRegisters ®isters)
{
auto result = ((®isters)->*m_methodPtr)();
m_series->append(registers.timestamp(), result);
}
Run Code Online (Sandbox Code Playgroud)
是否有一些简单的方法告诉QDateTimeAxis(在我的情况下m_axisX)自动调整到新值?
QDateTimeAxis :: setRange()看起来不太好,因为我需要设置最小值和最大值.
有没有办法在绘图区域上获得鼠标坐标QChartView?优选地,在轴单元中.目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘制的对象.
我找不到任何内置函数QChartView,所以我试图QChartView::mouseMoveEvent(QMouseEvent *event)用来尝试计算绘图区域中的结果位置.问题是我无法获得绘图区域坐标系的任何参考.我已经尝试过使用了mapToScene,mapToItem而且mapToParent反过来mapFrom...我可以抓住所有对象试图做到这一点,但无济于事.
我发现这QChartView::chart->childItems()[2]确实是绘图区域,不包括轴和轴标签.然后,我可以调用QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)十字形仅出现在绘图区域而不是相邻对象上.但是,我尝试的任何东西似乎都没有正确引用这个对象的坐标系.
因为这是我的第一个问题,所以我想说 StackOverflow 帮助了我无数次。谢谢你。
现在我的问题。我目前正在尝试在 Qt 5.8 中实现一个简单的数据采集应用程序。该应用程序必须与 DSP 通信并以 100Hz 到 10kHz 的速率获取一些电压。由于我需要对获取的电压进行一些额外的计算,因此我认为在与 GUI 线程不同的线程中进行数据获取和操作是个好主意。
数据采集和附加计算在单独的线程中工作得很好。我的问题是,使用 QtCharts 异步显示工作线程结果的正确方法是什么?
任何建议将不胜感激。
此致,
克拉斯提夫
我想实现基于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在添加新点后添加新点QLineSeries.
目标是使用它来显示以高速率(高达400 000点/秒)采集的数据,并在点到达数据包时更新绘图.
这是我一直在研究的测试程序:
主窗口:
class MainWindow : public QMainWindow{
Q_OBJECT
QLineSeries *series;
QChart *chart;
QChartView *chartView;
int cnt=0;
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pB_Start_clicked();
private:
Ui::MainWindow *ui;
};
Run Code Online (Sandbox Code Playgroud)
MainWindow构造函数:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){
ui->setupUi(this);
series = new QLineSeries();
chart = new QChart();
chart->setBackgroundRoundness(0);
chart->addSeries(series);
// A bunch of formatting
chart->setBackgroundVisible(false);
chart->setMargins(QMargins(0,0,0,0));
chart->layout()->setContentsMargins(0,0,0,0);
chart->legend()->hide();
chart->setPlotAreaBackgroundBrush(QBrush(Qt::black));
chart->setPlotAreaBackgroundVisible(true);
chartView = new QChartView(chart);
ui->gridLayout->addWidget(chartView);
}
Run Code Online (Sandbox Code Playgroud)
还有一个pushButton clicked事件可以为系列添加点数:
void MainWindow::on_pB_Start_clicked(){
series->append(cnt,qSin(cnt/10));
cnt++; …Run Code Online (Sandbox Code Playgroud) 有什么方法可以为添加到QChart的某些QAbstractSeries订购z-index?看来QChart是在内部完成的。
我很难让 QtCharts 在我的电脑上工作。我想我错过了这个概念。我的电脑上安装了 Qt 5.8。我正在使用 Visual Studio 进行所有开发。谷歌搜索一段时间后,我注意到有人说你需要导入 QtChart 模块,但我不明白:
1) 为什么 QtCharts 不是我 Qt 安装的一部分?
2)如果我必须安装它,我该如何在带有 VS 2017 的 Windows 上安装它?
如果有人可以帮我解决这个问题,我将不胜感激。
谢谢你。
我正在尝试在 qtcharts 上拖动 LineSeries 上的一个点。这是我的代码:
import QtQuick 2.0
import QtCharts 2.0
Item {
anchors.fill: parent
ChartView {
title: "Two Series, Common Axes"
anchors.fill: parent
ValueAxis {
id: axisX
min: 0
max: 10
tickCount: 5
}
ValueAxis {
id: axisY
min: -0.5
max: 1.5
}
LineSeries {
id: series1
axisX: axisX
axisY: axisY
onPressed: console.log("Pressed: " + point.x + ", " + point.y);
onReleased: console.log("Released: " + point.x + ", " + point.y);
}
}
// Add data dynamically to the …Run Code Online (Sandbox Code Playgroud) 我能够使用 Python 中的 QtCharts 库生成图表,但我似乎不知道如何向我的图表添加轴标签...
我看到了 QValueAxis 的 setLabelFormat() 功能,但没有看到如何设置文本本身。我确信我缺少一些简单的东西。
这是我必须生成图表的代码:
def plotLossesChart(self):
set0 = QBarSet('Conduction Loss')
set1 = QBarSet('Switching Loss')
set0.append([random.randint(0, 10) for i in range(5)])
set1.append([random.randint(0, 10) for i in range(5)])
series = QStackedBarSeries()
series.append(set0)
series.append(set1)
chart = QChart()
chart.addSeries(series)
chart.setTitle('Loss Summary')
chart.setAnimationOptions(QChart.SeriesAnimations)
months = ('Upper FET', 'Lower FET', 'Driver', 'Inductor', 'Cap ESR')
axisX = QBarCategoryAxis()
axisX.append(months)
axisY = QValueAxis()
axisY.setRange(0, 15)
chart.addAxis(axisX, Qt.AlignBottom)
chart.addAxis(axisY, Qt.AlignLeft)
chart.legend().setVisible(True)
chart.legend().setAlignment(Qt.AlignBottom)
return chart
def plotEfficiencyChart(self):
series = QLineSeries()
load = [0, …Run Code Online (Sandbox Code Playgroud)