轉帖|使用教程|編輯:鮑佳佳|2021-08-09 10:45:57.427|閱讀 191 次
概述:此示例說明如何使用QAbstractItemModel派生模型作為條形系列的數(shù)據(jù)。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統(tǒng)以及移動操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M的試用版。
Qt組件推薦:
此示例說明如何使用QAbstractItemModel派生模型作為條形系列的數(shù)據(jù)。
要從Qt Creator運行示例,請打開歡迎模式并從示例中選擇示例。有關更多信息,請訪問構建和運行示例。
讓我們從創(chuàng)建 CustomTableModel 類的實例開始。CustomTableModel 類派生自QAbstractTableModel,它是為本示例而創(chuàng)建的。此類的構造函數(shù)使用圖表示例所需的數(shù)據(jù)填充模型的內部數(shù)據(jù)存儲。
m_model = new CustomTableModel;
我們現(xiàn)在有一個模型,其中包含我們希望在圖表和QTableView 中顯示的數(shù)據(jù)。首先,我們創(chuàng)建QTableView并告訴它使用模型作為數(shù)據(jù)源。為了很好地呈現(xiàn)數(shù)據(jù),設置了表格視圖的最小寬度,并將其標題調整大小模式更改為拉伸。
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);
現(xiàn)在我們需要一個QChart實例來在圖表上顯示相同的數(shù)據(jù)。我們還啟用動畫。它可以更輕松地查看對模型數(shù)據(jù)的修改如何影響圖表。
QChart *chart = new QChart; chart->setAnimationOptions(QChart::AllAnimations);
下面代碼的第一行創(chuàng)建了新的柱狀圖系列。變量 firstRow 和 rowCount 用于定義自定義模型映射。自定義映射允許僅從模型中獲取部分數(shù)據(jù)。在這種情況下,從索引為 3 的行開始的 5 行數(shù)據(jù)。以下三行創(chuàng)建QVBarModelMapper類的實例,并指定條形集的數(shù)據(jù)應從索引為 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中顯示哪些數(shù)據(jù)對應于哪個條形集,本示例使用表格著色。當系列添加到圖表時,它會根據(jù)當前選擇的主題分配一種顏色。下面的代碼從系列中提取該顏色并使用它來創(chuàng)建彩色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())); }
我們希望在圖表的軸上放置類別來描述數(shù)據(jù)的含義。下一個片段展示了如何做到這一點。
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對象指針被用作一個參數(shù)QChartView構造函數(shù)。為了使渲染看起來更好,打開抗鋸齒并設置圖表視圖小部件的最小尺寸。
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);
應用程序已準備就緒。嘗試修改表格視圖中的數(shù)據(jù),看看它如何影響圖表。
====================================================
想要了解或購買Qt正版授權的朋友,歡迎
Qt技術交流群現(xiàn)已開通,QQ搜索群號“765444821”或者掃描下方二維碼即可加入
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: