Qt文件閱讀筆記-C++與QML混合程式設計(QML畫餅狀圖)
阿新 • • 發佈:2018-12-17
這裡只點名一點:
Qt Charts是利用Qt的圖形檢視框架(QGraphics)搞出來的,底層並不是用OPenGL,而QML卻與OPenGL的底層緊密關聯
執行截圖如下:
原始碼如下:
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); public slots: void addBtnClicked(); void reduceBtnClicked(); private: Ui::Widget *ui; }; #endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); ui->quickWidget->setSource(QUrl("qrc:/chart.qml")); QObject *pRoot = (QObject*)ui->quickWidget->rootObject(); Q_ASSERT(pRoot); connect(ui->addPushButton,SIGNAL(clicked()),pRoot,SIGNAL(addEaten())); connect(ui->reducePushButton,SIGNAL(clicked()),pRoot,SIGNAL(reduceEaten())); } Widget::~Widget() { delete ui; } void Widget::addBtnClicked() { ui->quickWidget->update(); } void Widget::reduceBtnClicked() { ui->quickWidget->update(); }
chart.qml
import QtQuick 2.0 import QtCharts 2.0 Rectangle { id: root ChartView { width: parent.width height: parent.height theme: ChartView.ChartThemeBrownSand antialiasing: true PieSeries { id: pieSeries PieSlice { id: eaten; label: "eaten"; value: 94.9 } PieSlice { id: unEaten; label: "not yet eaten"; value: 5.1 } } } signal addEaten signal reduceEaten onAddEaten: { eaten.value += 1.5 unEaten.value -= 1.5 } onReduceEaten: { eaten.value -= 1.5 unEaten.value += 1.5 } }