版本说明:
1、优化柱状图显示,支持颜色变化
This commit is contained in:
165
mainwindow.cpp
165
mainwindow.cpp
@@ -17,6 +17,9 @@
|
||||
#include <QPolarChart>
|
||||
#include <QScatterSeries>
|
||||
#include <QSplineSeries>
|
||||
#include <QStackedBarSeries>
|
||||
|
||||
#include <QToolTip>
|
||||
|
||||
qreal get_rand(qreal maxValue) { return rand() * 1.0 / RAND_MAX * maxValue; }
|
||||
|
||||
@@ -44,8 +47,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
//创建udp socket
|
||||
m_udpSocket = std::make_shared<QUdpSocket>();
|
||||
m_udpServerSocket = std::make_shared<QUdpSocket>();
|
||||
m_udpServerSocket->bind(8000);
|
||||
connect(&*m_udpServerSocket, &QUdpSocket::readyRead, this, &MainWindow::readPendingDatagrams);
|
||||
|
||||
//测试
|
||||
test();
|
||||
}
|
||||
@@ -93,8 +96,8 @@ void MainWindow::readPendingDatagrams(){
|
||||
m_udpServerSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
|
||||
|
||||
//TODO:处理数据包
|
||||
//qDebug() << "Received datagram from" << sender.toString() << ":" << senderPort;
|
||||
//qDebug() << "Data:" << datagram;
|
||||
qDebug() << "Received datagram from" << sender.toString() << ":" << senderPort;
|
||||
qDebug() << "Data:" << datagram;
|
||||
|
||||
//有来电
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
@@ -122,6 +125,8 @@ void MainWindow::readPendingDatagrams(){
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("拨号中...");
|
||||
ui->lblCallDuration->hide();
|
||||
|
||||
test1();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,6 +192,69 @@ void MainWindow::test() {
|
||||
// ui->lblCallDuration->show();
|
||||
// StartupTalkingTimer();
|
||||
}
|
||||
|
||||
void MainWindow::test1(){
|
||||
// 随机生成信号能量数据
|
||||
setSignalStrengthValues(
|
||||
QStringList{"1号星", "2号星", "3号星", "4号星", "5号星", "6号星"},
|
||||
QList{get_rand(20.0), get_rand(45.0), get_rand(50.0), get_rand(45.0),
|
||||
get_rand(50.0), get_rand(40.0)});
|
||||
|
||||
// 随机生成方向图数据
|
||||
QList<QPointF> values;
|
||||
for (int i = 0; i < 6; i += 1) {
|
||||
values.append(QPointF(get_rand(360.0), get_rand(360.0)));
|
||||
}
|
||||
setAzimuthValues(values);
|
||||
|
||||
Record r3;
|
||||
r3.beginTime = QDateTime::currentDateTime();
|
||||
r3.channel = Channel::S;
|
||||
r3.type = CommType::ShortMessage;
|
||||
r3.direction = CommDirection::Receive;
|
||||
r3.number = "10003";// + QString::number((get_rand(8)));;
|
||||
r3.content = "fdghfgdhfghdfghdfghdfghf";// + QString::number((get_rand(15)));
|
||||
r3.isUnread = true;
|
||||
r3.callDuration = 0;
|
||||
|
||||
m_msgList.push_back(r3);
|
||||
UpdateMessageList();
|
||||
|
||||
m_recordQueryWidget->InsertRecord(m_msgList.back());
|
||||
|
||||
m_logger->info("111");
|
||||
}
|
||||
|
||||
// 槽函数实现
|
||||
void MainWindow::handleHovered(bool status, int index, QBarSet* barset)
|
||||
{
|
||||
if(status && barset && index >=0) {
|
||||
// 获取实际数值(考虑堆叠结构)
|
||||
const qreal value = barset->at(index);
|
||||
|
||||
// 显示定制化提示框
|
||||
QToolTip::showText(QCursor::pos(),
|
||||
QString("数值: %1\n阈值: %2")
|
||||
.arg(value, 0, 'f', 1) // 保留1位小数
|
||||
.arg(value < 36 ? "低" : "高"),
|
||||
nullptr,
|
||||
QRect(),
|
||||
2000); // 显示持续2秒
|
||||
|
||||
// 添加高亮效果
|
||||
//barset->setBorderWidth(2);
|
||||
//barset->setColor(barset->color().lighter(110)); // 亮度提高10%
|
||||
} else {
|
||||
// 恢复原始样式
|
||||
//if(barset) {
|
||||
// 获取实际数值(考虑堆叠结构)
|
||||
// const qreal value = barset->at(index);
|
||||
|
||||
//barset->setBorderWidth(1);
|
||||
//barset->setColor(value < 36 ? QColor("#C0C0C0") : QColor("#0000FF"));
|
||||
//}
|
||||
}
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------------------------
|
||||
void MainWindow::createBeiDouSignalStrengthChart() {
|
||||
@@ -201,26 +269,101 @@ void MainWindow::createBeiDouSignalStrengthChart() {
|
||||
m_signalStrengthChart->addAxis(m_signalStrengthChartXAxis, Qt::AlignBottom);
|
||||
|
||||
m_signalStrengthChartYAxis = new QValueAxis;
|
||||
m_signalStrengthChartYAxis->setRange(0, 10);
|
||||
m_signalStrengthChartYAxis->setRange(0, 50);
|
||||
m_signalStrengthChart->addAxis(m_signalStrengthChartYAxis, Qt::AlignLeft);
|
||||
// series->attachAxis(axisY);
|
||||
|
||||
QChartView *chartView = new QChartView(m_signalStrengthChart, this);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
ui->vboxChannelBeidouSignalStrength->addWidget(chartView);
|
||||
ui->vboxChannelBeidouSignalStrength->addWidget(chartView);
|
||||
|
||||
m_stackedSeries = new QStackedBarSeries;
|
||||
connect(m_stackedSeries, &QStackedBarSeries::hovered, this, &MainWindow::handleHovered);
|
||||
}
|
||||
void MainWindow::setSignalStrengthValues(const QStringList &categories,
|
||||
const QList<qreal> &yValues) {
|
||||
// 清空旧数据
|
||||
m_signalStrengthChart->removeAllSeries();
|
||||
m_signalStrengthChartXAxis->clear();
|
||||
|
||||
// 创建数据集
|
||||
QBarSet *set0 = new QBarSet("Power");
|
||||
QBarSet *set1 = new QBarSet("Power2");
|
||||
//set0->append(yValues);
|
||||
//set1->append(yValues);
|
||||
foreach (qreal val, yValues) {
|
||||
if(val >= 36.0)
|
||||
{
|
||||
*set0 << 0;
|
||||
*set1 << val;
|
||||
}
|
||||
else
|
||||
{
|
||||
*set0 << val;
|
||||
*set1 << 0;
|
||||
}
|
||||
}
|
||||
//auto set0 = new QBarSet("Power");
|
||||
//set0->append(yValues);
|
||||
|
||||
// 动态设置柱形颜色
|
||||
set0->setBrush(QBrush(QColor("#C0C0C0")));
|
||||
set1->setBrush(QBrush(QColor("#0000FF")));
|
||||
//for(int i = 0; i < set0->count(); ++i) {
|
||||
// const qreal value = set0->at(i);
|
||||
// set0->setBrush(QBrush(value < 36.0 ? QColor("#C0C0C0") : QColor("#0000FF")));
|
||||
// set0->setPen(QPen(value < 36.0 ? QColor("#606060") : QColor("#0d47a1"), 1));
|
||||
//}
|
||||
|
||||
// 创建柱状序列
|
||||
//QBarSeries *series = new QBarSeries();
|
||||
//series->append(set0);
|
||||
//m_signalStrengthChart->addSeries(series);
|
||||
|
||||
// 添加对象追踪防止内存泄漏
|
||||
//set0->setParent(series); // 建立父子关系
|
||||
|
||||
// 创建 QStackedBarSeries 对象, 保留并重用 QStackedBarSeries 对象而非每次新建
|
||||
//if(m_stackedSeries == nullptr) {
|
||||
// m_stackedSeries = new QStackedBarSeries();
|
||||
//}
|
||||
//->clear();
|
||||
QStackedBarSeries *series2 = new QStackedBarSeries();
|
||||
//m_stackedSeries->setBarWidth(0.8); // 设置柱子相对宽度
|
||||
//m_stackedSeries->setUseOpenGL(true); // 启用GPU加速
|
||||
|
||||
series2->append(set0);
|
||||
series2->append(set1);
|
||||
|
||||
// 添加对象追踪防止内存泄漏
|
||||
set0->setParent(series2); // 建立父子关系
|
||||
set1->setParent(series2); // 建立父子关系
|
||||
|
||||
m_signalStrengthChart->addSeries(series2);
|
||||
|
||||
//保留并重用QBarSeries对象而非每次新建
|
||||
//if(m_series == nullptr) {
|
||||
// m_series = new QBarSeries();
|
||||
// m_chart->addSeries(m_series);
|
||||
//}
|
||||
//m_series->clear();
|
||||
|
||||
// 绑定坐标轴
|
||||
//series2->attachAxis(m_signalStrengthChartXAxis);
|
||||
series2->attachAxis(m_signalStrengthChartYAxis);
|
||||
|
||||
// 设置X轴标签
|
||||
m_signalStrengthChartXAxis->append(categories);
|
||||
|
||||
auto set0 = new QBarSet("Power");
|
||||
set0->append(yValues);
|
||||
QBarSeries *series = new QBarSeries;
|
||||
series->append(set0);
|
||||
m_signalStrengthChart->removeAllSeries();
|
||||
m_signalStrengthChart->addSeries(series);
|
||||
// 动态调整Y轴范围
|
||||
//qreal maxValue = *std::max_element(yValues.begin(), yValues.end());
|
||||
//m_signalStrengthChartYAxis->setRange(0, maxValue * 1.2); // 留20%余量
|
||||
|
||||
// 优化显示效果
|
||||
series2->setLabelsVisible(false); // 隐藏数值标签
|
||||
m_signalStrengthChart->legend()->hide(); // 隐藏图例
|
||||
|
||||
// 更新卫星数量显示
|
||||
ui->lblSatelliteCount->setText(QString::asprintf("%d", categories.count()));
|
||||
}
|
||||
void MainWindow::createAzimuthMapChart() {
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <QTimer>
|
||||
#include <QBarSet>
|
||||
#include <QStackedBarSeries>
|
||||
|
||||
#include "RecordQuery.h"
|
||||
#include "LoggerWidget.h"
|
||||
@@ -39,6 +41,7 @@ class MainWindow : public QMainWindow
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
void test1();
|
||||
private slots:
|
||||
void on_rdbChannelUHF_clicked();
|
||||
|
||||
@@ -59,6 +62,7 @@ private slots:
|
||||
void readPendingDatagrams();
|
||||
|
||||
void on_tblMessageList_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
|
||||
void handleHovered(bool status, int index, QBarSet *barset);
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
private:
|
||||
@@ -99,5 +103,6 @@ private:
|
||||
QPolarChart* m_azimuthChart;
|
||||
QBarCategoryAxis* m_signalStrengthChartXAxis;
|
||||
QValueAxis* m_signalStrengthChartYAxis;
|
||||
QStackedBarSeries *m_stackedSeries;
|
||||
};
|
||||
#endif // MAINWINDOW_H
|
||||
|
||||
Reference in New Issue
Block a user