彩票走势图

C++界面开发Qt示例:条形图数据

转帖|使用教程|编辑:鲍佳佳|2021-08-09 10:45:57.427|阅读 191 次

概述:此示例说明如何使用QAbstractItemModel派生模型作为条形系列的数据。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。

下载Qt6最新试用版

Qt组件推荐:

  • QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面

条形模块 示例

此示例说明如何使用QAbstractItemModel派生模型作为条形系列的数据。

运行示例

要从Qt Creator运行示例,请打开欢迎模式并从示例中选择示例。有关更多信息,请访问构建和运行示例

将数据模型与条形图结合使用

让我们从创建 CustomTableModel 类的实例开始。CustomTableModel 类派生自QAbstractTableModel,它是为本示例而创建的。此类的构造函数使用图表示例所需的数据填充模型的内部数据存储。

m_model = new CustomTableModel;

我们现在有一个模型,其中包含我们希望在图表和QTableView 中显示的数据。首先,我们创建QTableView并告诉它使用模型作为数据源。为了很好地呈现数据,设置了表格视图的最小宽度,并将其标题调整大小模式更改为拉伸。

QTableView *tableView = new QTableView;
tableView->setModel(m_model);
tableView->setMinimumWidth(300);
tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
tableView->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
m_model->setParent(tableView);

现在我们需要一个QChart实例来在图表上显示相同的数据。我们还启用动画。它可以更轻松地查看对模型数据的修改如何影响图表。

QChart *chart = new QChart;
chart->setAnimationOptions(QChart::AllAnimations);

下面代码的第一行创建了新的柱状图系列。变量 firstRow 和 rowCount 用于定义自定义模型映射。自定义映射允许仅从模型中获取部分数据。在这种情况下,从索引为 3 的行开始的 5 行数据。以下三行创建QVBarModelMapper类的实例,并指定条形集的数据应从索引为 1 到 4 的模型的列中获取(包括的)。为了在系列和模型之间建立连接,我们将这两个对象都设置为QVBarModelMapper。

最后将系列添加到图表中。

QBarSeries *series = new QBarSeries;

int first = 3;
int count = 5;
QVBarModelMapper *mapper = new QVBarModelMapper(this);
mapper->setFirstBarSetColumn(1);
mapper->setLastBarSetColumn(4);
mapper->setFirstRow(first);
mapper->setRowCount(count);
mapper->setSeries(series);
mapper->setModel(m_model);
chart->addSeries(series);

为了在QTableView中显示哪些数据对应于哪个条形集,本示例使用表格着色。当系列添加到图表时,它会根据当前选择的主题分配一种颜色。下面的代码从系列中提取该颜色并使用它来创建彩色QTableView。视图的着色不是QChart功能的一部分。

QString seriesColorHex = "#000000";

// get the color of the series and use it for showing the mapped area
QList<QBarSet *> barsets = series->barSets();
for (int i = 0; i < barsets.count(); i++) {
    seriesColorHex = "#" + QString::number(barsets.at(i)->brush().color().rgb(), 16).right(6).toUpper();
    m_model->addMapping(seriesColorHex, QRect(1 + i, first, 1, barsets.at(i)->count()));
}

我们希望在图表的轴上放置类别来描述数据的含义。下一个片段展示了如何做到这一点。

QStringList categories;
categories << "April" << "May" << "June" << "July" << "August";
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
QValueAxis *axisY = new QValueAxis();
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);

为了避免设置QGraphicsScene,我们使用QChartView类为我们完成。所述QChart对象指针被用作一个参数QChartView构造函数。为了使渲染看起来更好,打开抗锯齿并设置图表视图小部件的最小尺寸。

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->setMinimumSize(640, 480);

最后,我们将两个小部件放在一个布局中,并将该布局用作应用程序布局。

QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(tableView, 1, 0);
mainLayout->addWidget(chartView, 1, 1);
mainLayout->setColumnStretch(1, 1);
mainLayout->setColumnStretch(0, 0);
setLayout(mainLayout);

应用程序已准备就绪。尝试修改表格视图中的数据,看看它如何影响图表。

====================================================

想要了解或购买Qt正版授权的朋友,欢迎

Qt技术交流群现已开通,QQ搜索群号“765444821”或者扫描下方二维码即可加入

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP