From 2187e4445f68d12708e344fb5b2ffd617cfb5553 Mon Sep 17 00:00:00 2001 From: Peter Poetzi Date: Sun, 18 Aug 2024 21:22:37 +0200 Subject: [PATCH] add float32 view --- changevaluesdialog.ui | 6 +++--- modbustablemodel.cpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/changevaluesdialog.ui b/changevaluesdialog.ui index 9028d40..5005e73 100644 --- a/changevaluesdialog.ui +++ b/changevaluesdialog.ui @@ -32,7 +32,7 @@ - First reister: + First register: spinBoxFirstRegister @@ -42,7 +42,7 @@ - 9999 + 65535 @@ -59,7 +59,7 @@ - 9999 + 65535 diff --git a/modbustablemodel.cpp b/modbustablemodel.cpp index 8ea7b79..838c1f0 100644 --- a/modbustablemodel.cpp +++ b/modbustablemodel.cpp @@ -6,6 +6,7 @@ enum { ColumnHex, ColumnBinary, ColumnAscii, + ColumnFloat32, ColumnCount }; } @@ -54,6 +55,17 @@ QVariant ModbusTableModel::data(const QModelIndex &index, int role) const Q_ASSERT(index.row() < values.size()); const auto &value = values[index.row()]; + const bool hasNext = index.row() < values.size()-1; + + union { + float valueAsFloat32; + quint16 arr [2]; + }; + if(hasNext){ + arr[1]=value; + arr[0]=values[index.row()+1]; + } + switch (role) { @@ -64,6 +76,7 @@ QVariant ModbusTableModel::data(const QModelIndex &index, int role) const case ColumnHex: return QString::number(value, 16).rightJustified(4, '0').insert(2, ' '); case ColumnBinary: return QString::number(value, 2) .rightJustified(16, '0').insert(8, ' '); case ColumnAscii: return QString{QChar{(value&0xFF00)>>8}} + QChar{value&0x00FF}; + case ColumnFloat32: return hasNext ? QString::number(valueAsFloat32,'f'): ""; } __builtin_unreachable(); break; @@ -74,6 +87,7 @@ QVariant ModbusTableModel::data(const QModelIndex &index, int role) const case ColumnHex: case ColumnBinary: case ColumnAscii: + case ColumnFloat32: return value; } __builtin_unreachable(); @@ -101,6 +115,7 @@ QVariant ModbusTableModel::headerData(int section, Qt::Orientation orientation, case ColumnHex: return tr("Hex"); case ColumnBinary: return tr("Binary"); case ColumnAscii: return tr("Ascii"); + case ColumnFloat32: return tr("Float32"); } __builtin_unreachable(); break;