Qt 小例子学习47 - StackedBarSeries qml

Qt 小例子学习47 - StackedBarSeries qml

SqlTrafficModel.h

#ifndef SQLTRAFFICMODEL_H
#define SQLTRAFFICMODEL_H

#include <QSqlQuery>
#include <QSqlQueryModel>

class SqlTrafficModel : public QSqlQueryModel
{
    Q_OBJECT
    Q_PROPERTY(QString queryStr READ queryStr WRITE setQueryStr NOTIFY queryStrChanged)
public:
    SqlTrafficModel(QObject *parent = nullptr) : QSqlQueryModel(parent) {}
    Q_INVOKABLE QStringList getColumn(int col)
    {
        QStringList mColumn;
        for (int row = 0; row < rowCount(); ++row)
        {
            mColumn << index(row, col).data().toString();
        }
        return mColumn;
    }

    QString queryStr() const { return mQueryStr; }
    void setQueryStr(const QString &queryStr)
    {
        if (queryStr == mQueryStr)
            return;
        mQueryStr = queryStr;
        setQuery(mQueryStr);
        emit queryStrChanged();
    }

signals:
    void queryStrChanged();

private:
    QString mQueryStr;
};

#endif // SQLTRAFFICMODEL_H

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import QtCharts 2.2

import com.eyllanesc.models 1.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    visibility: Window.FullScreen

    ChartView {
        anchors.fill: parent
        antialiasing: true

        StackedBarSeries {
            VBarModelMapper {
                model: SqlTrafficModel {
                    id: trafficModel
                    queryStr: "select * from traffic"
                    onModelReset: bar_axis.categories = getColumn(0)
                    Component.onCompleted: bar_axis.categories = getColumn(0)
                }
                firstBarSetColumn: 1
                lastBarSetColumn: 2
                firstRow: 0
            }
            axisX: BarCategoryAxis {
                id: bar_axis
            }
        }
    }
}

main.cpp

#include "sqltrafficmodel.h"

#include <QApplication>
#include <QDateTime>
#include <QDebug>
#include <QQmlApplicationEngine>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

static bool createConnection()
{

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if (!db.open())
    {
        qDebug() << "Cannot open database\n"
                 "Unable to establish a database connection.\n"
                 "This example needs SQLite support. Please read "
                 "the Qt SQL driver documentation for information how "
                 "to build it.\n\n"
                 "Click Cancel to exit.";
        return false;
    }

    QSqlQuery query;
    if (!query.exec("create table traffic (date DATE default CURRENT_DATE,  sent "
                    "INTEGER, recv INTEGER)"))
    {
        qDebug() << query.lastError().text();
    }
    QTime time = QTime::currentTime();
    qsrand((uint)time.msec());

    QDate today = QDate::currentDate();
    for (int i = 0; i < 10; i++)
    {
        query.prepare("insert into traffic values(:date, :sent, :recv)");
        query.bindValue(":date", today.addDays(i));
        query.bindValue(":sent", qrand() % 1000);
        query.bindValue(":recv", qrand() % 1000);
        if (!query.exec())
        {
            qDebug() << query.lastError().text();
        }
    }
    return true;
}

int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

    QApplication app(argc, argv);

    if (!createConnection())
        return -1;
    qmlRegisterType<SqlTrafficModel>("com.eyllanesc.models", 1, 0,
                                     "SqlTrafficModel");
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值