代码拉取完成,页面将自动刷新
#include "graph.h"
#include "mainshow.h"
#include "ui_graph.h"
#include <QVBoxLayout>
Graph::Graph(QWidget *parent) :
QWidget(parent),
ui(new Ui::Graph),
chart(new QChart()),
series(new QLineSeries())
{
ui->setupUi(this);
// 设置图表
setupChart();
// 连接按钮点击事件
connect(ui->generateButton, &QPushButton::clicked, this, &Graph::on_generateButton_clicked);
// 连接到数据库
db = QSqlDatabase::addDatabase("QSQLITE"); // 使用SQLite数据库
db.setDatabaseName("test.db"); // 替换为你的数据库文件路径
if (!db.open()) {
qDebug() << "数据库打开失败:" << db.lastError().text();
return;
}
}
Graph::~Graph()
{
db.close();
delete ui;
}
void Graph::setupChart()
{
chart->setTitle("就诊人数走势");
// 设置初始的空系列
chart->addSeries(series);
chart->createDefaultAxes();
// 使用QDateTimeAxis来显示日期
QDateTimeAxis *axisX = new QDateTimeAxis;
axisX->setFormat("MM/dd/yy");
axisX->setTitleText("日期");
chart->setAxisX(axisX, series);
QValueAxis *axisY = new QValueAxis;
axisY->setTitleText("预约总数");
chart->setAxisY(axisY, series);
ui->chartView->setChart(chart);
ui->chartView->setRenderHint(QPainter::Antialiasing);
}
void Graph::fetchDataFromDatabase()
{
QSqlQuery query(db);
query.prepare("SELECT DueDate, COUNT(*) as Count FROM DIAGNOSIS GROUP BY DueDate ORDER BY DueDate");
if (!query.exec()) {
qDebug() << "查询失败:" << query.lastError().text();
return;
}
series->clear();
while (query.next()) {
QString dateString = query.value(0).toString();
int count = query.value(1).toInt();
// 使用MM/dd/yy格式解析日期
QDateTime dateTime = QDateTime::fromString(dateString, "MM/dd/yy");
if (dateTime.isValid()) {
// 将QDateTime转换为时间戳
qreal timestamp = dateTime.toMSecsSinceEpoch(); // 可以使用毫秒数
series->append(QPointF(timestamp, count)); // 使用QPointF
} else {
qDebug() << "无效的日期:" << dateString;
}
}
}
void Graph::on_pushButton_2_clicked()
{
this->close();
MainShow *ms = new MainShow;
ms->setAttribute(Qt::WA_DeleteOnClose);
ms->show();
}
void Graph::on_generateButton_clicked()
{
fetchDataFromDatabase();
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。