日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

C++ Qt开发:Charts绘制各类图表详解

發布時間:2023/12/29 windows 43 coder
生活随笔 收集整理的這篇文章主要介紹了 C++ Qt开发:Charts绘制各类图表详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹TreeWidgetQCharts的常用方法及靈活運用。

在之前的文章中筆者介紹了如何使用QCharts模塊來繪制簡單的折線圖并對通用API接口進行了概括,本章我們通過在TreeWidget組件中提取數據,并依次實現柱狀圖、餅狀圖、堆疊圖、百分比圖、散點圖等。

1.1 創建柱狀圖

柱狀圖(Bar Chart)用于顯示各類別之間的數量關系。它通過在一個坐標系中繪制垂直的矩形條(柱)來表示數據。每個柱的高度表示相應類別的數量或數值,柱的寬度一般是固定的,類別之間的間隔可以根據需要調整。

柱狀圖主要用于比較不同類別的數值或數量,幫助觀察數據的分布趨勢、對比不同類別的數據大小,以及發現數據之間的關系。柱狀圖通常在橫軸上表示不同的類別,縱軸上表示數量或數值。

以下是柱狀圖的一些主要特點:

  1. 垂直柱狀圖(Vertical Bar Chart):柱狀圖的柱是垂直排列的,縱軸表示數值或數量。
  2. 水平柱狀圖(Horizontal Bar Chart):柱狀圖的柱是水平排列的,橫軸表示數值或數量。
  3. 分組柱狀圖(Grouped Bar Chart):將柱按照類別分組,同一組內的柱一般在相同的位置。
  4. 堆疊柱狀圖(Stacked Bar Chart):將柱疊加在一起,柱的高度表示總和。
  5. 百分比柱狀圖(Percentage Bar Chart):每個柱的高度表示相對于總和的百分比。

柱狀圖是數據可視化中常用的工具之一,易于理解且能夠直觀地傳達信息。在業務、科學研究、金融等領域,柱狀圖被廣泛用于展示數據的分布和趨勢。在Qt中柱狀圖的繪制離不開三個類的支持,其分別是QBarSetQBarSeriesQBarCategoryAxis這三個類提供了用于操作和管理條形圖數據集的方法。

QBarSet類主要用于創建或表示一個柱狀圖的集合元素。以下是關于QBarSet的主要方法的說明和概述,以表格形式呈現:

方法 描述
QBarSet(const QString &label = QString()) 構造函數,創建一個空的 QBarSet 對象,可以通過提供標簽進行初始化。
void append(qreal value) 將一個值添加到數據集的末尾。
void append(const QList<qreal> &values) 將一組值添加到數據集的末尾。
void replace(int index, qreal value) 替換數據集中指定索引位置的值。
void replace(const QList<qreal> &values) 用提供的一組值替換整個數據集。
void clear() 清除數據集中的所有值。
int count() const 返回數據集中值的數量。
bool isEmpty() const 檢查數據集是否為空。
QString label() const 返回數據集的標簽。
void setLabel(const QString &label) 設置數據集的標簽。
qreal at(int index) const 返回數據集中指定索引位置的值。
QList<qreal> values() const 返回包含數據集所有值的列表。

QBarSeries 用于表示條形圖數據系列。以下是 QBarSeries 類的一些主要方法和概述:

方法 描述
QBarSeries(QObject *parent = nullptr) 構造函數,創建一個空的 QBarSeries 對象。
void append(QBarSet *set) 將一個 QBarSet 對象添加到系列的末尾。
void append(const QList<QBarSet*> &sets) 將一組 QBarSet 對象添加到系列的末尾。
void replace(int index, QBarSet *set) 替換系列中指定索引位置的 QBarSet 對象。
void replace(const QList<QBarSet*> &sets) 用提供的一組 QBarSet 對象替換整個系列。
void remove(int index) 移除系列中指定索引位置的 QBarSet 對象。
void clear() 清除系列中的所有 QBarSet 對象。
int count() const 返回系列中 QBarSet 對象的數量。
bool isEmpty() const 檢查系列是否為空。
QBarSet* at(int index) const 返回系列中指定索引位置的 QBarSet 對象。
QList<QBarSet*> barSets() const 返回包含系列所有 QBarSet 對象的列表。

QBarCategoryAxis 表示條形圖橫坐標,用于管理和顯示條形圖中的分類軸,其中每個條形圖都屬于特定的類別。以下是 QBarCategoryAxis 類的一些主要方法和概述:

方法 描述
QBarCategoryAxis(QObject *parent = nullptr) 構造函數,創建一個空的 QBarCategoryAxis 對象。
void append(const QStringList &categories) 將一組類別添加到軸的末尾。
void append(const QString &category) 將一個類別添加到軸的末尾。
void insert(int index, const QString &category) 在指定索引位置插入一個類別。
void insert(int index, const QStringList &categories) 在指定索引位置插入一組類別。
void remove(const QString &category) 移除指定的類別。
void remove(int index, int count = 1) 從指定索引位置開始移除指定數量的類別。
void clear() 清除軸中的所有類別。
int count() const 返回軸中類別的數量。
QString categoryAt(int index) const 返回軸中指定索引位置的類別。
QStringList categories() const 返回包含軸所有類別的列表。
void setCategories(const QStringList &categories) 設置軸的類別。
void setStartValue(qreal value) 設置軸的起始值。
qreal startValue() const 返回軸的起始值。
void setRange(qreal min, qreal max) 設置軸的范圍。
void append(const QVector<QPointF> &points) 將一組點添加到軸的末尾,用于自動設置類別。
void replace(const QVector<QPointF> &points) 用提供的一組點替換整個軸,用于自動設置類別。

如下代碼是使用 Qt 的圖表模塊創建一個包含柱狀圖和折線圖的圖表,并顯示在 QGraphicsView 控件中,在MainWindow::MainWindow構造函數中我們可以使用如下代碼實現柱狀圖的創建。

圖表初始化:創建一個 QChart 對象,并設置圖表的標題和動畫效果。然后將圖表設置給 ui->graphicsView 控件,同時啟用抗鋸齒渲染。

QChart *chart = new QChart();
chart->setTitle("柱狀圖統計");
chart->setAnimationOptions(QChart::SeriesAnimations);

// 為graphicsView設置chart
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);

// 構造柱狀圖
chart =ui->graphicsView->chart();
chart->removeAllSeries();            // 刪除所有序列
chart->removeAxis(chart->axisX());   // 刪除坐標軸
chart->removeAxis(chart->axisY());   // 刪除坐標軸

創建數據集:構造三個 QBarSet 對象,分別表示數學、語文、英語的數據集。同時創建一個 QLineSeries 對象,表示平均分數據集,并設置線條的顏色和寬度。

QBarSet *setMath = new QBarSet(theModel->horizontalHeaderItem(1)->text());      // 數學字段
QBarSet *setChinese = new QBarSet(theModel->horizontalHeaderItem(2)->text());   // 語文字段
QBarSet *setEnglish= new QBarSet(theModel->horizontalHeaderItem(3)->text());    // 英語字段

// 創建折線線條
QLineSeries *Line = new QLineSeries();
Line->setName(theModel->horizontalHeaderItem(4)->text());  // 表示平均分
QPen pen;
pen.setColor(Qt::red);  // 使用紅色
pen.setWidth(2);        // 設置寬度
Line->setPen(pen);      // 繪制

添加數據:遍歷前10個數據行,將數學、語文、英語的成績和平均分添加到相應的數據集中。

for(int i=0;i< 10;i++)
{
    // 從數據模型獲取數據
    setMath->append(theModel->item(i,1)->text().toInt());            // 數學
    setChinese->append(theModel->item(i,2)->text().toInt());         // 語文
    setEnglish->append(theModel->item(i,3)->text().toInt());         // 英語
    Line->append(QPointF(i,theModel->item(i,4)->text().toFloat()));  // 平均分
}

創建柱狀圖序列:使用 QBarSeries 創建一個柱狀圖序列,并將三個數據集添加到序列中。同時,將折線圖序列也添加到圖表中。

cppCopy codeQBarSeries *series = new QBarSeries();
series->append(setMath);
series->append(setChinese);
series->append(setEnglish);

chart->addSeries(series);
chart->addSeries(Line);

設置坐標軸:創建橫坐標軸 axisX 和縱坐標軸 axisY,設置它們的范圍、標簽等信息,然后將它們與相應的序列關聯。

// 創建柱狀圖序列 QBarSeries 并添加三個數據集
QBarSeries *series = new QBarSeries();
series->append(setMath);
series->append(setChinese);
series->append(setEnglish);

chart->addSeries(series); // 添加柱狀圖序列
chart->addSeries(Line);   // 添加折線圖序列

// 用于橫坐標在字符串列表 即UID
QStringList categories;
for (int i=0;i<10;i++)
{
    categories <<theModel->item(i,0)->text();
}

// 柱狀圖的坐標軸
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);            // 添加橫坐標文字列表
chart->setAxisX(axisX, series);       // 設置橫坐標
chart->setAxisX(axisX, Line);         // 設置橫坐標

// 設置坐標范圍
axisX->setRange(categories.at(0), categories.at(categories.count()-1));

// 數值型坐標作為縱軸
QValueAxis *axisY = new QValueAxis;
axisY->setRange(0, 100);
axisY->setTitleText("分數");
axisY->setTickCount(6);
axisY->setLabelFormat("%.0f");

圖例顯示設置:顯示圖例,并設置圖例在底部對齊。

chart->setAxisY(axisY, series);
chart->setAxisY(axisY, Line);
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);

這樣,你就創建了一個包含柱狀圖和折線圖的圖表,并將其顯示在 QGraphicsView 控件中,運行后則可以得到如下圖所示的圖例;

1.2 創建餅狀圖

餅狀圖(Pie Chart)用于展示各部分占整體的比例關系。它通過在一個圓形區域內繪制扇形來表示數據的相對大小。整個圓表示總體,而每個扇形的弧長(或面積)表示相應類別的數量或比例。

餅狀圖的主要特點包括:

  1. 占比表示:每個扇形的大小表示相應類別在總體中所占的比例,從而直觀地展示各類別之間的相對關系。
  2. 圓形布局:餅狀圖的數據以圓形的方式呈現,使得用戶能夠輕松比較各部分的大小。
  3. 清晰易懂:餅狀圖通常用于表示數據的相對比例,特別適用于展示類別之間的占比關系,非常直觀。
  4. 單一變量:餅狀圖適合展示單一變量的占比關系,不適用于多個變量或時間序列的比較。
  5. 限制數據量:由于餅狀圖是基于整個圓的,適合表示少量類別的占比關系。當類別過多時,可能導致圖形復雜,難以解讀。

餅狀圖常見的應用場景包括市場份額分析、調查結果的占比展示、資源分配比例等。然而,有時候,為了更好地表達數據,也會使用改進版的餅狀圖,如環形圖(Donut Chart)等。

QPieSeries 是 Qt Charts 模塊中用于繪制餅狀圖的數據序列類。它派生自 QAbstractSeries 類,用于管理和展示餅狀圖中的數據。以下是 QPieSeries 類的一些常用方法和屬性,以表格形式概述:

方法 描述
QPieSeries(QObject *parent = nullptr) 構造函數,創建一個 QPieSeries 對象。
~QPieSeries() 析構函數,釋放 QPieSeries 對象。
append(QPieSlice *slice) 向餅狀圖序列中追加一個餅塊。
insert(int index, QPieSlice *slice) 在指定位置插入一個餅塊。
remove(QPieSlice *slice) 從餅狀圖序列中移除指定的餅塊。
clear() 清除餅狀圖序列中的所有餅塊。
slices() 返回餅狀圖序列中的所有餅塊。
count() 返回餅狀圖序列中的餅塊數量。
at(int index) 返回餅狀圖序列中指定索引位置的餅塊。
setVisible(bool visible) 設置餅狀圖序列的可見性。
isVisible() 返回餅狀圖序列的可見性。
setHoleSize(double size) 設置餅狀圖中間空心的大小,范圍為 [0.0, 1.0],0.0 表示沒有空心,1.0 表示整個餅狀圖都是空心。
holeSize() 返回餅狀圖中間空心的大小。
setPieSize(double size) 設置餅狀圖的大小,范圍為 [0.0, 1.0],默認為 1.0。
pieSize() 返回餅狀圖的大小。
setLabelsVisible(bool visible) 設置餅塊的標簽是否可見。
labelsVisible() 返回餅塊的標簽是否可見。
setLabelsPosition(QPieSlice::LabelPosition position) 設置餅塊標簽的位置。
labelsPosition() 返回餅塊標簽的位置。
setLabelsPrecision(int precision) 設置餅塊標簽顯示的小數位數。
labelsPrecision() 返回餅塊標簽顯示的小數位數。
clicked(QPieSlice *slice) 點擊餅塊時發出的信號,參數為被點擊的餅塊。
hovered(QPieSlice *slice, bool state) 鼠標懸停在餅塊上時發出的信號,參數為被懸停的餅塊和懸停狀態。
pressed(QPieSlice *slice) 鼠標按下餅塊時發出的信號,參數為被按下的餅塊。
released(QPieSlice *slice) 鼠標釋放餅塊時發出的信號,參數為被釋放的餅塊。

QPieSlice 是 Qt Charts 模塊中用于表示餅狀圖中的單個餅塊的類。每個 QPieSlice 對象都代表餅狀圖中的一個數據分塊。

以下是關于 QPieSlice 的一些方法以及說明:

方法 描述
QPieSlice(qreal value, QString label) 構造函數,創建一個帶有給定值和標簽的 QPieSlice 對象。
~QPieSlice() 析構函數,釋放 QPieSlice 對象。
setLabel(QString label) 設置餅塊的標簽文字。
label() 返回餅塊的標簽文字。
setValue(qreal value) 設置餅塊的值。
value() 返回餅塊的值。
setExploded(bool exploded) 設置餅塊是否為爆炸狀態,即是否與餅圖分離。
isExploded() 返回餅塊是否為爆炸狀態。
setPieSeries(QPieSeries *series) 設置餅塊所屬的 QPieSeries 對象。
pieSeries() 返回餅塊所屬的 QPieSeries 對象。
setBrush(const QBrush &brush) 設置餅塊的畫刷,即填充顏色。
brush() 返回餅塊的畫刷。
setLabelBrush(const QBrush &brush) 設置餅塊標簽的畫刷,即標簽的顏色。
labelBrush() 返回餅塊標簽的畫刷。
setPen(const QPen &pen) 設置餅塊的畫筆,即邊框顏色和樣式。
pen() 返回餅塊的畫筆。
setLabelVisible(bool visible) 設置餅塊標簽是否可見。
isLabelVisible() 返回餅塊標簽是否可見。
setExplodeDistanceFactor(qreal factor) 設置餅塊爆炸時的距離因子,即與餅圖分離的距離。
explodeDistanceFactor() 返回餅塊爆炸時的距離因子。
setPercentage(qreal percentage) 設置餅塊的百分比值。
percentage() 返回餅塊的百分比值。
clicked(bool state) 鼠標點擊餅塊時發出的信號,參數為鼠標點擊的狀態(按下或釋放)。
hovered(bool state) 鼠標懸停在餅塊上時發出的信號,參數為懸停狀態。
pressed() 鼠標按下餅塊時發出的信號。
released() 鼠標釋放餅塊時發出的信號。

QPieSlice 主要用于配置和管理餅狀圖中的單個數據分塊,包括設置餅塊的標簽、值、顏色、樣式等屬性。

餅狀圖的繪制流程與柱狀圖一樣,主要以下幾個步驟:

餅圖初始化: 創建一個QChart對象,并設置其動畫選項。然后將該圖表對象設置為QGraphicsView的圖表,并啟用反鋸齒渲染。

// 餅圖初始化
QChart *chart = new QChart();
chart->setAnimationOptions(QChart::SeriesAnimations);
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);

// 繪制餅圖
chart->removeAllSeries();

創建餅圖序列:為圖表創建一個新的餅圖序列(QPieSeries),并通過循環的方式向序列中添加成績。

// 創建餅圖序列
QPieSeries *series = new QPieSeries();

// 餅圖中間空心的大小
series->setHoleSize(0.30);

// 添加分塊數據
for (int i=0;i<=4;i++)
{
    // 獲得QTreeWidgetItem的item
    QTreeWidgetItem* item=ui->treeWidget->topLevelItem(i);

    // 獲取分析對象,數學、英語、語文或平均分,添加一個餅圖分塊數據,標簽,數值
    series->append(item->text(0),item->text(1).toFloat());
}

添加分塊數據到餅圖:QTreeWidget中獲取每個分析對象(數學、英語、語文或平均分),并將其添加到餅圖序列中。

// 餅圖分塊
QPieSlice *slice;

// 設置每個分塊的標簽文字
for(int i=0;i<=4;i++)
{
    // 獲取分塊
    slice =series->slices().at(i);

    // 設置分塊的標簽
    slice->setLabel(slice->label()+QString::asprintf(": %.0f人, %.1f%%", slice->value(),slice->percentage()*100));

    // 信號與槽函數關聯,鼠標落在某個分塊上時,此分塊彈出
    connect(slice, SIGNAL(hovered(bool)),this, SLOT(on_PieSliceHighlight(bool)));
}

slice->setExploded(true);           // 最后一個設置為exploded
series->setLabelsVisible(true);     // 只影響當前的slices,必須添加完slice之后再設置
chart->addSeries(series);           // 添加餅圖序列

chart->legend()->setVisible(true);  // 圖例
chart->legend()->setAlignment(Qt::AlignRight);

設置餅圖分塊的標簽和槽函數關聯: 對于每個分塊,設置其標簽文字,包括數值和百分比,并關聯鼠標懸停事件的槽函數。

// 鼠標移入移出時觸發hovered信號
void MainWindow::on_PieSliceHighlight(bool show)
{
    QPieSlice *slice;
    slice=(QPieSlice *)sender();

    // 動態設置setExploded效果
    // slice->setLabelVisible(show);
    slice->setExploded(show);
}

上述代碼流程實現了在Qt中使用QPieSeriesQPieSlice繪制餅狀圖的功能,包括圖表的初始化、數據的設置、分塊標簽的添加、餅圖分塊的突出顯示等。在圖表中,每個分塊代表一種分析對象,標簽包含人數和百分比信息,運行后輸出如下效果;

1.3 創建堆疊圖

堆疊圖(Stacked Chart)用于展示多個數據系列的累積效果,即將不同系列的數據在同一數值點上進行堆疊顯示。這種圖表形式旨在突出整體的趨勢以及各組成部分的相對貢獻。

堆疊圖有多種形式,其中兩種常見的類型包括:

  1. 堆疊柱狀圖(Stacked Bar Chart):在同一類別或數值點上,將不同系列的柱狀圖堆疊在一起。每個柱狀圖的高度表示該系列在該點上的數值,而整個柱狀圖的高度表示各個系列在該點上的累積總和。
  2. 堆疊面積圖(Stacked Area Chart):在同一類別或數值點上,將不同系列的面積圖堆疊在一起。每個面積圖的面積表示該系列在該點上的數值,而整個堆疊面積圖的高度表示各個系列在該點上的累積總和。

堆疊圖的優勢在于能夠直觀地顯示各部分在整體中的相對比例,并清晰地展示隨時間或其他維度的變化。這種圖表類型通常用于比較多個系列的總體趨勢,并強調各個系列之間的相對貢獻。在堆疊圖中,每個系列的數值貢獻會在相同的數值點上疊加顯示,使得讀者能夠更容易比較各系列的相對大小。

堆疊圖的創建需要用到QStackedBarSeriesQBarCategoryAxis類,QStackedBarSeries 是 Qt Charts 模塊中用于創建堆疊柱狀圖的類。堆疊柱狀圖顯示多個柱狀系列的堆疊效果,每個柱狀系列由一個或多個柱狀條組成,這些柱狀條按照數據堆疊在一起,形成整體的柱狀圖。

以下是 QStackedBarSeries 的一些重要方法和屬性:

方法 描述
QStackedBarSeries(QObject *parent = nullptr) 構造函數,創建一個 QStackedBarSeries 對象。
void append(QBarSet *set) 將一個 QBarSet 添加到序列中。
void append(QList<QBarSet *> sets) 將一組 QBarSet 添加到序列中。
QList<QBarSet *> barSets() const 返回序列中的所有 QBarSet
void setLabelsVisible(bool visible) 設置是否顯示柱狀圖的標簽。
bool labelsVisible() const 返回柱狀圖的標簽可見性。
void setLabelsFormat(const QString &format) 設置標簽的顯示格式。
QString labelsFormat() const 返回標簽的顯示格式。
void setLabelsPosition(QAbstractBarSeries::LabelsPosition position) 設置標簽的位置。
QAbstractBarSeries::LabelsPosition labelsPosition() const 返回標簽的位置。

QStackedBarSeries 通過添加不同的 QBarSet 對象來創建堆疊效果。每個 QBarSet 對象代表一個柱狀系列,它包含了一組柱狀條的數據。標簽、顏色和其他樣式屬性可以通過 QBarSet 進行定制。使用這些方法和屬性,可以方便地控制堆疊柱狀圖的外觀和行為,如下代碼則是堆疊圖創建的實現;

// 初始化疊加柱狀圖繪制窗口
QChart *chart = new QChart();
chart->setAnimationOptions(QChart::SeriesAnimations);
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);

// 繪制疊加柱狀圖
chart->removeAllSeries();
chart->removeAxis(chart->axisX());
chart->removeAxis(chart->axisY());

// 創建三門課程的數據集
QBarSet *setMath = new QBarSet(theModel->horizontalHeaderItem(1)->text());
QBarSet *setChinese = new QBarSet(theModel->horizontalHeaderItem(2)->text());
QBarSet *setEnglish= new QBarSet(theModel->horizontalHeaderItem(3)->text());

// 添加前十個分數數據到數據集
for(int i=0;i<20;i++)
{
    setMath->append(theModel->item(i,1)->text().toInt());
    setChinese->append(theModel->item(i,2)->text().toInt());
    setEnglish->append(theModel->item(i,3)->text().toInt());
}

// 創建QStackedBarSeries對象并添加數據集
QStackedBarSeries *series = new QStackedBarSeries();
series->append(setMath);
series->append(setChinese);
series->append(setEnglish);
series->setLabelsVisible(true);

// 添加序列到圖表
chart->addSeries(series);

QStringList categories;

// 繪制前十個數據
for (int i=0;i<10;i++)
{
    categories <<theModel->item(i,0)->text();
}

// 類別坐標軸 作為橫軸
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->setAxisX(axisX, series);
axisX->setRange(categories.at(0), categories.at(categories.count()-1));

// 數值坐標軸 作為縱軸
QValueAxis *axisY = new QValueAxis;
axisY->setRange(0, 300);
axisY->setTitleText("總分");
axisY->setTickCount(6);
axisY->setLabelFormat("%.0f");
chart->setAxisY(axisY, series);

// 設置圖表屬性
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);

運行后,通過QBarSet保存課程數據集,最后增加橫軸縱軸區間,當數據被加載后,圖表則會輸出如下所示的數據集;

1.4 創建百分比圖

百分比圖(Percentage Chart)用于顯示各部分占整體的百分比關系的圖表。這種圖表通過以百分比形式展示每個部分在總體中所占比例,提供了一種直觀的方式來比較不同部分的相對大小。

百分比圖有多種形式,其中一些常見的類型包括:

  1. 百分比柱狀圖(Percentage Bar Chart):類似于常規柱狀圖,但每個柱的高度表示相對于整體的百分比。
  2. 百分比堆疊柱狀圖(Percentage Stacked Bar Chart):將柱疊加在一起,每個部分的高度表示相對于總體的百分比。
  3. 百分比餅狀圖(Percentage Pie Chart):類似于餅狀圖,但每個扇形的角度或面積表示相對于整體的百分比。
  4. 百分比面積圖(Percentage Area Chart):面積圖的每個區域表示相對于整體的百分比。
  5. 百分比堆疊面積圖(Percentage Stacked Area Chart):將面積疊加在一起,每個區域的面積表示相對于總體的百分比。

這些圖表形式在不同情境下用于展示數據的占比關系,特別適用于需要強調相對比例的場景。百分比圖通常能夠幫助觀眾更容易地理解各部分在整體中的貢獻,是一種有力的數據可視化工具。

使用百分比圖時,注意確保數據的總和為100%。百分比圖在市場份額分析、調查結果的占比展示、資源分配比例等方面得到廣泛應用。

QPercentBarSeries 是 Qt Charts 模塊中用于繪制百分比柱狀圖的類。它派生自 QAbstractBarSeries 類,表示一個二維坐標系中的數據系列,其中的數據以百分比柱狀圖的形式呈現。

以下是關于 QPercentBarSeries 的一些方法以及說明:

方法 描述
QPercentBarSeries() 構造函數,創建一個 QPercentBarSeries 對象。
~QPercentBarSeries() 析構函數,釋放 QPercentBarSeries 對象。
setLabelsVisible(bool) 設置百分比柱狀圖上的數據標簽是否可見。
labelsVisible() 返回百分比柱狀圖上的數據標簽是否可見的狀態。
setLabelsPosition(Position) 設置百分比柱狀圖上的數據標簽位置,Position 是一個枚舉類型,表示標簽的位置,如上方、下方、內部等。
labelsPosition() 返回百分比柱狀圖上的數據標簽位置。
setLabelsFormat(QString) 設置百分比柱狀圖上的數據標簽的格式,使用字符串指定標簽的顯示格式。
labelsFormat() 返回百分比柱狀圖上的數據標簽的顯示格式。
setPercentageVisible(bool) 設置百分比柱狀圖上的百分比標簽是否可見。
percentageVisible() 返回百分比柱狀圖上的百分比標簽是否可見的狀態。
setStackingGap(qreal) 設置百分比柱狀圖中堆疊的百分比柱之間的間隙。
stackingGap() 返回百分比柱狀圖中堆疊的百分比柱之間的間隙。
append(QBarSet*) 在百分比柱狀圖中追加一個數據集。
insert(int, QBarSet*) 在百分比柱狀圖中插入一個數據集,參數為位置索引和 QBarSet 對象。
remove(QBarSet*) 從百分比柱狀圖中移除指定的數據集。
take(int) 從百分比柱狀圖中移除并返回指定位置的數據集。
take(QBarSet*) 從百分比柱狀圖中移除指定的數據集并返回。
count() 返回百分比柱狀圖中數據集的數量。
barSets() 返回百分比柱狀圖中所有數據集的列表。
barWidth() 返回百分比柱狀圖中百分比柱的寬度。
barWidthChanged(qreal) 當百分比柱狀圖中百分比柱的寬度發生變化時發出的信號,參數為新的寬度值。

QPercentBarSeries 類主要用于在圖表中繪制百分比柱狀圖,其中的數據集可以包含多個柱子,每個柱子表示一個百分比。

// 百分比柱狀圖初始化
QChart *chart = new QChart();
chart->setAnimationOptions(QChart::SeriesAnimations);
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);

// 繪制百分比柱狀圖
chart->removeAllSeries();
chart->removeAxis(chart->axisX());
chart->removeAxis(chart->axisY());

// 創建數據集
QBarSet *setMath = new QBarSet(theModel->horizontalHeaderItem(1)->text());
QBarSet *setChinese = new QBarSet(theModel->horizontalHeaderItem(2)->text());
QBarSet *setEnglish= new QBarSet(theModel->horizontalHeaderItem(3)->text());

QTreeWidgetItem *item;
QStringList categories;

for (int i=0;i<=4;i++)
{
    // 從分數段統計數據表里獲取數據添加到數據集
    item=ui->treeWidget->topLevelItem(i);

    // 橫坐標的標簽
    categories<<item->text(0);

    // 添加數據到QBarSet中
    setMath->append(item->text(1).toFloat());
    setChinese->append(item->text(2).toFloat());
    setEnglish->append(item->text(3).toFloat());
}

// 添加序列
QPercentBarSeries *series = new QPercentBarSeries();
series->append(setMath);
series->append(setChinese);
series->append(setEnglish);
series->setLabelsVisible(true);
series->setLabelsFormat("@value人");
chart->addSeries(series);

// 添加橫坐標
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->setAxisX(axisX, series);
axisX->setRange(categories.at(0), categories.at(categories.count()-1));

// 添加縱坐標
QValueAxis *axisY = new QValueAxis;
axisY->setRange(0, 100);
axisY->setTitleText("百分比");
axisY->setTickCount(6);
axisY->setLabelFormat("%.1f");
chart->setAxisY(axisY, series);

// 設置屬性
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignRight);

運行后則可輸出不同分數段每一門成績的百分比分布情況,如下圖所示;

1.5 創建散點圖

散點圖(Scatter Plot)是一種二維圖表,用于顯示兩個變量之間的關系。散點圖的每個數據點由兩個數值組成,分別對應于圖表的橫軸和縱軸。通過在圖表中繪制這些點,可以觀察和分析變量之間的關聯性、趨勢、聚集程度等。

散點圖的特點包括:

  1. 數據點表示:每個數據點在圖表上表示為一個獨立的點,其中橫軸對應一個變量,縱軸對應另一個變量。
  2. 關系展示:散點圖主要用于展示兩個變量之間的關系,例如相關性、分布情況、趨勢等。
  3. 離散數據:適用于離散型數據,每個點表示一個具體的觀測值。
  4. 聚類發現:通過觀察數據點的分布,可以發現數據是否呈現出某種聚類模式。
  5. 異常值檢測:可以用于檢測異常值,即圖表中偏離正常分布的離群點。

散點圖的應用場景非常廣泛,常見的用途包括:

  • 相關性分析:通過觀察散點圖,可以初步了解兩個變量之間的相關性,是進行相關性分析的一種可視化手段。
  • 趨勢分析:散點圖可以用于觀察兩個變量之間是否存在趨勢,是進行趨勢分析的有力工具。
  • 異常值檢測:通過識別離群點,可以發現數據中的異常值,有助于數據清理和分析的準確性。
  • 聚類分析:觀察數據點的分布,可以發現是否存在某種聚類模式,對于數據的分組有一定幫助。

總體而言,散點圖是一種簡單而強大的工具,可用于初步探索和理解兩個變量之間的關系。

QSplineSeries 是 Qt Charts 模塊中用于繪制光滑曲線的類。它表示圖表中的一條曲線,通過一系列的數據點來定義曲線的形狀。

以下是關于 QSplineSeries 的一些方法以及說明:

方法 描述
QSplineSeries(QObject *parent = nullptr) 構造函數,創建一個 QSplineSeries 對象。
~QSplineSeries() 析構函數,釋放 QSplineSeries 對象。
append(QPointF point) 向曲線中追加一個數據點。
append(QList<QPointF> points) 向曲線中追加一組數據點。
replace(int index, QPointF point) 替換指定索引處的數據點。
replace(QList<QPointF> points) 替換曲線中的所有數據點。
remove(int index) 移除指定索引處的數據點。
remove(int index, int count) 移除從指定索引開始的指定數量的數據點。
clear() 清空曲線中的所有數據點。
pointsVector() 返回曲線的數據點。
setUseOpenGL(bool enable) 設置是否使用 OpenGL 進行繪制。
useOpenGL() 返回是否使用 OpenGL 進行繪制。
setPen(const QPen &pen) 設置曲線的畫筆,即曲線的顏色和樣式。
pen() 返回曲線的畫筆。
setBrush(const QBrush &brush) 設置曲線的畫刷,即填充顏色。
brush() 返回曲線的畫刷。
setPointLabelsVisible(bool visible) 設置是否顯示數據點的標簽。
isPointLabelsVisible() 返回數據點的標簽是否可見。
setPointLabelsFormat(const QString &format) 設置數據點標簽的顯示格式,支持使用占位符。
pointLabelsFormat() 返回數據點標簽的顯示格式。
setPointLabelsColor(const QColor &color) 設置數據點標簽的顏色。
pointLabelsColor() 返回數據點標簽的顏色。
setPointLabelsFont(const QFont &font) 設置數據點標簽的字體。
pointLabelsFont() 返回數據點標簽的字體。
setPointsVisible(bool visible) 設置是否顯示數據點。
arePointsVisible() 返回數據點是否可見。
setPointLabelsClipping(bool clipping) 設置是否裁剪超出繪圖區域的數據點標簽。
isPointLabelsClipping() 返回數據點標簽是否裁剪超出繪圖區域。
clicked(QPointF point) 鼠標點擊曲線時發出的信號,參數為鼠標點擊的數據點坐標。
hovered(QPointF point, bool state) 鼠標懸停在曲線上時發出的信號,參數為懸停狀態以及懸停位置的數據點坐標。
pressed(QPointF point) 鼠標按下曲線時發出的信號,參數為鼠標按下的數據點坐標。
released(QPointF point) 鼠標釋放曲線時發出的信號,參數為鼠標釋放的數據點坐標。
doubleClicked(QPointF point) 鼠標雙擊曲線時發出的信號,參數為鼠標雙擊的數據點坐標。

QSplineSeries 主要用于繪制光滑曲線,通過添加一系列的數據點,可以在圖表中呈現出相應的曲線形狀。

QScatterSeries 是 Qt Charts 模塊中用于繪制散點圖的類。它派生自 QXYSeries 類,用于表示圖表中的一組散點數據,通過一系列的坐標點來顯示離散的數據分布。

以下是關于 QScatterSeries 的一些方法以及說明:

方法 說明
QScatterSeries(QObject *parent = nullptr) 構造函數,創建一個 QScatterSeries 對象。
~QScatterSeries() 析構函數,釋放 QScatterSeries 對象。
append(QPointF point) 向散點圖中追加一個數據點。
append(QList<QPointF> points) 向散點圖中追加一組數據點。
replace(int index, QPointF point) 替換指定索引處的數據點。
replace(QList<QPointF> points) 替換散點圖中的所有數據點。
remove(int index) 移除指定索引處的數據點。
remove(int index, int count) 移除從指定索引開始的指定數量的數據點。
clear() 清空散點圖中的所有數據點。
pointsVector() 返回散點圖的數據點。
setMarkerShape(QScatterSeries::MarkerShape shape) 設置散點的形狀,可以是圓形、方形等。
markerShape() 返回散點的形狀。
setMarkerSize(qreal size) 設置散點的大小。
markerSize() 返回散點的大小。
setPen(const QPen &pen) 設置散點圖的畫筆,即散點的邊框顏色和樣式。
pen() 返回散點圖的畫筆。
setBrush(const QBrush &brush) 設置散點圖的畫刷,即散點的填充顏色。
brush() 返回散點圖的畫刷。
setBorderColor(const QColor &color) 設置散點的邊框顏色。
borderColor() 返回散點的邊框顏色。
setBackgroundColor(const QColor &color) 設置散點的背景顏色。
backgroundColor() 返回散點的背景顏色。
setBorderColor(const QColor &color) 設置散點的邊框顏色。
borderColor() 返回散點的邊框顏色。
setBrush(const QBrush &brush) 設置散點的畫刷,即填充顏色。
brush() 返回散點的畫刷。
setPen(const QPen &pen) 設置散點的畫筆,即邊框顏色和樣式。
pen() 返回散點的畫筆。
setUseOpenGL(bool enable) 設置是否使用 OpenGL 進行繪制。
useOpenGL() 返回是否使用 OpenGL 進行繪制。
setMarkerShape(QScatterSeries::MarkerShape shape) 設置散點的形狀,可以是圓形、方形等。
markerShape() 返回散點的形狀。
setMarkerSize(qreal size) 設置散點的大小。
markerSize() 返回散點的大小。
setMarkerColor(const QColor &color) 設置散點的顏色。
markerColor() 返回散點的顏色。
clicked(QPointF point) 鼠標點擊散點時發出的信號,參數為鼠標點擊的數據點坐標。
hovered(QPointF point, bool state) 鼠標懸停在散點上時發出的信

繪制散點圖實現代碼如下所示;

// 散點圖初始化
QChart *chart = new QChart();
chart->setAnimationOptions(QChart::SeriesAnimations);
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);

// 清空繪圖區
chart->removeAllSeries();
chart->removeAxis(chart->axisX());
chart->removeAxis(chart->axisY());

// 光滑曲線序列
QSplineSeries *seriesLine = new QSplineSeries();
seriesLine->setName("曲線");
QPen pen;
pen.setColor(Qt::blue);
pen.setWidth(2);
seriesLine->setColor(Qt::blue);
seriesLine->setPen(pen);

// 散點序列
QScatterSeries *series0 = new QScatterSeries();
series0->setName("散點");
series0->setMarkerShape(QScatterSeries::MarkerShapeCircle);
series0->setBorderColor(Qt::black);
series0->setBrush(QBrush(Qt::red));
series0->setMarkerSize(12);

// 隨機數種子
qsrand(QTime::currentTime().second());

// 設置曲線隨機數
for (int i=0;i<10;i++)
{
    int x=(qrand() % 20);    // 0到20之間的隨機數
    int y=(qrand() % 20);
    series0->append(x,y);    // 散點序列
    seriesLine->append(x,y); // 光滑曲線序列
}

chart->addSeries(series0);
chart->addSeries(seriesLine);

// 增加Y坐標軸(可注釋)
QValueAxis *axisY = new QValueAxis;
axisY->setRange(0, 20);
axisY->setTitleText("Y坐標");
axisY->setTickCount(11);
axisY->setLabelFormat("%.0f");
axisY->setGridLineVisible(true);
chart->setAxisY(axisY, series0);
chart->setAxisY(axisY, seriesLine);

// 增加X坐標軸(可注釋)
QValueAxis *axisX = new QValueAxis;
axisX->setRange(0, 20);
axisX->setTitleText("X");
axisX->setTickCount(11);
axisX->setLabelFormat("%.0f");
axisX->setGridLineVisible(true);
chart->setAxisX(axisX, series0);
chart->setAxisX(axisX, seriesLine);

// 創建缺省的坐標軸(默認缺省值)
chart->createDefaultAxes();
chart->axisX()->setTitleText("X 軸");
chart->axisX()->setRange(-2,22);

chart->axisY()->setTitleText("Y 軸");
chart->axisY()->setRange(-2,22);

chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignRight);

// 綁定槽函數,用于點擊圖例顯示與隱藏數據
foreach (QLegendMarker* marker, chart->legend()->markers())
{
    QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_chartBarLegendMarkerClicked()));
    QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_chartBarLegendMarkerClicked()));
}

運行上述代碼則可實現輸出隨機散點圖,其中右側散點與曲線可以進行自定義隱藏與顯示,如下圖所示;

總結

以上是生活随笔為你收集整理的C++ Qt开发:Charts绘制各类图表详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久艹艹| 日日摸日日 | 日本精油按摩3 | 久久国产一区二区三区 | 天天操天天爱天天干 | 一区二区三区四区久久 | 天堂av一区二区 | 国产精品一区在线 | 黄色成人影院 | 成人在线视频免费看 | 欧美日韩国产欧美 | 日本夜夜草视频网站 | 国产一级片播放 | 99精品一区二区三区 | 亚洲精品美女 | 日日夜夜精品免费 | 亚洲精品国偷拍自产在线观看 | 国产精品每日更新 | 天天干天天拍天天操天天拍 | 国产最新视频在线观看 | 国产免费区 | 国产精品久久久久久久久久久免费看 | 99热这里是精品 | 久久精品免费播放 | 首页中文字幕 | 精品视频在线观看 | 超碰97人人爱 | 欧美日韩免费在线观看视频 | 国产精品久久久久9999吃药 | 久久在线免费观看视频 | 天天拍天天干 | 久操视频在线观看 | 国产精品99免费看 | 五月婷婷电影网 | 欧美大片www | 91成人精品观看 | 狠狠躁日日躁夜夜躁av | 久草精品视频在线观看 | 青青河边草免费视频 | 日本婷婷色| 91桃色在线免费观看 | 亚洲高清在线 | 日韩aⅴ视频 | 最近最新mv字幕免费观看 | 最近最新最好看中文视频 | 日韩欧美视频一区二区 | 精品久久视频 | 嫩小bbbb摸bbb摸bbb | 精品一区二区精品 | 27xxoo无遮挡动态视频 | 中文字幕在线精品 | 国产精品美女久久久久aⅴ 干干夜夜 | 在线视频福利 | 国产精品原创视频 | 免费精品在线视频 | 美女网站在线观看 | 91精品999 | 国产一区二区高清 | 免费成人av| 欧美精品久久久久久 | 日韩在线视频看看 | 欧美日韩国产综合一区二区 | 久久国产网站 | 久久精品综合网 | 中文字幕在线观看第一区 | 久久亚洲欧美 | 91大片网站 | 亚洲国产操 | 国产在线视频导航 | 在线99视频 | 久久精品精品电影网 | 国产视频欧美视频 | 欧美a级片网站 | 丁香 久久 综合 | 99精品一区二区 | 久久伊人国产精品 | 韩日视频在线 | 欧美日韩精品二区第二页 | 四虎影视精品永久在线观看 | 久久久天堂| 爱色av.com | 精品久久一二三区 | 在线观看av国产 | 伊人五月天 | 精品国产伦一区二区三区 | 天天操比 | 久久国产一二区 | 丁香久久 | www.久久com | 免费在线观看黄 | 精品久久国产 | 久久精品福利 | 97电院网手机版 | 久久99九九99精品 | 五月丁婷婷 | 日韩黄色一级电影 | 国产涩涩在线观看 | 亚洲精品免费观看视频 | 成人香蕉视频 | 97av视频 | 久久久69| 四虎在线视频免费观看 | 国产一级免费在线观看 | 91亚洲激情 | 国产一级做a | 日本黄色a级大片 | 久久激情视频 | 日韩av一区二区在线影视 | 国产丝袜美腿在线 | 久久精品黄色 | 在线免费观看视频a | 亚洲伦理电影在线 | 久热免费在线观看 | 嫩模bbw搡bbbb搡bbbb | 日本一区二区高清不卡 | 久久99免费视频 | 91入口在线观看 | 久久草网| 日韩欧美视频在线免费观看 | 夜夜夜夜操 | 国产精品手机播放 | 在线导航av| 精品欧美一区二区三区久久久 | 国产 视频 高清 免费 | 99视频免费播放 | 黄色大片视频网站 | 欧美在线99| 在线看国产精品 | 不卡av电影在线 | 亚洲精品午夜久久久久久久久久久 | 亚洲人精品午夜 | 色妞久久福利网 | 欧美日韩一区二区三区在线观看视频 | 亚洲做受高潮欧美裸体 | 亚洲国产精品久久久久久 | 99久久精品国产毛片 | 深爱激情亚洲 | 久久伊人八月婷婷综合激情 | av免费观看网站 | 中文字幕视频一区 | 国产黄色片在线 | 日韩v在线91成人自拍 | 欧美疯狂性受xxxxx另类 | 99视频精品在线 | a视频在线| 免费福利在线观看 | 日韩av视屏在线观看 | 国产精品美女久久久久久久久 | 色97在线| 99国产精品久久久久久久久久 | 日日操操 | 中文字幕国产精品一区二区 | 婷婷av网站| 狠狠操在线 | 天天天天色射综合 | 综合色爱 | 狠狠色噜噜狠狠 | 亚洲最新av在线网址 | 五月婷婷开心 | 久久日本视频 | 99精品热视频只有精品10 | 丁香久久激情 | 天天爱天天射天天干天天 | 久草香蕉在线 | 人人插人人看 | 国内精品久久影院 | 亚洲精品乱码久久久久久久久久 | 激情五月在线 | 日韩高清在线一区二区 | 手机看片| 国产精品地址 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 男女全黄一级一级高潮免费看 | 国产高清在线视频 | 美女在线免费视频 | 国产日本在线观看 | 亚洲狠狠婷婷综合久久久 | 超碰97在线资源 | 四虎在线观看精品视频 | 国产精品岛国久久久久久久久红粉 | 亚洲精品国产欧美在线观看 | 99自拍视频在线观看 | 久久露脸国产精品 | 亚洲国产一区在线观看 | www.久久婷婷 | 欧美大片mv免费 | 97网| 在线免费看片 | 在线国产中文字幕 | 人人讲下载 | 亚洲午夜精品一区 | 韩国三级一区 | 久久久精品在线观看 | 日韩精品五月天 | 天天天天天天天操 | 久艹视频在线观看 | 婷婷久久亚洲 | 久99久精品视频免费观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 久久亚洲综合色 | 首页av在线 | 精品福利av | 韩日电影在线免费看 | 69久久99精品久久久久婷婷 | 日免费视频 | 欧美一区免费在线观看 | 免费国产亚洲视频 | 美女免费视频观看网站 | 福利视频精品 | 国产精品免费在线 | 97超碰色| 五月婷在线视频 | 毛片网站免费在线观看 | 国产女v资源在线观看 | 婷婷六月网 | 在线日韩精品视频 | 一区二区三区av在线 | 国产精品爽爽久久久久久蜜臀 | www国产一区 | 最新中文字幕视频 | 韩国av不卡 | 久久久亚洲麻豆日韩精品一区三区 | 日韩在线观看的 | 一区二区三区在线免费观看视频 | 亚洲免费一级电影 | a视频免费| 日韩av一区二区在线影视 | 色狠狠综合天天综合综合 | 久久婷婷色综合 | 久久五月婷婷丁香社区 | 色噜噜狠狠色综合中国 | 久久精彩免费视频 | 国产免费一区二区三区最新 | 亚洲精品97| 色在线视频网 | 日韩欧美电影 | 久久精品成人热国产成 | 99re国产| 亚洲成人一区 | 韩国av电影在线观看 | 欧美视频国产视频 | 日韩精品一区二区在线 | 500部大龄熟乱视频 欧美日本三级 | 九九交易行官网 | 精品国产一区二区三区四区在线观看 | 国产无遮挡猛进猛出免费软件 | 久久在线视频精品 | 久久激情综合网 | av在线超碰 | 免费观看完整版无人区 | 亚洲国产精品999 | 久久精品久久精品久久39 | 国产一级视屏 | 五月婷婷在线视频观看 | www.亚洲激情.com | 97精品国产97久久久久久春色 | 亚洲黄色大片 | 国产精品久久久久久久久久妇女 | 88av网站| 国产成人三级一区二区在线观看一 | 97免费在线视频 | 九九在线高清精品视频 | 国内久久久久 | 一区二区久久 | 久久五月婷婷综合 | 日本韩国欧美在线观看 | 奇米影视8888在线观看大全免费 | 98超碰在线观看 | 福利av影院| 久热免费 | 六月婷色| 在线观看日韩免费视频 | 天天干,天天射,天天操,天天摸 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 免费视频一区 | 国产精品久久久毛片 | 国产精品久久99精品毛片三a | 久久 在线| 中文字幕免费看 | 亚洲国产精品一区二区久久,亚洲午夜 | 久久久久免费精品视频 | 国产夫妻性生活自拍 | 人人舔人人插 | 国产成人免费精品 | 在线播放视频一区 | 婷婷综合久久 | 国产成人av | 欧美综合在线视频 | 中文字幕免费不卡视频 | a级片在线播放 | 国产精品淫| 久久99精品国产一区二区三区 | 国产护士在线 | 特级黄色片免费看 | 久草视频在线新免费 | 欧美日韩高清一区二区 国产亚洲免费看 | 在线视频一区观看 | 国产亚洲精品久久19p | 国产中文字幕视频在线观看 | 中文在线8资源库 | 欧美天天综合网 | 久草视频在线免费看 | 亚洲成人免费观看 | 91av片 | av在线播放快速免费阴 | 精品在线视频观看 | 日av免费| av在线小说 | www欧美色 | 99精品久久久| 日韩久久精品一区二区三区下载 | 91女神的呻吟细腰翘臀美女 | 亚洲永久字幕 | 日韩免费一二三区 | 九九精品久久久 | 在线日韩视频 | 色成人亚洲网 | 日韩免费看视频 | 国产对白av | 亚洲91在线 | 亚洲精品在线观看av | 黄色毛片大全 | 一区二区三区日韩视频在线观看 | 99精品免费在线 | 久久精品久久99 | 天天操天天吃 | 欧美激情精品一区 | 天堂久色 | 国产精品免费视频网站 | 亚州精品天堂中文字幕 | 欧美激情精品久久久久久免费 | 国产精品国产三级国产不产一地 | 免费在线观看视频a | 日韩r级在线 | 国产中出在线观看 | 久久在线视频精品 | 五月婷婷丁香激情 | 亚洲精品在线网站 | 久久99免费观看 | 成人午夜电影免费在线观看 | 亚洲一区二区精品视频 | 日韩网站中文字幕 | 超碰伊人网 | 香蕉视频4aa | 色综合久久精品 | av福利网址导航大全 | 久久精品首页 | 久久久久夜色 | 亚洲国产成人精品在线 | 国产精品一区二区美女视频免费看 | 91综合色 | 国模精品一区二区三区 | 日本中文字幕电影在线免费观看 | 久久人视频| 亚洲三级网 | 国产精品麻豆欧美日韩ww | 国产日产欧美在线观看 | 在线观看黄 | www.亚洲在线| 国产日韩在线播放 | 九九视频免费观看视频精品 | 日韩精品偷拍 | 日韩视频免费在线观看 | 91麻豆精品一区二区三区 | 日韩电影中文字幕在线观看 | 日本福利视频在线 | 欧美一区免费在线观看 | 久草在线资源网 | 色欧美成人精品a∨在线观看 | 欧美日韩一区二区三区免费视频 | 中文字幕精品久久 | 日韩精品久久一区二区三区 | 久久久久免费网站 | 国产香蕉视频在线观看 | www.伊人色.com| 精品人妖videos欧美人妖 | 丁香婷婷社区 | 中文字幕一区二区三区四区在线视频 | 免费看污污视频的网站 | 国产精品福利av | 亚洲综合色婷婷 | 久久久久久高潮国产精品视 | 国产黄色大全 | 色橹橹欧美在线观看视频高清 | 国产美女被啪进深处喷白浆视频 | 国产一级精品绿帽视频 | 日韩视频在线播放 | 亚洲精品成人网 | 看v片| 国产黄色特级片 | 久久呀| 成片人卡1卡2卡3手机免费看 | 国产高清视频网 | 午夜视频99| 色插综合| 蜜桃麻豆www久久囤产精品 | 国产精品av在线 | 精品美女在线视频 | 亚洲一区二区精品在线 | 国产麻豆剧果冻传媒视频播放量 | 中文字幕在线精品 | 国产精品久久久久久麻豆一区 | 视频在线精品 | 深爱激情综合 | 欧美另类高清 videos | 欧美激情在线网站 | www.天天成人国产电影 | 午夜精品av | 国产高清不卡一区二区三区 | 欧美日韩精品国产 | 91麻豆.com| 九色视频网址 | 在线观看欧美成人 | 色综合久久久久综合 | 国产a国产a国产a | 五月天丁香视频 | 黄色免费网站 | 色悠悠久久综合 | 欧美久久久 | 国产乱对白刺激视频不卡 | 日韩亚洲精品电影 | www.婷婷com| 九九免费在线观看视频 | 国产短视频在线播放 | 国产在线视频导航 | 久久精品国产免费 | 成人免费观看在线视频 | 免费精品在线观看 | 婷婷亚洲综合五月天小说 | 日日日操操 | 精品久久国产精品 | 亚洲1区 在线| 国产精品99久久久 | 亚洲经典视频在线观看 | 亚洲资源一区 | 亚洲精品视频大全 | 99精品视频一区 | 97高清视频| 免费在线黄网 | 999成人 | 免费精品视频在线观看 | 国产精品免费看久久久8精臀av | 九九久久视频 | 美女网站在线播放 | 少妇搡bbb | 日韩一级黄色片 | 色婷婷综合久久久中文字幕 | 国产精品精品久久久 | 久草在线视频免赞 | 久久精品国产一区二区三 | 亚洲精品中文字幕在线观看 | 久草精品在线观看 | 九九在线视频 | 国产在线一线 | 久久国产三级 | 午夜a区| 国产成人精品免费在线观看 | 亚洲 中文 欧美 日韩vr 在线 | 天天艹天天爽 | 欧美日bb| 久久精品网址 | 色综合五月天 | 国产在线不卡精品 | 久久综合99 | 亚洲一级电影在线观看 | www国产亚洲精品久久网站 | 黄色福利网 | 成人毛片在线观看 | 中文不卡视频在线 | 伊人狠狠操 | 成人av网址大全 | 日韩av手机在线看 | 国产精品mv | 日韩手机在线 | 亚洲精品在线视频播放 | 欧美一区二区在线 | 91探花国产综合在线精品 | 主播av在线| 97人人射| 日韩欧美xxx | 人人爽人人澡人人添人人人人 | 欧美综合在线视频 | 日韩大片在线观看 | 欧美伦理一区二区 | 久久视频这里只有精品 | 亚洲精品免费在线观看视频 | 欧美一区二区免费在线观看 | 国产免费中文字幕 | 狠狠狠狠狠狠操 | 91精品久久久久久综合乱菊 | 国产精品久久久久久久久久免费 | 国产成人一区二区啪在线观看 | 在线观看黄色小视频 | aaa日本高清在线播放免费观看 | 国产不卡视频在线 | 亚洲精品男人天堂 | 17婷婷久久www| 亚洲一区二区视频在线 | 欧美日韩免费一区二区三区 | 五月天精品视频 | 免费亚洲视频在线观看 | 亚洲三级视频 | 中日韩在线视频 | 一区在线播放 | 午夜视频二区 | 在线国产激情视频 | 伊人开心激情 | 日韩免费在线观看视频 | 亚州国产精品久久久 | 久久精品1区 | 深爱开心激情网 | 天天天操天天天干 | 97精品超碰一区二区三区 | 国产精品一区二区三区在线播放 | 日韩特黄一级欧美毛片特黄 | 日韩欧美国产免费播放 | 国产黄色精品在线 | 天天操网站 | 天天天天色射综合 | 久久精品一二三区 | 日韩一区二区三区不卡 | av免费电影在线 | 国产成人精品免费在线观看 | 日本精品一 | 日韩在线观看的 | 91黄色免费看 | 成人资源在线观看 | 欧美成人久久 | 午夜在线资源 | 成人在线电影观看 | 日韩网站在线看片你懂的 | 日韩视频图片 | 在线黄av| 国产精品久久久久久五月尺 | 国产成人精品一区二区三区福利 | 日韩羞羞 | 香蕉视频在线网站 | 日韩成人免费观看 | 91热这里只有精品 | 国产成人精品电影久久久 | 九九九视频精品 | 视频在线日韩 | 国产伦理一区二区 | 日韩一级成人av | 成人午夜精品福利免费 | 精久久久久 | 欧美亚洲一级片 | 六月激情丁香 | 国产免费av一区二区三区 | 国产精品美女久久久久久久网站 | 亚洲天堂社区 | 日韩激情第一页 | 91爱在线| 国产黄色播放 | 国产午夜av | 九九视频精品在线 | 亚洲极色 | 久久男人中文字幕资源站 | 日韩av高潮| 成人福利在线 | 国产美女视频免费观看的网站 | 粉嫩av一区二区三区四区在线观看 | 草草草影院 | 欧美激情精品久久久久久免费印度 | 中文字幕在线视频一区 | 国产精品孕妇 | 中文字幕中文字幕在线一区 | 综合在线色 | 日本精品在线 | 91在线精品一区二区 | 999久久精品| 99色精品视频| 久久久综合香蕉尹人综合网 | 婷婷日日 | 91最新视频在线观看 | 色中色资源站 | 欧美日韩二区在线 | 国产精品久久久久一区二区 | 999精品 | 欧美精品一区二区性色 | 免费色婷婷| 在线播放av网址 | 日韩精品视频网站 | 国产伦精品一区二区三区照片91 | 亚洲成aⅴ人在线观看 | 久久久亚洲麻豆日韩精品一区三区 | 日韩免费一区二区三区 | 国产一卡在线 | 天天摸天天操天天爽 | 91成人精品观看 | av理论电影| 免费日韩一区二区 | av资源在线看 | 99久久婷婷国产综合精品 | 四虎国产免费 | 人人射人人射 | 激情婷婷欧美 | 欧美最猛性xxxxx(亚洲精品) | 91亚洲精品久久久蜜桃网站 | 在线免费av电影 | 婷婷综合视频 | 成人午夜在线观看 | 黄色成年| 精品一区精品二区高清 | 欧美久久久久 | 综合伊人久久 | 亚洲黄色软件 | 激情小说久久 | 成人免费看片网址 | 日韩免费福利 | 成人小电影在线看 | 99久久爱 | 在线激情av电影 | 国产精品久久久久免费观看 | 久久久 精品 | 在线免费观看视频一区二区三区 | 91在线中字 | 久久久久久久久毛片精品 | 天天射天天干天天 | 国产成人精品亚洲 | 色偷偷88欧美精品久久久 | 国产在线精品国自产拍影院 | 亚洲码国产日韩欧美高潮在线播放 | 日韩视 | 亚洲综合在线视频 | 免费在线播放av电影 | 国产原创av片 | 美女久久久久久久久久 | 亚洲综合视频网 | 人人爽人人插 | 亚洲精品视频在线播放 | 国产精品乱码久久 | 中文资源在线观看 | 国产在线精品观看 | 天天舔天天射天天操 | 一本一道久久a久久精品 | 欧美看片 | 一区二区三区四区五区在线视频 | 欧美有色 | 亚洲成人动漫在线观看 | 激情开心站 | 久久国产精品久久w女人spa | 亚洲精品午夜久久久久久久 | 国产一区二区三区四区大秀 | 亚洲综合情| 日韩欧美有码在线 | 黄色www| 国产精品久久久久影院日本 | 成人在线视频免费观看 | 99久久精品久久亚洲精品 | 91成品视频| 天天射天天搞 | 99视频偷窥在线精品国自产拍 | aaa日本高清在线播放免费观看 | 粉嫩一二三区 | 国产一区二区在线精品 | 免费av片在线 | 网站免费黄色 | 狠狠狠狠狠狠狠狠干 | 国产九九九九九 | 插综合网 | 日韩在线精品 | 波多野结衣在线中文字幕 | 97色视频在线 | 在线看中文字幕 | 一区二区三区四区免费视频 | 在线视频18在线视频4k | 久久久久久久久精 | 人人干97 | 免费h精品视频在线播放 | 国产原创91 | 国产一区欧美一区 | 日本性高潮视频 | 天天色天天射天天操 | 天天天在线综合网 | 欧美日韩久久不卡 | 亚洲 欧美 日韩 综合 | 狠狠插狠狠操 | 1024久久 | 五月开心综合 | 日韩网页| 天堂va在线观看 | 毛片在线网 | www.天天干.com | 国产区高清在线 | 97在线免费 | 91入口在线观看 | 日韩三级av | 日韩xxx视频 | 欧美国产精品一区二区 | 999久久久免费视频 午夜国产在线观看 | 97超碰免费 | 免费久久网站 | 激情五月激情综合网 | 99在线精品观看 | 国产精品久久久久久电影 | 9999国产精品 | 欧美成人h版 | 国产精品不卡 | 999免费视频 | 欧美精品成人在线 | 久久精品精品电影网 | 99免费在线视频观看 | 91av小视频| 日本韩国中文字幕 | 亚洲狠狠干 | 四虎最新域名 | 国产精品麻豆果冻传媒在线播放 | 97国产超碰在线 | www.人人干| 亚洲黄色高清 | 欧美成人一区二区 | 超碰97公开 | 久久久久久久久久国产精品 | 天天射综合网视频 | 中文字幕在线国产 | av免费电影在线观看 | 国产做aⅴ在线视频播放 | 精品国产aⅴ一区二区三区 在线直播av | 国内精品久久久久久 | 国产一区二区三区久久久 | 免费的黄色av | 最近中文字幕高清字幕免费mv | 999在线精品 | 色99视频| 天天躁日日躁狠狠躁av麻豆 | 国产在线欧美日韩 | 一区二区丝袜 | 成人午夜电影免费在线观看 | 91日韩国产| 99久久一区 | 亚洲精品国产麻豆 | 91精品久久久久久粉嫩 | 欧美一级在线看 | 日韩在线视频一区二区三区 | 91传媒视频在线观看 | 久久超级碰视频 | 国产精品免费观看久久 | 日本h在线播放 | 久久你懂的 | 中文综合在线 | 黄色免费观看网址 | 97色噜噜 | 免费看片成年人 | 2019中文最近的2019中文在线 | 欧美日韩一区二区视频在线观看 | 日韩在线免费播放 | 国产不卡视频在线播放 | 在线看的av网站 | 亚洲国产成人精品在线 | 黄色免费看片网站 | 中文字幕黄网 | 日韩一区二区三免费高清在线观看 | 91成人精品国产刺激国语对白 | 亚洲精品午夜久久久久久久 | 色七七亚洲影院 | 国产黄av | 黄色小说免费观看 | 欧美99精品| 国产成人精品一区二区三区网站观看 | 亚洲日本va午夜在线影院 | 中文字幕在线观看免费高清完整版 | 久久99久久99精品免视看婷婷 | 亚洲成人av一区 | 国产精品久久久一区二区 | 欧美日韩国产高清视频 | 一区二区三区视频网站 | 日韩精品久久久久久久电影99爱 | 美女免费视频一区 | 国产夫妻性生活自拍 | 在线性视频日韩欧美 | 中文字幕在线国产 | 成人中文字幕+乱码+中文字幕 | 国产精品久久久久久久久久不蜜月 | 97超级碰碰碰碰久久久久 | 久久国产精品99久久人人澡 | 91麻豆免费版 | 久久a国产 | 精品国产电影一区二区 | 日韩性片| 久久精品99北条麻妃 | 国产精品欧美久久久久天天影视 | 在线观看视频一区二区三区 | 亚洲精品ww | 色香蕉视频 | 午夜色大片在线观看 | 亚洲综合黄色 | 色在线最新 | 亚洲精品欧洲精品 | 91成人网在线 | 亚洲精品视频www | 欧美日韩不卡一区二区 | 久久久久久欧美二区电影网 | 久久婷婷久久 | 美女网站在线观看 | 亚洲精品乱码久久久久久写真 | av福利电影 | 国产精品久久久久久超碰 | www.夜夜操.com | 99视频在线观看免费 | 黄色三级在线 | 激情久久伊人 | 久久99精品国产一区二区三区 | 国内精品久久影院 | 色干干| 99国产精品久久久久久久久久 | 精品视频免费在线 | 一区二区 久久 | 国产精品久久久久久久久岛 | 欧美日韩免费看 | 国产精品成人一区 | 日韩av成人免费看 | 久久理论电影 | 日日干干| 天天色天天色 | 国产在线精品一区二区三区 | 亚洲一区久久 | 日日婷婷夜日日天干 | 综合色天天 | 99 精品 在线| 成人毛片一区二区三区 | 91av色| www99久久| 国产精品岛国久久久久久久久红粉 | 中文字幕日本在线 | 在线观看视频免费播放 | 久精品视频在线观看 | 亚洲在线激情 | 久久精品高清 | 超碰在线1| 福利电影一区二区 | a视频免费看 | 成人av免费看| 少妇bbw撒尿 | av电影亚洲| 日韩成人免费电影 | 亚洲精品久久在线 | 久久电影网站中文字幕 | 夜夜操网站 | 一区二区中文字幕在线观看 | 一区视频在线 | 国产精品午夜久久 | 狠狠操91 | 精品无人国产偷自产在线 | 中文字幕中文中文字幕 | .精品久久久麻豆国产精品 亚洲va欧美 | 成人久久影院 | 久久精品国产精品亚洲 | 91视频在线国产 | www.亚洲精品视频 | 日日摸日日添日日躁av | 69av视频在线观看 | 亚洲久草在线 | 国产免费又粗又猛又爽 | 三上悠亚一区二区在线观看 | 久久美女高清视频 | 免费福利在线观看 | 国产精品毛片久久蜜 | 国产一区欧美一区 | 国内精品久久久久久久久 | 久久夜视频 | 成人精品一区二区三区电影免费 | 久久国产精品久久国产精品 | 国产一区二区在线免费 | 国产精品一区二区在线播放 | 18国产精品白浆在线观看免费 | 男女视频久久久 | 午夜精品久久久久久久久久久久 | 欧美日韩精品在线免费观看 | 欧美性成人| 四虎视频| 欧美成人视 | 国产成人在线网站 | 成人全视频免费观看在线看 | 在线观看视频97 | 久久国产精品一国产精品 | 国产日韩欧美中文 | 九九亚洲视频 | 精品国产一区二区三区四区在线观看 | 成人高清在线观看 | 欧美成人猛片 | 91av看片| 免费看片网页 | 2022国产精品视频 | 伊人色播 | 国产一级视频在线观看 | 久久综合综合久久综合 | 婷婷激情站 | 久久在线精品视频 | 欧美性视频网站 | 婷婷5月色 | 日韩特黄一级欧美毛片特黄 | 久久精视频 | 欧美日韩免费在线观看视频 | 丁香六月激情婷婷 | 久久视频免费观看 | 欧美日bb | 黄在线免费看 | 超碰成人免费电影 | 久久久一本精品99久久精品 | 国产黄色成人 | 最新色站 | 丝袜美女在线观看 | 国产精品免费久久久久影院仙踪林 | 亚洲精品免费在线 | 激情婷婷综合网 | 婷婷激情小说网 | 蜜桃传媒一区二区 | 日韩精品视频免费专区在线播放 | 99精品国产高清在线观看 | 久久午夜网 | 国内久久视频 | 色之综合网 | 我爱av激情网 | 亚洲视频一区二区三区在线观看 | 亚洲精品福利在线 | 国产精品视频在线看 | а天堂中文最新一区二区三区 | 免费观看成人网 | 人人搞人人干 | 欧美伦理电影一区二区 | 欧美激情视频一区二区三区免费 | 福利视频网站 | 91免费看黄 | 久章草在线 | 少妇做爰k8经典 | 国产精品99久久久久的智能播放 | 99精品国产兔费观看久久99 | 国产精品久久毛片 | 激情五月婷婷综合 | 伊人精品影院 | 欧美日韩精品在线 | 日韩av一区二区三区 | 日本黄色免费在线观看 | 欧美精品三级在线观看 | 91av视频在线免费观看 | 日本久久视频 | 日韩av快播电影网 | 国产福利在线免费 | 国产精品久久久久婷婷二区次 | 久久中文字幕导航 | 欧美日韩电影在线播放 | www亚洲一区 | 西西444www高清大胆 | www看片网站| 婷婷在线资源 | 国产精品2020 | 亚洲毛片一区二区三区 | 丁香六月中文字幕 | 国产视频在线观看一区二区 | 日本黄色免费在线 | 中国一级特黄毛片大片久久 | 亚洲精品在线观看不卡 | 99免费精品视频 | 国产九九九视频 | 午夜美女视频 | 欧美激情另类 | 九九视频这里只有精品 | 99中文视频在线 | 亚洲欧洲久久久 | 婷婷丁香九月 | 国产一级片直播 | 日韩一区二区免费在线观看 | 青青草国产精品 | 韩日av在线 | 日韩久久久久久久久久 | 怡红院成人在线 | 国产午夜在线观看视频 | 欧美色综合天天久久综合精品 | 欧美日韩视频精品 | 91成人免费在线视频 | 国产精品久久久久久久久久久久午夜 | 日本系列中文字幕 | 美女黄网站视频免费 | 日本久久不卡视频 | 国产伦理一区二区三区 | 麻豆视频在线播放 | av一级片在线观看 | 国产真实在线 | 国产91丝袜在线播放动漫 | 最近日本mv字幕免费观看 | 99精品偷拍视频一区二区三区 | 高潮毛片无遮挡高清免费 | 91片网| 欧美日韩激情视频8区 | 96视频免费在线观看 | av福利在线播放 | 日日操夜夜操狠狠操 | 国产精品久久一 | 精品久久久久_ | 黄av资源| 日韩精品一区二区三区在线视频 | 国产亲近乱来精品 | 欧美精品成人在线 | 日韩高清国产精品 | 欧美激情精品久久久久久免费印度 | 国产亚洲成人精品 | 97人人模人人爽人人少妇 |