summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@theqtcompany.com>2016-01-05 23:15:26 +0100
committerKarsten Heimrich <karsten.heimrich@theqtcompany.com>2016-01-06 10:21:54 +0000
commit246b75dc99e96010f8e265027d679ca52901c085 (patch)
tree13a847d4880f54cb18807ca6699d0a45083b4db4 /examples
parentbfb510255e1f0fa83b0ec3caeb559ac371532024 (diff)
Improve example applications.
* Master: Small coding style change. * Slave|Master: Have a defined tab order. * Master: Have a single server address field only. * Master: Show either coils or holding registers, not both. * Master: Limit number of possible write values on start address. * Master: Enable/disable possible items depending on start address. Change-Id: I2892efe3c4cd1a6f29e26b6b6b2e6b3a3f24ea99 Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'examples')
-rw-r--r--examples/serialbus/modbus/master/mainwindow.cpp47
-rw-r--r--examples/serialbus/modbus/master/mainwindow.h1
-rw-r--r--examples/serialbus/modbus/master/mainwindow.ui363
-rw-r--r--examples/serialbus/modbus/master/writeregistermodel.cpp59
-rw-r--r--examples/serialbus/modbus/master/writeregistermodel.h12
-rw-r--r--examples/serialbus/modbus/slave/mainwindow.ui46
6 files changed, 330 insertions, 198 deletions
diff --git a/examples/serialbus/modbus/master/mainwindow.cpp b/examples/serialbus/modbus/master/mainwindow.cpp
index 98cade6..1fb8ee5 100644
--- a/examples/serialbus/modbus/master/mainwindow.cpp
+++ b/examples/serialbus/modbus/master/mainwindow.cpp
@@ -47,6 +47,7 @@
#include <QtSerialBus/qmodbusrtuserialmaster.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qurl.h>
+#include <QtGui/qstandarditemmodel.h>
#include <QtWidgets/qstatusbar.h>
enum ModbusConnection {
@@ -67,10 +68,14 @@ MainWindow::MainWindow(QWidget *parent)
initActions();
writeModel = new WriteRegisterModel(this);
+ writeModel->setStartAddress(ui->writeAddress->value());
+ writeModel->setNumberOfValues(ui->writeSize->currentText());
+
ui->writeValueTable->setModel(writeModel);
+ ui->writeValueTable->hideColumn(2);
ui->writeValueTable->resizeColumnToContents(0);
- ui->writeValueTable->horizontalHeader()->setStretchLastSection(true);
- ui->writeValueTable->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
+ connect(writeModel, &WriteRegisterModel::updateViewport, ui->writeValueTable->viewport(),
+ static_cast<void (QWidget::*)()>(&QWidget::update));
ui->readTable->addItem(tr("Coils"), QModbusDataUnit::Coils);
ui->readTable->addItem(tr("Discrete Inputs"), QModbusDataUnit::DiscreteInputs);
@@ -79,6 +84,31 @@ MainWindow::MainWindow(QWidget *parent)
ui->connectType->setCurrentIndex(0);
on_connectType_currentIndexChanged(0);
+
+ QStandardItemModel *model = new QStandardItemModel(10, 1, this);
+ for (int i = 0; i < 10; ++i)
+ model->setItem(i, new QStandardItem(QStringLiteral("%1").arg(i + 1)));
+ ui->writeSize->setModel(model);
+ ui->writeSize->setCurrentText("10");
+ connect(ui->writeSize,&QComboBox::currentTextChanged, writeModel,
+ &WriteRegisterModel::setNumberOfValues);
+
+ auto valueChanged = static_cast<void (QSpinBox::*)(int)> (&QSpinBox::valueChanged);
+ connect(ui->writeAddress, valueChanged, writeModel, &WriteRegisterModel::setStartAddress);
+ connect(ui->writeAddress, valueChanged, this, [this, model](int i) {
+ int lastPossibleIndex = 0;
+ const int currentIndex = ui->writeSize->currentIndex();
+ for (int ii = 0; ii < 10; ++ii) {
+ if (ii < (10 - i)) {
+ lastPossibleIndex = ii;
+ model->item(ii)->setEnabled(true);
+ } else {
+ model->item(ii)->setEnabled(false);
+ }
+ }
+ if (currentIndex > lastPossibleIndex)
+ ui->writeSize->setCurrentIndex(lastPossibleIndex);
+ });
}
MainWindow::~MainWindow()
@@ -212,7 +242,7 @@ void MainWindow::on_readButton_clicked()
statusBar()->clearMessage();
QModbusReply *reply = modbusDevice->sendReadRequest(dataRequest,
- ui->readServer->text().toInt());
+ ui->serverEdit->text().toInt());
// broadcast replies return immediately
if (reply && reply->isFinished()) {
delete reply;
@@ -268,8 +298,7 @@ void MainWindow::on_writeButton_clicked()
Q_ASSERT(startAddress >= 0 && startAddress < 10);
QModbusDataUnit writeUnit(table, startAddress, numberOfEntries);
- for (int i = startAddress; i < (startAddress + numberOfEntries); i++)
- {
+ for (int i = startAddress; i < (startAddress + numberOfEntries); i++) {
if (table == QModbusDataUnit::Coils)
writeUnit.setValue(i - startAddress, writeModel->m_coils[i]);
else
@@ -279,7 +308,7 @@ void MainWindow::on_writeButton_clicked()
statusBar()->clearMessage();
// TODO test for R/W MultipleRegisters is missing
- QModbusReply *reply = modbusDevice->sendWriteRequest(writeUnit, ui->writeServer->text().toInt());
+ QModbusReply *reply = modbusDevice->sendWriteRequest(writeUnit, ui->serverEdit->text().toInt());
// broadcast replies return immediately
if (reply && reply->isFinished()) {
@@ -311,3 +340,9 @@ void MainWindow::writeReady()
reply->deleteLater();
}
+
+void MainWindow::on_writeTable_currentIndexChanged(int index)
+{
+ ui->writeValueTable->setColumnHidden(1, index != 0);
+ ui->writeValueTable->setColumnHidden(2, index != 1);
+}
diff --git a/examples/serialbus/modbus/master/mainwindow.h b/examples/serialbus/modbus/master/mainwindow.h
index 2f6c481..992b687 100644
--- a/examples/serialbus/modbus/master/mainwindow.h
+++ b/examples/serialbus/modbus/master/mainwindow.h
@@ -80,6 +80,7 @@ private slots:
void writeReady();
void on_connectType_currentIndexChanged(int);
+ void on_writeTable_currentIndexChanged(int);
private:
Ui::MainWindow *ui;
diff --git a/examples/serialbus/modbus/master/mainwindow.ui b/examples/serialbus/modbus/master/mainwindow.ui
index 11e8e90..f76074e 100644
--- a/examples/serialbus/modbus/master/mainwindow.ui
+++ b/examples/serialbus/modbus/master/mainwindow.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>517</width>
+ <width>514</width>
<height>378</height>
</rect>
</property>
@@ -20,35 +20,11 @@
<string>Modbus Master Example</string>
</property>
<widget class="QWidget" name="centralWidget">
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label_111">
- <property name="text">
- <string>Connection type:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="connectType">
- <property name="text" stdset="0">
- <string>Connection type:</string>
- </property>
- <item>
- <property name="text">
- <string>Serial</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>TCP</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QLabel" name="label_2">
+ <item row="0" column="5">
+ <widget class="QLabel" name="label_27">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -56,18 +32,30 @@
</sizepolicy>
</property>
<property name="text">
- <string>Port:</string>
+ <string>Server Address:</string>
</property>
</widget>
</item>
- <item row="0" column="3">
- <widget class="QLineEdit" name="portEdit">
+ <item row="0" column="7">
+ <widget class="QPushButton" name="connectButton">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="text">
+ <string>Connect</string>
+ </property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <property name="autoDefault">
+ <bool>false</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
</widget>
</item>
<item row="0" column="4">
@@ -83,31 +71,69 @@
</property>
</spacer>
</item>
- <item row="0" column="5">
- <widget class="QPushButton" name="connectButton">
+ <item row="0" column="6">
+ <widget class="QSpinBox" name="serverEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="text">
- <string>Connect</string>
+ <property name="minimum">
+ <number>1</number>
</property>
- <property name="checkable">
- <bool>false</bool>
+ <property name="maximum">
+ <number>247</number>
</property>
- <property name="autoDefault">
- <bool>false</bool>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="connectType">
+ <item>
+ <property name="text">
+ <string>Serial</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>TCP</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="label_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="default">
- <bool>true</bool>
+ <property name="text">
+ <string>Port:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Connection type:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QLineEdit" name="portEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
- <item>
+ <item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,0">
<item>
<widget class="QFrame" name="frame">
@@ -129,7 +155,14 @@
</property>
<item>
<layout class="QGridLayout" name="gridLayout_2">
- <item row="5" column="1">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>Start address:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_3">
@@ -153,29 +186,7 @@
</item>
</layout>
</item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="writeServer">
- <property name="readOnly">
- <bool>false</bool>
- </property>
- <property name="specialValueText">
- <string>broadcast</string>
- </property>
- <property name="accelerated">
- <bool>true</bool>
- </property>
- <property name="minimum">
- <number>0</number>
- </property>
- <property name="maximum">
- <number>255</number>
- </property>
- <property name="value">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
+ <item row="2" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Number of values:</string>
@@ -183,27 +194,13 @@
</widget>
</item>
<item row="1" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Address:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="writeAddress">
- <property name="maximum">
- <number>9</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Table:</string>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="1" column="1">
<widget class="QComboBox" name="writeTable">
<item>
<property name="text">
@@ -217,18 +214,18 @@
</item>
</widget>
</item>
- <item row="0" column="0">
- <widget class="QLabel" name="label_10">
- <property name="text">
- <string>Server Address:</string>
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="writeAddress">
+ <property name="maximum">
+ <number>9</number>
</property>
</widget>
</item>
- <item row="4" column="0" colspan="2">
- <widget class="QTableView" name="writeValueTable"/>
- </item>
- <item row="3" column="1">
+ <item row="2" column="1">
<widget class="QComboBox" name="writeSize">
+ <property name="currentIndex">
+ <number>9</number>
+ </property>
<item>
<property name="text">
<string>1</string>
@@ -281,6 +278,31 @@
</item>
</widget>
</item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QTreeView" name="writeValueTable">
+ <property name="showDropIndicator" stdset="0">
+ <bool>true</bool>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ <property name="itemsExpandable">
+ <bool>false</bool>
+ </property>
+ <property name="expandsOnDoubleClick">
+ <bool>false</bool>
+ </property>
+ <attribute name="headerVisible">
+ <bool>true</bool>
+ </attribute>
+ </widget>
+ </item>
</layout>
</item>
</layout>
@@ -303,7 +325,61 @@
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QGridLayout" name="gridLayout_3">
- <item row="3" column="1">
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Values:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Number of values:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1" rowspan="2">
+ <widget class="QListWidget" name="readValue"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Table:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="readTable"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="readAddress">
+ <property name="maximum">
+ <number>9</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Start address:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
<widget class="QComboBox" name="readSize">
<item>
<property name="text">
@@ -357,7 +433,7 @@
</item>
</widget>
</item>
- <item row="6" column="1">
+ <item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer_2">
@@ -387,89 +463,6 @@
</item>
</layout>
</item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="readAddress">
- <property name="maximum">
- <number>9</number>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>Server Address:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="readTable"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Start address:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="readServer">
- <property name="readOnly">
- <bool>false</bool>
- </property>
- <property name="specialValueText">
- <string>broadcast</string>
- </property>
- <property name="accelerated">
- <bool>true</bool>
- </property>
- <property name="minimum">
- <number>0</number>
- </property>
- <property name="maximum">
- <number>255</number>
- </property>
- <property name="value">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>Values:</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Number of values:</string>
- </property>
- </widget>
- </item>
- <item row="5" column="0">
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="4" column="1" rowspan="2">
- <widget class="QListWidget" name="readValue"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Table:</string>
- </property>
- </widget>
- </item>
</layout>
</item>
</layout>
@@ -485,7 +478,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>517</width>
+ <width>514</width>
<height>21</height>
</rect>
</property>
@@ -545,6 +538,22 @@
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
+ <tabstops>
+ <tabstop>connectType</tabstop>
+ <tabstop>portEdit</tabstop>
+ <tabstop>serverEdit</tabstop>
+ <tabstop>connectButton</tabstop>
+ <tabstop>writeAddress</tabstop>
+ <tabstop>writeTable</tabstop>
+ <tabstop>writeSize</tabstop>
+ <tabstop>writeValueTable</tabstop>
+ <tabstop>writeButton</tabstop>
+ <tabstop>readAddress</tabstop>
+ <tabstop>readTable</tabstop>
+ <tabstop>readSize</tabstop>
+ <tabstop>readValue</tabstop>
+ <tabstop>readButton</tabstop>
+ </tabstops>
<resources>
<include location="master.qrc"/>
</resources>
diff --git a/examples/serialbus/modbus/master/writeregistermodel.cpp b/examples/serialbus/modbus/master/writeregistermodel.cpp
index d3656fe..f0ed26e 100644
--- a/examples/serialbus/modbus/master/writeregistermodel.cpp
+++ b/examples/serialbus/modbus/master/writeregistermodel.cpp
@@ -41,7 +41,11 @@
#include "writeregistermodel.h"
#define ROW_COUNT 10
-#define COLUMN_COUNT 2
+#define COLUMN_COUNT 3
+
+#define COLUMN_NUM 0
+#define COLUMN_COILS 1
+#define COLUMN_HOLDING 2
WriteRegisterModel::WriteRegisterModel(QObject *parent)
: QAbstractTableModel(parent),
@@ -67,9 +71,13 @@ QVariant WriteRegisterModel::data(const QModelIndex &index, int role) const
Q_ASSERT(m_coils.count() == ROW_COUNT);
Q_ASSERT(m_holdingRegisters.count() == ROW_COUNT);
- if (index.column() == 0 && role == Qt::CheckStateRole) // coils
+ if (index.column() == COLUMN_NUM && role == Qt::DisplayRole)
+ return QString::number(index.row());
+
+ if (index.column() == COLUMN_COILS && role == Qt::CheckStateRole) // coils
return m_coils.at(index.row()) ? Qt::Checked : Qt::Unchecked;
- else if (index.column() == 1 && role != Qt::CheckStateRole) //holding registers
+
+ else if (index.column() == COLUMN_HOLDING && role == Qt::DisplayRole) //holding registers
return QString("0x%1").arg(QString::number(m_holdingRegisters.at(index.row()), 16));
return QVariant();
@@ -82,13 +90,18 @@ QVariant WriteRegisterModel::headerData(int section, Qt::Orientation orientation
return QVariant();
if (orientation == Qt::Horizontal) {
- if (section == 0)
+ switch (section) {
+ case COLUMN_NUM:
+ return QStringLiteral("#");
+ case COLUMN_COILS:
return QStringLiteral("Coils ");
- else
+ case COLUMN_HOLDING:
return QStringLiteral("Holding Registers");
- } else {
- return QString::number(section);
+ default:
+ break;
+ }
}
+ return QVariant();
}
bool WriteRegisterModel::setData(const QModelIndex &index, const QVariant &value, int role)
@@ -99,12 +112,14 @@ bool WriteRegisterModel::setData(const QModelIndex &index, const QVariant &value
Q_ASSERT(m_coils.count() == ROW_COUNT);
Q_ASSERT(m_holdingRegisters.count() == ROW_COUNT);
- if (index.column() == 0 && role == Qt::CheckStateRole) { // coils
+ if (index.column() == COLUMN_COILS && role == Qt::CheckStateRole) { // coils
Qt::CheckState s = static_cast<Qt::CheckState>(value.toUInt());
s == Qt::Checked ? m_coils.setBit(index.row()) : m_coils.clearBit(index.row());
emit dataChanged(index, index);
return true;
- } else if (index.column() == 1 && Qt::EditRole) { // holding registers
+ }
+
+ if (index.column() == COLUMN_HOLDING && Qt::EditRole) { // holding registers
bool result = false;
quint16 newValue = value.toString().toUShort(&result, 16);
if (result)
@@ -119,15 +134,29 @@ bool WriteRegisterModel::setData(const QModelIndex &index, const QVariant &value
Qt::ItemFlags WriteRegisterModel::flags(const QModelIndex &index) const
{
- if (!index.isValid() || index.row() >= ROW_COUNT || index.column() >= COLUMN_COUNT)
+ if (!index.isValid() || index.row() >= ROW_COUNT || index.column() >= COLUMN_COUNT)
return QAbstractTableModel::flags(index);
- if (index.column() == 0) //coils
- return QAbstractTableModel::flags(index) | Qt::ItemIsUserCheckable;
+ Qt::ItemFlags flags = QAbstractTableModel::flags(index);
+ if ((index.row() < m_address) || (index.row() >= (m_address + m_number)))
+ flags &= ~Qt::ItemIsEnabled;
+
+ if (index.column() == COLUMN_COILS) //coils
+ return flags | Qt::ItemIsUserCheckable;
+ if (index.column() == COLUMN_HOLDING) //holding registers
+ return flags | Qt::ItemIsEditable;
- if (index.column() == 1) //holding registers
- return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
+ return flags;
+}
- return QAbstractTableModel::flags(index);
+void WriteRegisterModel::setStartAddress(int address)
+{
+ m_address = address;
+ emit updateViewport();
}
+void WriteRegisterModel::setNumberOfValues(const QString &number)
+{
+ m_number = number.toInt();
+ emit updateViewport();
+}
diff --git a/examples/serialbus/modbus/master/writeregistermodel.h b/examples/serialbus/modbus/master/writeregistermodel.h
index 101d6d9..3705df9 100644
--- a/examples/serialbus/modbus/master/writeregistermodel.h
+++ b/examples/serialbus/modbus/master/writeregistermodel.h
@@ -43,9 +43,12 @@
#include <QtCore/qabstractitemmodel.h>
#include <QtCore/qbitarray.h>
+#include <QtCore/qobject.h>
class WriteRegisterModel : public QAbstractTableModel
{
+ Q_OBJECT
+
public:
WriteRegisterModel(QObject* parent = 0);
@@ -58,7 +61,16 @@ public:
Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+public slots:
+ void setStartAddress(int address);
+ void setNumberOfValues(const QString &number);
+
+signals:
+ void updateViewport();
+
public:
+ int m_number;
+ int m_address;
QBitArray m_coils;
QVector<quint16> m_holdingRegisters;
};
diff --git a/examples/serialbus/modbus/slave/mainwindow.ui b/examples/serialbus/modbus/slave/mainwindow.ui
index c9ad757..61a0ba4 100644
--- a/examples/serialbus/modbus/slave/mainwindow.ui
+++ b/examples/serialbus/modbus/slave/mainwindow.ui
@@ -772,6 +772,52 @@
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
+ <tabstops>
+ <tabstop>connectType</tabstop>
+ <tabstop>portEdit</tabstop>
+ <tabstop>serverEdit</tabstop>
+ <tabstop>connectButton</tabstop>
+ <tabstop>coils_0</tabstop>
+ <tabstop>disc_0</tabstop>
+ <tabstop>inReg_0</tabstop>
+ <tabstop>holdReg_0</tabstop>
+ <tabstop>coils_1</tabstop>
+ <tabstop>disc_1</tabstop>
+ <tabstop>inReg_1</tabstop>
+ <tabstop>holdReg_1</tabstop>
+ <tabstop>coils_2</tabstop>
+ <tabstop>disc_2</tabstop>
+ <tabstop>inReg_2</tabstop>
+ <tabstop>holdReg_2</tabstop>
+ <tabstop>coils_3</tabstop>
+ <tabstop>disc_3</tabstop>
+ <tabstop>inReg_3</tabstop>
+ <tabstop>holdReg_3</tabstop>
+ <tabstop>coils_4</tabstop>
+ <tabstop>disc_4</tabstop>
+ <tabstop>inReg_4</tabstop>
+ <tabstop>holdReg_4</tabstop>
+ <tabstop>coils_5</tabstop>
+ <tabstop>disc_5</tabstop>
+ <tabstop>inReg_5</tabstop>
+ <tabstop>holdReg_5</tabstop>
+ <tabstop>coils_6</tabstop>
+ <tabstop>disc_6</tabstop>
+ <tabstop>inReg_6</tabstop>
+ <tabstop>holdReg_6</tabstop>
+ <tabstop>coils_7</tabstop>
+ <tabstop>disc_7</tabstop>
+ <tabstop>inReg_7</tabstop>
+ <tabstop>holdReg_7</tabstop>
+ <tabstop>coils_8</tabstop>
+ <tabstop>disc_8</tabstop>
+ <tabstop>inReg_8</tabstop>
+ <tabstop>holdReg_8</tabstop>
+ <tabstop>coils_9</tabstop>
+ <tabstop>disc_9</tabstop>
+ <tabstop>inReg_9</tabstop>
+ <tabstop>holdReg_9</tabstop>
+ </tabstops>
<resources>
<include location="slave.qrc"/>
</resources>