Qt 实现家居状态温度湿度图表
#include 'information.h'
#include 'ui_information.h'
#include 'sqlite.h'
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include
Information::Information(QWidget *parent) : QWidget(parent), ui(new Ui::Information) { ui->setupUi(this); setWindowTitle('家居状态'); setFixedSize(600,400);
QVBoxLayout *layout = new QVBoxLayout(this); // 创建一个垂直布局对象
// 创建温度折线图
QtCharts::QChartView *temperatureChartView = new QtCharts::QChartView(this);
QtCharts::QLineSeries *temperatureSeries = new QtCharts::QLineSeries();
Sqlite::sqlite_init();
QSqlQuery temperatureQuery;
temperatureQuery.exec("SELECT value FROM Status WHERE device_name = '空调' AND device_state = '开启'");
while (temperatureQuery.next())
{
double temperature = temperatureQuery.value(0).toDouble();
temperatureSeries->append(temperatureSeries->count(), temperature);
}
QtCharts::QChart *temperatureChart = new QtCharts::QChart();
temperatureChart->addSeries(temperatureSeries);
QtCharts::QValueAxis *temperatureAxisY = new QtCharts::QValueAxis();
temperatureAxisY->setRange(-5, 42); // 设置纵坐标范围为-5~42
temperatureChart->addAxis(temperatureAxisY, Qt::AlignLeft);
temperatureSeries->attachAxis(temperatureAxisY);
temperatureChart->setTitle("空调温度变化表"); // 设置折线图名
temperatureChartView->setChart(temperatureChart);
temperatureChartView->setRenderHint(QPainter::Antialiasing);
temperatureChartView->setMinimumSize(600, 200);
temperatureChartView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// 创建湿度折线图
QtCharts::QChartView *humidityChartView = new QtCharts::QChartView(this);
QtCharts::QLineSeries *humiditySeries = new QtCharts::QLineSeries();
QSqlQuery humidityQuery;
humidityQuery.exec("SELECT value FROM Status WHERE device_name = '加湿器' AND device_state = '开启'");
while (humidityQuery.next())
{
double humidity = humidityQuery.value(0).toDouble();
humiditySeries->append(humiditySeries->count(), humidity);
}
QtCharts::QChart *humidityChart = new QtCharts::QChart();
humidityChart->addSeries(humiditySeries);
QtCharts::QValueAxis *humidityAxisY = new QtCharts::QValueAxis();
humidityAxisY->setRange(0, 100); // 设置纵坐标范围为0~100
humidityChart->addAxis(humidityAxisY, Qt::AlignLeft);
humiditySeries->attachAxis(humidityAxisY);
humidityChart->setTitle("加湿器湿度变化表"); // 设置折线图名
humidityChartView->setChart(humidityChart);
humidityChartView->setRenderHint(QPainter::Antialiasing);
humidityChartView->setMinimumSize(600, 200);
humidityChartView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layout->addWidget(temperatureChartView); // 将温度折线图添加到布局中
layout->addWidget(humidityChartView); // 将湿度折线图添加到布局中
setLayout(layout); // 将布局对象设置为窗口的布局
}
Information::~Information() { delete ui; } 温度表和湿度表加入垂直布局后变形如何解决
如果温度表和湿度表加入垂直布局后变形,可以尝试以下方法来解决:
-
设置温度表和湿度表的大小策略为Expanding,这样它们会尽可能地填充布局空间,避免变形。 例如:temperatureChartView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-
调整温度表和湿度表的最小大小,使其适应布局。 例如:temperatureChartView->setMinimumSize(600, 200);
-
调整布局的大小策略,以适应温度表和湿度表的大小。 例如:layout->setSizeConstraint(QLayout::SetMinimumSize);
-
调整温度表和湿度表的布局属性,例如设置水平和垂直的拉伸因子,以控制它们在布局中的大小和位置。 例如:layout->addWidget(temperatureChartView, 0, Qt::AlignTop); // 将温度表添加到布局的顶部位置
如果以上方法无效,可能需要进一步检查温度表和湿度表的布局属性、布局容器的大小和其他相关因素,以确定问题的具体原因并解决之。
原文地址: https://www.cveoy.top/t/topic/fBlx 著作权归作者所有。请勿转载和采集!