summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--dist/changes-5.10.028
-rw-r--r--examples/serialport/blockingmaster/blockingmaster.pro1
-rw-r--r--examples/serialport/blockingmaster/dialog.cpp104
-rw-r--r--examples/serialport/blockingmaster/dialog.h26
-rw-r--r--examples/serialport/blockingmaster/main.cpp4
-rw-r--r--examples/serialport/blockingmaster/masterthread.cpp87
-rw-r--r--examples/serialport/blockingmaster/masterthread.h17
-rw-r--r--examples/serialport/blockingslave/blockingslave.pro1
-rw-r--r--examples/serialport/blockingslave/dialog.cpp107
-rw-r--r--examples/serialport/blockingslave/dialog.h26
-rw-r--r--examples/serialport/blockingslave/main.cpp4
-rw-r--r--examples/serialport/blockingslave/slavethread.cpp62
-rw-r--r--examples/serialport/blockingslave/slavethread.h15
-rw-r--r--examples/serialport/cenumerator/main.cpp32
-rw-r--r--examples/serialport/creaderasync/main.cpp26
-rw-r--r--examples/serialport/creaderasync/serialportreader.cpp32
-rw-r--r--examples/serialport/creaderasync/serialportreader.h17
-rw-r--r--examples/serialport/creadersync/main.cpp32
-rw-r--r--examples/serialport/cwriterasync/main.cpp26
-rw-r--r--examples/serialport/cwriterasync/serialportwriter.cpp46
-rw-r--r--examples/serialport/cwriterasync/serialportwriter.h23
-rw-r--r--examples/serialport/cwritersync/main.cpp46
-rw-r--r--examples/serialport/enumerator/main.cpp8
-rw-r--r--examples/serialport/master/dialog.cpp113
-rw-r--r--examples/serialport/master/dialog.h31
-rw-r--r--examples/serialport/master/main.cpp4
-rw-r--r--examples/serialport/master/master.pro1
-rw-r--r--examples/serialport/slave/dialog.cpp117
-rw-r--r--examples/serialport/slave/dialog.h31
-rw-r--r--examples/serialport/slave/main.cpp4
-rw-r--r--examples/serialport/slave/slave.pro1
-rw-r--r--examples/serialport/terminal/console.cpp14
-rw-r--r--examples/serialport/terminal/console.h12
-rw-r--r--examples/serialport/terminal/main.cpp4
-rw-r--r--examples/serialport/terminal/mainwindow.cpp108
-rw-r--r--examples/serialport/terminal/mainwindow.h15
-rw-r--r--examples/serialport/terminal/settingsdialog.cpp147
-rw-r--r--examples/serialport/terminal/settingsdialog.h10
-rw-r--r--examples/serialport/terminal/terminal.pro1
-rw-r--r--src/serialport/doc/src/index.qdoc11
-rw-r--r--src/serialport/doc/src/qtserialport-module.qdoc10
-rw-r--r--src/serialport/qserialport.cpp59
-rw-r--r--src/serialport/qserialport_p.h83
-rw-r--r--src/serialport/qserialport_unix.cpp47
-rw-r--r--src/serialport/qserialport_win.cpp129
-rw-r--r--src/serialport/qserialportinfo_p.h20
-rw-r--r--src/serialport/qwinoverlappedionotifier.cpp420
-rw-r--r--src/serialport/qwinoverlappedionotifier_p.h91
-rw-r--r--src/serialport/serialport-lib.pri6
-rw-r--r--tests/auto/bic/data/QtSerialPort.5.10.0.linux-gcc-amd64.txt4595
51 files changed, 5933 insertions, 923 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 4f571fb..0338efe 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,3 +1,3 @@
load(qt_build_config)
-MODULE_VERSION = 5.9.4
+MODULE_VERSION = 5.10.1
diff --git a/dist/changes-5.10.0 b/dist/changes-5.10.0
new file mode 100644
index 0000000..c92d378
--- /dev/null
+++ b/dist/changes-5.10.0
@@ -0,0 +1,28 @@
+Qt 5.10 introduces many new features and improvements as well as bugfixes
+over the 5.9.x series. For more details, refer to the online documentation
+included in this distribution. The documentation is also available online:
+
+http://doc.qt.io/qt-5/index.html
+
+The Qt version 5.10 series is binary compatible with the 5.9.x series.
+Applications compiled for 5.9 will continue to run with 5.10.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Qt 5.10.0 Changes *
+****************************************************************************
+
+ - [QTBUG-60652] Updated the examples according to good coding practices
+ and current conventions.
+
+ - QSerialPort:
+ * Increased the internal buffer chunk size to improve performance.
+ * Fixed build on Android with the API level more than 21.
+ * Improved read performance when the buffer size is limited.
diff --git a/examples/serialport/blockingmaster/blockingmaster.pro b/examples/serialport/blockingmaster/blockingmaster.pro
index 7cf76d8..8e3356b 100644
--- a/examples/serialport/blockingmaster/blockingmaster.pro
+++ b/examples/serialport/blockingmaster/blockingmaster.pro
@@ -1,4 +1,5 @@
QT += widgets serialport
+requires(qtConfig(combobox))
TARGET = blockingmaster
TEMPLATE = app
diff --git a/examples/serialport/blockingmaster/dialog.cpp b/examples/serialport/blockingmaster/dialog.cpp
index 08403c3..2617da7 100644
--- a/examples/serialport/blockingmaster/dialog.cpp
+++ b/examples/serialport/blockingmaster/dialog.cpp
@@ -50,95 +50,93 @@
#include "dialog.h"
+#include <QComboBox>
+#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
-#include <QComboBox>
-#include <QSpinBox>
#include <QPushButton>
-#include <QGridLayout>
-
-#include <QtSerialPort/QSerialPortInfo>
-
-QT_USE_NAMESPACE
+#include <QSerialPortInfo>
+#include <QSpinBox>
-Dialog::Dialog(QWidget *parent)
- : QDialog(parent)
- , transactionCount(0)
- , serialPortLabel(new QLabel(tr("Serial port:")))
- , serialPortComboBox(new QComboBox())
- , waitResponseLabel(new QLabel(tr("Wait response, msec:")))
- , waitResponseSpinBox(new QSpinBox())
- , requestLabel(new QLabel(tr("Request:")))
- , requestLineEdit(new QLineEdit(tr("Who are you?")))
- , trafficLabel(new QLabel(tr("No traffic.")))
- , statusLabel(new QLabel(tr("Status: Not running.")))
- , runButton(new QPushButton(tr("Start")))
+Dialog::Dialog(QWidget *parent) :
+ QDialog(parent),
+ m_serialPortLabel(new QLabel(tr("Serial port:"))),
+ m_serialPortComboBox(new QComboBox),
+ m_waitResponseLabel(new QLabel(tr("Wait response, msec:"))),
+ m_waitResponseSpinBox(new QSpinBox),
+ m_requestLabel(new QLabel(tr("Request:"))),
+ m_requestLineEdit(new QLineEdit(tr("Who are you?"))),
+ m_trafficLabel(new QLabel(tr("No traffic."))),
+ m_statusLabel(new QLabel(tr("Status: Not running."))),
+ m_runButton(new QPushButton(tr("Start")))
{
const auto infos = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo &info : infos)
- serialPortComboBox->addItem(info.portName());
+ m_serialPortComboBox->addItem(info.portName());
- waitResponseSpinBox->setRange(0, 10000);
- waitResponseSpinBox->setValue(1000);
+ m_waitResponseSpinBox->setRange(0, 10000);
+ m_waitResponseSpinBox->setValue(1000);
auto mainLayout = new QGridLayout;
- mainLayout->addWidget(serialPortLabel, 0, 0);
- mainLayout->addWidget(serialPortComboBox, 0, 1);
- mainLayout->addWidget(waitResponseLabel, 1, 0);
- mainLayout->addWidget(waitResponseSpinBox, 1, 1);
- mainLayout->addWidget(runButton, 0, 2, 2, 1);
- mainLayout->addWidget(requestLabel, 2, 0);
- mainLayout->addWidget(requestLineEdit, 2, 1, 1, 3);
- mainLayout->addWidget(trafficLabel, 3, 0, 1, 4);
- mainLayout->addWidget(statusLabel, 4, 0, 1, 5);
+ mainLayout->addWidget(m_serialPortLabel, 0, 0);
+ mainLayout->addWidget(m_serialPortComboBox, 0, 1);
+ mainLayout->addWidget(m_waitResponseLabel, 1, 0);
+ mainLayout->addWidget(m_waitResponseSpinBox, 1, 1);
+ mainLayout->addWidget(m_runButton, 0, 2, 2, 1);
+ mainLayout->addWidget(m_requestLabel, 2, 0);
+ mainLayout->addWidget(m_requestLineEdit, 2, 1, 1, 3);
+ mainLayout->addWidget(m_trafficLabel, 3, 0, 1, 4);
+ mainLayout->addWidget(m_statusLabel, 4, 0, 1, 5);
setLayout(mainLayout);
setWindowTitle(tr("Blocking Master"));
- serialPortComboBox->setFocus();
+ m_serialPortComboBox->setFocus();
- connect(runButton, &QPushButton::clicked, this, &Dialog::transaction);
- connect(&thread, &MasterThread::response, this, &Dialog::showResponse);
- connect(&thread, &MasterThread::error, this, &Dialog::processError);
- connect(&thread, &MasterThread::timeout, this, &Dialog::processTimeout);
+ connect(m_runButton, &QPushButton::clicked, this, &Dialog::transaction);
+ connect(&m_thread, &MasterThread::response, this, &Dialog::showResponse);
+ connect(&m_thread, &MasterThread::error, this, &Dialog::processError);
+ connect(&m_thread, &MasterThread::timeout, this, &Dialog::processTimeout);
}
void Dialog::transaction()
{
setControlsEnabled(false);
- statusLabel->setText(tr("Status: Running, connected to port %1.")
- .arg(serialPortComboBox->currentText()));
- thread.transaction(serialPortComboBox->currentText(),
- waitResponseSpinBox->value(),
- requestLineEdit->text());
+ m_statusLabel->setText(tr("Status: Running, connected to port %1.")
+ .arg(m_serialPortComboBox->currentText()));
+ m_thread.transaction(m_serialPortComboBox->currentText(),
+ m_waitResponseSpinBox->value(),
+ m_requestLineEdit->text());
}
void Dialog::showResponse(const QString &s)
{
setControlsEnabled(true);
- trafficLabel->setText(tr("Traffic, transaction #%1:"
- "\n\r-request: %2"
- "\n\r-response: %3")
- .arg(++transactionCount).arg(requestLineEdit->text()).arg(s));
+ m_trafficLabel->setText(tr("Traffic, transaction #%1:"
+ "\n\r-request: %2"
+ "\n\r-response: %3")
+ .arg(++m_transactionCount)
+ .arg(m_requestLineEdit->text())
+ .arg(s));
}
void Dialog::processError(const QString &s)
{
setControlsEnabled(true);
- statusLabel->setText(tr("Status: Not running, %1.").arg(s));
- trafficLabel->setText(tr("No traffic."));
+ m_statusLabel->setText(tr("Status: Not running, %1.").arg(s));
+ m_trafficLabel->setText(tr("No traffic."));
}
void Dialog::processTimeout(const QString &s)
{
setControlsEnabled(true);
- statusLabel->setText(tr("Status: Running, %1.").arg(s));
- trafficLabel->setText(tr("No traffic."));
+ m_statusLabel->setText(tr("Status: Running, %1.").arg(s));
+ m_trafficLabel->setText(tr("No traffic."));
}
void Dialog::setControlsEnabled(bool enable)
{
- runButton->setEnabled(enable);
- serialPortComboBox->setEnabled(enable);
- waitResponseSpinBox->setEnabled(enable);
- requestLineEdit->setEnabled(enable);
+ m_runButton->setEnabled(enable);
+ m_serialPortComboBox->setEnabled(enable);
+ m_waitResponseSpinBox->setEnabled(enable);
+ m_requestLineEdit->setEnabled(enable);
}
diff --git a/examples/serialport/blockingmaster/dialog.h b/examples/serialport/blockingmaster/dialog.h
index aff8177..8d997fa 100644
--- a/examples/serialport/blockingmaster/dialog.h
+++ b/examples/serialport/blockingmaster/dialog.h
@@ -51,10 +51,10 @@
#ifndef DIALOG_H
#define DIALOG_H
-#include <QDialog>
-
#include "masterthread.h"
+#include <QDialog>
+
QT_BEGIN_NAMESPACE
class QLabel;
@@ -82,18 +82,18 @@ private:
void setControlsEnabled(bool enable);
private:
- int transactionCount;
- QLabel *serialPortLabel;
- QComboBox *serialPortComboBox;
- QLabel *waitResponseLabel;
- QSpinBox *waitResponseSpinBox;
- QLabel *requestLabel;
- QLineEdit *requestLineEdit;
- QLabel *trafficLabel;
- QLabel *statusLabel;
- QPushButton *runButton;
+ int m_transactionCount = 0;
+ QLabel *m_serialPortLabel = nullptr;
+ QComboBox *m_serialPortComboBox = nullptr;
+ QLabel *m_waitResponseLabel = nullptr;
+ QSpinBox *m_waitResponseSpinBox = nullptr;
+ QLabel *m_requestLabel = nullptr;
+ QLineEdit *m_requestLineEdit = nullptr;
+ QLabel *m_trafficLabel = nullptr;
+ QLabel *m_statusLabel = nullptr;
+ QPushButton *m_runButton = nullptr;
- MasterThread thread;
+ MasterThread m_thread;
};
#endif // DIALOG_H
diff --git a/examples/serialport/blockingmaster/main.cpp b/examples/serialport/blockingmaster/main.cpp
index cf4c421..8e68c73 100644
--- a/examples/serialport/blockingmaster/main.cpp
+++ b/examples/serialport/blockingmaster/main.cpp
@@ -48,10 +48,10 @@
**
****************************************************************************/
-#include <QApplication>
-
#include "dialog.h"
+#include <QApplication>
+
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
diff --git a/examples/serialport/blockingmaster/masterthread.cpp b/examples/serialport/blockingmaster/masterthread.cpp
index 5ad93fd..25aa848 100644
--- a/examples/serialport/blockingmaster/masterthread.cpp
+++ b/examples/serialport/blockingmaster/masterthread.cpp
@@ -50,24 +50,21 @@
#include "masterthread.h"
-#include <QtSerialPort/QSerialPort>
-
+#include <QSerialPort>
#include <QTime>
-QT_USE_NAMESPACE
-
-MasterThread::MasterThread(QObject *parent)
- : QThread(parent), waitTimeout(0), quit(false)
+MasterThread::MasterThread(QObject *parent) :
+ QThread(parent)
{
}
//! [0]
MasterThread::~MasterThread()
{
- mutex.lock();
- quit = true;
- cond.wakeOne();
- mutex.unlock();
+ m_mutex.lock();
+ m_quit = true;
+ m_cond.wakeOne();
+ m_mutex.unlock();
wait();
}
//! [0]
@@ -75,16 +72,16 @@ MasterThread::~MasterThread()
//! [1] //! [2]
void MasterThread::transaction(const QString &portName, int waitTimeout, const QString &request)
{
- //! [1]
- QMutexLocker locker(&mutex);
- this->portName = portName;
- this->waitTimeout = waitTimeout;
- this->request = request;
- //! [3]
+//! [1]
+ const QMutexLocker locker(&m_mutex);
+ m_portName = portName;
+ m_waitTimeout = waitTimeout;
+ m_request = request;
+//! [3]
if (!isRunning())
start();
else
- cond.wakeOne();
+ m_cond.wakeOne();
}
//! [2] //! [3]
@@ -93,18 +90,18 @@ void MasterThread::run()
{
bool currentPortNameChanged = false;
- mutex.lock();
- //! [4] //! [5]
+ m_mutex.lock();
+//! [4] //! [5]
QString currentPortName;
- if (currentPortName != portName) {
- currentPortName = portName;
+ if (currentPortName != m_portName) {
+ currentPortName = m_portName;
currentPortNameChanged = true;
}
- int currentWaitTimeout = waitTimeout;
- QString currentRequest = request;
- mutex.unlock();
- //! [5] //! [6]
+ int currentWaitTimeout = m_waitTimeout;
+ QString currentRequest = m_request;
+ m_mutex.unlock();
+//! [5] //! [6]
QSerialPort serial;
if (currentPortName.isEmpty()) {
@@ -112,55 +109,55 @@ void MasterThread::run()
return;
}
- while (!quit) {
- //![6] //! [7]
+ while (!m_quit) {
+//![6] //! [7]
if (currentPortNameChanged) {
serial.close();
serial.setPortName(currentPortName);
if (!serial.open(QIODevice::ReadWrite)) {
emit error(tr("Can't open %1, error code %2")
- .arg(portName).arg(serial.error()));
+ .arg(m_portName).arg(serial.error()));
return;
}
}
- //! [7] //! [8]
+//! [7] //! [8]
// write request
- QByteArray requestData = currentRequest.toLocal8Bit();
+ const QByteArray requestData = currentRequest.toUtf8();
serial.write(requestData);
- if (serial.waitForBytesWritten(waitTimeout)) {
- //! [8] //! [10]
+ if (serial.waitForBytesWritten(m_waitTimeout)) {
+//! [8] //! [10]
// read response
if (serial.waitForReadyRead(currentWaitTimeout)) {
QByteArray responseData = serial.readAll();
while (serial.waitForReadyRead(10))
responseData += serial.readAll();
- QString response(responseData);
- //! [12]
+ const QString response = QString::fromUtf8(responseData);
+//! [12]
emit this->response(response);
- //! [10] //! [11] //! [12]
+//! [10] //! [11] //! [12]
} else {
emit timeout(tr("Wait read response timeout %1")
.arg(QTime::currentTime().toString()));
}
- //! [9] //! [11]
+//! [9] //! [11]
} else {
emit timeout(tr("Wait write request timeout %1")
.arg(QTime::currentTime().toString()));
}
- //! [9] //! [13]
- mutex.lock();
- cond.wait(&mutex);
- if (currentPortName != portName) {
- currentPortName = portName;
+//! [9] //! [13]
+ m_mutex.lock();
+ m_cond.wait(&m_mutex);
+ if (currentPortName != m_portName) {
+ currentPortName = m_portName;
currentPortNameChanged = true;
} else {
currentPortNameChanged = false;
}
- currentWaitTimeout = waitTimeout;
- currentRequest = request;
- mutex.unlock();
+ currentWaitTimeout = m_waitTimeout;
+ currentRequest = m_request;
+ m_mutex.unlock();
}
- //! [13]
+//! [13]
}
diff --git a/examples/serialport/blockingmaster/masterthread.h b/examples/serialport/blockingmaster/masterthread.h
index f23559f..9dc6048 100644
--- a/examples/serialport/blockingmaster/masterthread.h
+++ b/examples/serialport/blockingmaster/masterthread.h
@@ -51,8 +51,8 @@
#ifndef MASTERTHREAD_H
#define MASTERTHREAD_H
-#include <QThread>
#include <QMutex>
+#include <QThread>
#include <QWaitCondition>
//! [0]
@@ -65,7 +65,6 @@ public:
~MasterThread();
void transaction(const QString &portName, int waitTimeout, const QString &request);
- void run() Q_DECL_OVERRIDE;
signals:
void response(const QString &s);
@@ -73,12 +72,14 @@ signals:
void timeout(const QString &s);
private:
- QString portName;
- QString request;
- int waitTimeout;
- QMutex mutex;
- QWaitCondition cond;
- bool quit;
+ void run() override;
+
+ QString m_portName;
+ QString m_request;
+ int m_waitTimeout = 0;
+ QMutex m_mutex;
+ QWaitCondition m_cond;
+ bool m_quit = false;
};
//! [0]
diff --git a/examples/serialport/blockingslave/blockingslave.pro b/examples/serialport/blockingslave/blockingslave.pro
index 11b9b80..4e2a25d 100644
--- a/examples/serialport/blockingslave/blockingslave.pro
+++ b/examples/serialport/blockingslave/blockingslave.pro
@@ -1,4 +1,5 @@
QT += widgets serialport
+requires(qtConfig(combobox))
TARGET = blockingslave
TEMPLATE = app
diff --git a/examples/serialport/blockingslave/dialog.cpp b/examples/serialport/blockingslave/dialog.cpp
index 3bfd419..1723086 100644
--- a/examples/serialport/blockingslave/dialog.cpp
+++ b/examples/serialport/blockingslave/dialog.cpp
@@ -50,95 +50,94 @@
#include "dialog.h"
+#include <QComboBox>
+#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
-#include <QComboBox>
-#include <QSpinBox>
#include <QPushButton>
-#include <QGridLayout>
-
-#include <QtSerialPort/QSerialPortInfo>
-
-QT_USE_NAMESPACE
+#include <QSerialPortInfo>
+#include <QSpinBox>
-Dialog::Dialog(QWidget *parent)
- : QDialog(parent)
- , transactionCount(0)
- , serialPortLabel(new QLabel(tr("Serial port:")))
- , serialPortComboBox(new QComboBox())
- , waitRequestLabel(new QLabel(tr("Wait request, msec:")))
- , waitRequestSpinBox(new QSpinBox())
- , responseLabel(new QLabel(tr("Response:")))
- , responseLineEdit(new QLineEdit(tr("Hello, I'm Slave.")))
- , trafficLabel(new QLabel(tr("No traffic.")))
- , statusLabel(new QLabel(tr("Status: Not running.")))
- , runButton(new QPushButton(tr("Start")))
+Dialog::Dialog(QWidget *parent) :
+ QDialog(parent),
+ m_serialPortLabel(new QLabel(tr("Serial port:"))),
+ m_serialPortComboBox(new QComboBox),
+ m_waitRequestLabel(new QLabel(tr("Wait request, msec:"))),
+ m_waitRequestSpinBox(new QSpinBox),
+ m_responseLabel(new QLabel(tr("Response:"))),
+ m_responseLineEdit(new QLineEdit(tr("Hello, I'm Slave."))),
+ m_trafficLabel(new QLabel(tr("No traffic."))),
+ m_statusLabel(new QLabel(tr("Status: Not running."))),
+ m_runButton(new QPushButton(tr("Start")))
{
- waitRequestSpinBox->setRange(0, 10000);
- waitRequestSpinBox->setValue(10000);
+ m_waitRequestSpinBox->setRange(0, 10000);
+ m_waitRequestSpinBox->setValue(10000);
const auto infos = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo &info : infos)
- serialPortComboBox->addItem(info.portName());
+ m_serialPortComboBox->addItem(info.portName());
auto mainLayout = new QGridLayout;
- mainLayout->addWidget(serialPortLabel, 0, 0);
- mainLayout->addWidget(serialPortComboBox, 0, 1);
- mainLayout->addWidget(waitRequestLabel, 1, 0);
- mainLayout->addWidget(waitRequestSpinBox, 1, 1);
- mainLayout->addWidget(runButton, 0, 2, 2, 1);
- mainLayout->addWidget(responseLabel, 2, 0);
- mainLayout->addWidget(responseLineEdit, 2, 1, 1, 3);
- mainLayout->addWidget(trafficLabel, 3, 0, 1, 4);
- mainLayout->addWidget(statusLabel, 4, 0, 1, 5);
+ mainLayout->addWidget(m_serialPortLabel, 0, 0);
+ mainLayout->addWidget(m_serialPortComboBox, 0, 1);
+ mainLayout->addWidget(m_waitRequestLabel, 1, 0);
+ mainLayout->addWidget(m_waitRequestSpinBox, 1, 1);
+ mainLayout->addWidget(m_runButton, 0, 2, 2, 1);
+ mainLayout->addWidget(m_responseLabel, 2, 0);
+ mainLayout->addWidget(m_responseLineEdit, 2, 1, 1, 3);
+ mainLayout->addWidget(m_trafficLabel, 3, 0, 1, 4);
+ mainLayout->addWidget(m_statusLabel, 4, 0, 1, 5);
setLayout(mainLayout);
setWindowTitle(tr("Blocking Slave"));
- serialPortComboBox->setFocus();
+ m_serialPortComboBox->setFocus();
- connect(runButton, &QPushButton::clicked, this, &Dialog::startSlave);
- connect(&thread, &SlaveThread::request, this,&Dialog::showRequest);
- connect(&thread, &SlaveThread::error, this, &Dialog::processError);
- connect(&thread, &SlaveThread::timeout, this, &Dialog::processTimeout);
+ connect(m_runButton, &QPushButton::clicked, this, &Dialog::startSlave);
+ connect(&m_thread, &SlaveThread::request, this,&Dialog::showRequest);
+ connect(&m_thread, &SlaveThread::error, this, &Dialog::processError);
+ connect(&m_thread, &SlaveThread::timeout, this, &Dialog::processTimeout);
- connect(serialPortComboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),
+ connect(m_serialPortComboBox, QOverload<const QString &>::of(&QComboBox::currentIndexChanged),
this, &Dialog::activateRunButton);
- connect(waitRequestSpinBox, static_cast<void (QSpinBox::*)(const QString &)>(&QSpinBox::valueChanged),
+ connect(m_waitRequestSpinBox, QOverload<const QString &>::of(&QSpinBox::valueChanged),
this, &Dialog::activateRunButton);
- connect(responseLineEdit, &QLineEdit::textChanged, this, &Dialog::activateRunButton);
+ connect(m_responseLineEdit, &QLineEdit::textChanged, this, &Dialog::activateRunButton);
}
void Dialog::startSlave()
{
- runButton->setEnabled(false);
- statusLabel->setText(tr("Status: Running, connected to port %1.")
- .arg(serialPortComboBox->currentText()));
- thread.startSlave(serialPortComboBox->currentText(),
- waitRequestSpinBox->value(),
- responseLineEdit->text());
+ m_runButton->setEnabled(false);
+ m_statusLabel->setText(tr("Status: Running, connected to port %1.")
+ .arg(m_serialPortComboBox->currentText()));
+ m_thread.startSlave(m_serialPortComboBox->currentText(),
+ m_waitRequestSpinBox->value(),
+ m_responseLineEdit->text());
}
void Dialog::showRequest(const QString &s)
{
- trafficLabel->setText(tr("Traffic, transaction #%1:"
- "\n\r-request: %2"
- "\n\r-response: %3")
- .arg(++transactionCount).arg(s).arg(responseLineEdit->text()));
+ m_trafficLabel->setText(tr("Traffic, transaction #%1:"
+ "\n\r-request: %2"
+ "\n\r-response: %3")
+ .arg(++m_transactionCount)
+ .arg(s)
+ .arg(m_responseLineEdit->text()));
}
void Dialog::processError(const QString &s)
{
activateRunButton();
- statusLabel->setText(tr("Status: Not running, %1.").arg(s));
- trafficLabel->setText(tr("No traffic."));
+ m_statusLabel->setText(tr("Status: Not running, %1.").arg(s));
+ m_trafficLabel->setText(tr("No traffic."));
}
void Dialog::processTimeout(const QString &s)
{
- statusLabel->setText(tr("Status: Running, %1.").arg(s));
- trafficLabel->setText(tr("No traffic."));
+ m_statusLabel->setText(tr("Status: Running, %1.").arg(s));
+ m_trafficLabel->setText(tr("No traffic."));
}
+
void Dialog::activateRunButton()
{
- runButton->setEnabled(true);
+ m_runButton->setEnabled(true);
}
diff --git a/examples/serialport/blockingslave/dialog.h b/examples/serialport/blockingslave/dialog.h
index 0e59410..c8f80a6 100644
--- a/examples/serialport/blockingslave/dialog.h
+++ b/examples/serialport/blockingslave/dialog.h
@@ -51,10 +51,10 @@
#ifndef DIALOG_H
#define DIALOG_H
-#include <QDialog>
-
#include "slavethread.h"
+#include <QDialog>
+
QT_BEGIN_NAMESPACE
class QLabel;
@@ -80,18 +80,18 @@ private slots:
void activateRunButton();
private:
- int transactionCount;
- QLabel *serialPortLabel;
- QComboBox *serialPortComboBox;
- QLabel *waitRequestLabel;
- QSpinBox *waitRequestSpinBox;
- QLabel *responseLabel;
- QLineEdit *responseLineEdit;
- QLabel *trafficLabel;
- QLabel *statusLabel;
- QPushButton *runButton;
+ int m_transactionCount = 0;
+ QLabel *m_serialPortLabel = nullptr;
+ QComboBox *m_serialPortComboBox = nullptr;
+ QLabel *m_waitRequestLabel = nullptr;
+ QSpinBox *m_waitRequestSpinBox = nullptr;
+ QLabel *m_responseLabel = nullptr;
+ QLineEdit *m_responseLineEdit = nullptr;
+ QLabel *m_trafficLabel = nullptr;
+ QLabel *m_statusLabel = nullptr;
+ QPushButton *m_runButton = nullptr;
- SlaveThread thread;
+ SlaveThread m_thread;
};
#endif // DIALOG_H
diff --git a/examples/serialport/blockingslave/main.cpp b/examples/serialport/blockingslave/main.cpp
index cf4c421..8e68c73 100644
--- a/examples/serialport/blockingslave/main.cpp
+++ b/examples/serialport/blockingslave/main.cpp
@@ -48,10 +48,10 @@
**
****************************************************************************/
-#include <QApplication>
-
#include "dialog.h"
+#include <QApplication>
+
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
diff --git a/examples/serialport/blockingslave/slavethread.cpp b/examples/serialport/blockingslave/slavethread.cpp
index 66bfb19..85b010a 100644
--- a/examples/serialport/blockingslave/slavethread.cpp
+++ b/examples/serialport/blockingslave/slavethread.cpp
@@ -50,22 +50,20 @@
#include "slavethread.h"
-#include <QtSerialPort/QSerialPort>
-
+#include <QSerialPort>
#include <QTime>
-QT_USE_NAMESPACE
-
-SlaveThread::SlaveThread(QObject *parent)
- : QThread(parent), waitTimeout(0), quit(false)
+SlaveThread::SlaveThread(QObject *parent) :
+ QThread(parent)
{
}
+
//! [0]
SlaveThread::~SlaveThread()
{
- mutex.lock();
- quit = true;
- mutex.unlock();
+ m_mutex.lock();
+ m_quit = true;
+ m_mutex.unlock();
wait();
}
//! [0]
@@ -73,12 +71,12 @@ SlaveThread::~SlaveThread()
//! [1] //! [2]
void SlaveThread::startSlave(const QString &portName, int waitTimeout, const QString &response)
{
-//! [1]
- QMutexLocker locker(&mutex);
- this->portName = portName;
- this->waitTimeout = waitTimeout;
- this->response = response;
-//! [3]
+ //! [1]
+ const QMutexLocker locker(&m_mutex);
+ m_portName = portName;
+ m_waitTimeout = waitTimeout;
+ m_response = response;
+ //! [3]
if (!isRunning())
start();
}
@@ -89,21 +87,21 @@ void SlaveThread::run()
{
bool currentPortNameChanged = false;
- mutex.lock();
+ m_mutex.lock();
//! [4] //! [5]
QString currentPortName;
- if (currentPortName != portName) {
- currentPortName = portName;
+ if (currentPortName != m_portName) {
+ currentPortName = m_portName;
currentPortNameChanged = true;
}
- int currentWaitTimeout = waitTimeout;
- QString currentRespone = response;
- mutex.unlock();
+ int currentWaitTimeout = m_waitTimeout;
+ QString currentRespone = m_response;
+ m_mutex.unlock();
//! [5] //! [6]
QSerialPort serial;
- while (!quit) {
+ while (!m_quit) {
//![6] //! [7]
if (currentPortNameChanged) {
serial.close();
@@ -111,7 +109,7 @@ void SlaveThread::run()
if (!serial.open(QIODevice::ReadWrite)) {
emit error(tr("Can't open %1, error code %2")
- .arg(portName).arg(serial.error()));
+ .arg(m_portName).arg(serial.error()));
return;
}
}
@@ -124,10 +122,10 @@ void SlaveThread::run()
requestData += serial.readAll();
//! [8] //! [10]
// write response
- QByteArray responseData = currentRespone.toLocal8Bit();
+ const QByteArray responseData = currentRespone.toUtf8();
serial.write(responseData);
- if (serial.waitForBytesWritten(waitTimeout)) {
- QString request(requestData);
+ if (serial.waitForBytesWritten(m_waitTimeout)) {
+ const QString request = QString::fromUtf8(requestData);
//! [12]
emit this->request(request);
//! [10] //! [11] //! [12]
@@ -141,16 +139,16 @@ void SlaveThread::run()
.arg(QTime::currentTime().toString()));
}
//! [9] //! [13]
- mutex.lock();
- if (currentPortName != portName) {
- currentPortName = portName;
+ m_mutex.lock();
+ if (currentPortName != m_portName) {
+ currentPortName = m_portName;
currentPortNameChanged = true;
} else {
currentPortNameChanged = false;
}
- currentWaitTimeout = waitTimeout;
- currentRespone = response;
- mutex.unlock();
+ currentWaitTimeout = m_waitTimeout;
+ currentRespone = m_response;
+ m_mutex.unlock();
}
//! [13]
}
diff --git a/examples/serialport/blockingslave/slavethread.h b/examples/serialport/blockingslave/slavethread.h
index 9a15e24..737e7cb 100644
--- a/examples/serialport/blockingslave/slavethread.h
+++ b/examples/serialport/blockingslave/slavethread.h
@@ -51,8 +51,8 @@
#ifndef SLAVETHREAD_H
#define SLAVETHREAD_H
-#include <QThread>
#include <QMutex>
+#include <QThread>
#include <QWaitCondition>
//! [0]
@@ -65,7 +65,6 @@ public:
~SlaveThread();
void startSlave(const QString &portName, int waitTimeout, const QString &response);
- void run() Q_DECL_OVERRIDE;
signals:
void request(const QString &s);
@@ -73,11 +72,13 @@ signals:
void timeout(const QString &s);
private:
- QString portName;
- QString response;
- int waitTimeout;
- QMutex mutex;
- bool quit;
+ void run() override;
+
+ QString m_portName;
+ QString m_response;
+ int m_waitTimeout = 0;
+ QMutex m_mutex;
+ bool m_quit = false;
};
//! [0]
diff --git a/examples/serialport/cenumerator/main.cpp b/examples/serialport/cenumerator/main.cpp
index f805021..af6d7e4 100644
--- a/examples/serialport/cenumerator/main.cpp
+++ b/examples/serialport/cenumerator/main.cpp
@@ -48,21 +48,19 @@
**
****************************************************************************/
-#include <QTextStream>
#include <QCoreApplication>
-#include <QtSerialPort/QSerialPortInfo>
-
-QT_USE_NAMESPACE
+#include <QSerialPortInfo>
+#include <QTextStream>
int main(int argc, char *argv[])
{
- QCoreApplication a(argc, argv);
+ QCoreApplication coreApplication(argc, argv);
QTextStream out(stdout);
const auto serialPortInfos = QSerialPortInfo::availablePorts();
- out << QObject::tr("Total number of ports available: ") << serialPortInfos.count() << endl;
+ out << "Total number of ports available: " << serialPortInfos.count() << endl;
- const QString blankString = QObject::tr("N/A");
+ const QString blankString = "N/A";
QString description;
QString manufacturer;
QString serialNumber;
@@ -72,14 +70,18 @@ int main(int argc, char *argv[])
manufacturer = serialPortInfo.manufacturer();
serialNumber = serialPortInfo.serialNumber();
out << endl
- << QObject::tr("Port: ") << serialPortInfo.portName() << endl
- << QObject::tr("Location: ") << serialPortInfo.systemLocation() << endl
- << QObject::tr("Description: ") << (!description.isEmpty() ? description : blankString) << endl
- << QObject::tr("Manufacturer: ") << (!manufacturer.isEmpty() ? manufacturer : blankString) << endl
- << QObject::tr("Serial number: ") << (!serialNumber.isEmpty() ? serialNumber : blankString) << endl
- << QObject::tr("Vendor Identifier: ") << (serialPortInfo.hasVendorIdentifier() ? QByteArray::number(serialPortInfo.vendorIdentifier(), 16) : blankString) << endl
- << QObject::tr("Product Identifier: ") << (serialPortInfo.hasProductIdentifier() ? QByteArray::number(serialPortInfo.productIdentifier(), 16) : blankString) << endl
- << QObject::tr("Busy: ") << (serialPortInfo.isBusy() ? QObject::tr("Yes") : QObject::tr("No")) << endl;
+ << "Port: " << serialPortInfo.portName() << endl
+ << "Location: " << serialPortInfo.systemLocation() << endl
+ << "Description: " << (!description.isEmpty() ? description : blankString) << endl
+ << "Manufacturer: " << (!manufacturer.isEmpty() ? manufacturer : blankString) << endl
+ << "Serial number: " << (!serialNumber.isEmpty() ? serialNumber : blankString) << endl
+ << "Vendor Identifier: " << (serialPortInfo.hasVendorIdentifier()
+ ? QByteArray::number(serialPortInfo.vendorIdentifier(), 16)
+ : blankString) << endl
+ << "Product Identifier: " << (serialPortInfo.hasProductIdentifier()
+ ? QByteArray::number(serialPortInfo.productIdentifier(), 16)
+ : blankString) << endl
+ << "Busy: " << (serialPortInfo.isBusy() ? "Yes" : "No") << endl;
}
return 0;
diff --git a/examples/serialport/creaderasync/main.cpp b/examples/serialport/creaderasync/main.cpp
index dd1f755..6c669ce 100644
--- a/examples/serialport/creaderasync/main.cpp
+++ b/examples/serialport/creaderasync/main.cpp
@@ -50,37 +50,39 @@
#include "serialportreader.h"
-#include <QtSerialPort/QSerialPort>
-
-#include <QTextStream>
#include <QCoreApplication>
-#include <QFile>
+#include <QSerialPort>
#include <QStringList>
-
-QT_USE_NAMESPACE
+#include <QTextStream>
int main(int argc, char *argv[])
{
QCoreApplication coreApplication(argc, argv);
- int argumentCount = QCoreApplication::arguments().size();
- QStringList argumentList = QCoreApplication::arguments();
+ const int argumentCount = QCoreApplication::arguments().size();
+ const QStringList argumentList = QCoreApplication::arguments();
QTextStream standardOutput(stdout);
if (argumentCount == 1) {
- standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]").arg(argumentList.first()) << endl;
+ standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]")
+ .arg(argumentList.first())
+ << endl;
return 1;
}
QSerialPort serialPort;
- QString serialPortName = argumentList.at(1);
+ const QString serialPortName = argumentList.at(1);
serialPort.setPortName(serialPortName);
- int serialPortBaudRate = (argumentCount > 2) ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
+ const int serialPortBaudRate = (argumentCount > 2)
+ ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
serialPort.setBaudRate(serialPortBaudRate);
if (!serialPort.open(QIODevice::ReadOnly)) {
- standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Failed to open port %1, error: %2")
+ .arg(serialPortName)
+ .arg(serialPort.errorString())
+ << endl;
return 1;
}
diff --git a/examples/serialport/creaderasync/serialportreader.cpp b/examples/serialport/creaderasync/serialportreader.cpp
index f85dd8a..a701839 100644
--- a/examples/serialport/creaderasync/serialportreader.cpp
+++ b/examples/serialport/creaderasync/serialportreader.cpp
@@ -52,25 +52,18 @@
#include <QCoreApplication>
-QT_USE_NAMESPACE
-
-SerialPortReader::SerialPortReader(QSerialPort *serialPort, QObject *parent)
- : QObject(parent)
- , m_serialPort(serialPort)
- , m_standardOutput(stdout)
+SerialPortReader::SerialPortReader(QSerialPort *serialPort, QObject *parent) :
+ QObject(parent),
+ m_serialPort(serialPort),
+ m_standardOutput(stdout)
{
connect(m_serialPort, &QSerialPort::readyRead, this, &SerialPortReader::handleReadyRead);
- connect(m_serialPort, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error),
- this, &SerialPortReader::handleError);
+ connect(m_serialPort, &QSerialPort::errorOccurred, this, &SerialPortReader::handleError);
connect(&m_timer, &QTimer::timeout, this, &SerialPortReader::handleTimeout);
m_timer.start(5000);
}
-SerialPortReader::~SerialPortReader()
-{
-}
-
void SerialPortReader::handleReadyRead()
{
m_readData.append(m_serialPort->readAll());
@@ -82,9 +75,14 @@ void SerialPortReader::handleReadyRead()
void SerialPortReader::handleTimeout()
{
if (m_readData.isEmpty()) {
- m_standardOutput << QObject::tr("No data was currently available for reading from port %1").arg(m_serialPort->portName()) << endl;
+ m_standardOutput << QObject::tr("No data was currently available "
+ "for reading from port %1")
+ .arg(m_serialPort->portName())
+ << endl;
} else {
- m_standardOutput << QObject::tr("Data successfully received from port %1").arg(m_serialPort->portName()) << endl;
+ m_standardOutput << QObject::tr("Data successfully received from port %1")
+ .arg(m_serialPort->portName())
+ << endl;
m_standardOutput << m_readData << endl;
}
@@ -94,7 +92,11 @@ void SerialPortReader::handleTimeout()
void SerialPortReader::handleError(QSerialPort::SerialPortError serialPortError)
{
if (serialPortError == QSerialPort::ReadError) {
- m_standardOutput << QObject::tr("An I/O error occurred while reading the data from port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
+ m_standardOutput << QObject::tr("An I/O error occurred while reading "
+ "the data from port %1, error: %2")
+ .arg(m_serialPort->portName())
+ .arg(m_serialPort->errorString())
+ << endl;
QCoreApplication::exit(1);
}
}
diff --git a/examples/serialport/creaderasync/serialportreader.h b/examples/serialport/creaderasync/serialportreader.h
index 6698087..53074f1 100644
--- a/examples/serialport/creaderasync/serialportreader.h
+++ b/examples/serialport/creaderasync/serialportreader.h
@@ -51,14 +51,10 @@
#ifndef SERIALPORTREADER_H
#define SERIALPORTREADER_H
-#include <QtSerialPort/QSerialPort>
-
+#include <QByteArray>
+#include <QSerialPort>
#include <QTextStream>
#include <QTimer>
-#include <QByteArray>
-#include <QObject>
-
-QT_USE_NAMESPACE
QT_BEGIN_NAMESPACE
@@ -70,7 +66,6 @@ class SerialPortReader : public QObject
public:
explicit SerialPortReader(QSerialPort *serialPort, QObject *parent = nullptr);
- ~SerialPortReader();
private slots:
void handleReadyRead();
@@ -78,10 +73,10 @@ private slots:
void handleError(QSerialPort::SerialPortError error);
private:
- QSerialPort *m_serialPort;
- QByteArray m_readData;
+ QSerialPort *m_serialPort = nullptr;
+ QByteArray m_readData;
QTextStream m_standardOutput;
- QTimer m_timer;
+ QTimer m_timer;
};
-#endif
+#endif // SERIALPORTREADER_H
diff --git a/examples/serialport/creadersync/main.cpp b/examples/serialport/creadersync/main.cpp
index c1bc08b..845a5fb 100644
--- a/examples/serialport/creadersync/main.cpp
+++ b/examples/serialport/creadersync/main.cpp
@@ -48,36 +48,36 @@
**
****************************************************************************/
-#include <QtSerialPort/QSerialPort>
-
-#include <QTextStream>
#include <QCoreApplication>
+#include <QSerialPort>
#include <QStringList>
-
-QT_USE_NAMESPACE
+#include <QTextStream>
int main(int argc, char *argv[])
{
QCoreApplication coreApplication(argc, argv);
- int argumentCount = QCoreApplication::arguments().size();
- QStringList argumentList = QCoreApplication::arguments();
+ const int argumentCount = QCoreApplication::arguments().size();
+ const QStringList argumentList = QCoreApplication::arguments();
QTextStream standardOutput(stdout);
if (argumentCount == 1) {
- standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]").arg(argumentList.first()) << endl;
+ standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]")
+ .arg(argumentList.first()) << endl;
return 1;
}
QSerialPort serialPort;
- QString serialPortName = argumentList.at(1);
+ const QString serialPortName = argumentList.at(1);
serialPort.setPortName(serialPortName);
- int serialPortBaudRate = (argumentCount > 2) ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
+ const int serialPortBaudRate = (argumentCount > 2)
+ ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
serialPort.setBaudRate(serialPortBaudRate);
if (!serialPort.open(QIODevice::ReadOnly)) {
- standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.error()) << endl;
+ standardOutput << QObject::tr("Failed to open port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.error()) << endl;
return 1;
}
@@ -86,14 +86,18 @@ int main(int argc, char *argv[])
readData.append(serialPort.readAll());
if (serialPort.error() == QSerialPort::ReadError) {
- standardOutput << QObject::tr("Failed to read from port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Failed to read from port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
} else if (serialPort.error() == QSerialPort::TimeoutError && readData.isEmpty()) {
- standardOutput << QObject::tr("No data was currently available for reading from port %1").arg(serialPortName) << endl;
+ standardOutput << QObject::tr("No data was currently available"
+ " for reading from port %1")
+ .arg(serialPortName) << endl;
return 0;
}
- standardOutput << QObject::tr("Data successfully received from port %1").arg(serialPortName) << endl;
+ standardOutput << QObject::tr("Data successfully received from port %1")
+ .arg(serialPortName) << endl;
standardOutput << readData << endl;
return 0;
diff --git a/examples/serialport/cwriterasync/main.cpp b/examples/serialport/cwriterasync/main.cpp
index 4ffb44b..4d65e0a 100644
--- a/examples/serialport/cwriterasync/main.cpp
+++ b/examples/serialport/cwriterasync/main.cpp
@@ -50,33 +50,32 @@
#include "serialportwriter.h"
-#include <QtSerialPort/QSerialPort>
-
-#include <QTextStream>
#include <QCoreApplication>
#include <QFile>
+#include <QSerialPort>
#include <QStringList>
-
-QT_USE_NAMESPACE
+#include <QTextStream>
int main(int argc, char *argv[])
{
QCoreApplication coreApplication(argc, argv);
- int argumentCount = QCoreApplication::arguments().size();
- QStringList argumentList = QCoreApplication::arguments();
+ const int argumentCount = QCoreApplication::arguments().size();
+ const QStringList argumentList = QCoreApplication::arguments();
QTextStream standardOutput(stdout);
if (argumentCount == 1) {
- standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]").arg(argumentList.first()) << endl;
+ standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]")
+ .arg(argumentList.first()) << endl;
return 1;
}
QSerialPort serialPort;
- QString serialPortName = argumentList.at(1);
+ const QString serialPortName = argumentList.at(1);
serialPort.setPortName(serialPortName);
- int serialPortBaudRate = (argumentCount > 2) ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
+ const int serialPortBaudRate = (argumentCount > 2)
+ ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
serialPort.setBaudRate(serialPortBaudRate);
serialPort.open(QIODevice::WriteOnly);
@@ -87,11 +86,14 @@ int main(int argc, char *argv[])
return 1;
}
- QByteArray writeData(dataFile.readAll());
+ const QByteArray writeData(dataFile.readAll());
dataFile.close();
if (writeData.isEmpty()) {
- standardOutput << QObject::tr("Either no data was currently available on the standard input for reading, or an error occurred for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Either no data was currently available on "
+ "the standard input for reading, "
+ "or an error occurred for port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
diff --git a/examples/serialport/cwriterasync/serialportwriter.cpp b/examples/serialport/cwriterasync/serialportwriter.cpp
index e940f3d..c2916bb 100644
--- a/examples/serialport/cwriterasync/serialportwriter.cpp
+++ b/examples/serialport/cwriterasync/serialportwriter.cpp
@@ -52,45 +52,47 @@
#include <QCoreApplication>
-QT_USE_NAMESPACE
-
-SerialPortWriter::SerialPortWriter(QSerialPort *serialPort, QObject *parent)
- : QObject(parent)
- , m_serialPort(serialPort)
- , m_standardOutput(stdout)
- , m_bytesWritten(0)
+SerialPortWriter::SerialPortWriter(QSerialPort *serialPort, QObject *parent) :
+ QObject(parent),
+ m_serialPort(serialPort),
+ m_standardOutput(stdout)
{
m_timer.setSingleShot(true);
- connect(m_serialPort, &QSerialPort::bytesWritten, this, &SerialPortWriter::handleBytesWritten);
- connect(m_serialPort, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error),
+ connect(m_serialPort, &QSerialPort::bytesWritten,
+ this, &SerialPortWriter::handleBytesWritten);
+ connect(m_serialPort, &QSerialPort::errorOccurred,
this, &SerialPortWriter::handleError);
connect(&m_timer, &QTimer::timeout, this, &SerialPortWriter::handleTimeout);
}
-SerialPortWriter::~SerialPortWriter()
-{
-}
-
void SerialPortWriter::handleBytesWritten(qint64 bytes)
{
m_bytesWritten += bytes;
if (m_bytesWritten == m_writeData.size()) {
m_bytesWritten = 0;
- m_standardOutput << QObject::tr("Data successfully sent to port %1").arg(m_serialPort->portName()) << endl;
+ m_standardOutput << QObject::tr("Data successfully sent to port %1")
+ .arg(m_serialPort->portName()) << endl;
QCoreApplication::quit();
}
}
void SerialPortWriter::handleTimeout()
{
- m_standardOutput << QObject::tr("Operation timed out for port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
+ m_standardOutput << QObject::tr("Operation timed out for port %1, error: %2")
+ .arg(m_serialPort->portName())
+ .arg(m_serialPort->errorString())
+ << endl;
QCoreApplication::exit(1);
}
void SerialPortWriter::handleError(QSerialPort::SerialPortError serialPortError)
{
if (serialPortError == QSerialPort::WriteError) {
- m_standardOutput << QObject::tr("An I/O error occurred while writing the data to port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
+ m_standardOutput << QObject::tr("An I/O error occurred while writing"
+ " the data to port %1, error: %2")
+ .arg(m_serialPort->portName())
+ .arg(m_serialPort->errorString())
+ << endl;
QCoreApplication::exit(1);
}
}
@@ -99,13 +101,19 @@ void SerialPortWriter::write(const QByteArray &writeData)
{
m_writeData = writeData;
- qint64 bytesWritten = m_serialPort->write(writeData);
+ const qint64 bytesWritten = m_serialPort->write(writeData);
if (bytesWritten == -1) {
- m_standardOutput << QObject::tr("Failed to write the data to port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
+ m_standardOutput << QObject::tr("Failed to write the data to port %1, error: %2")
+ .arg(m_serialPort->portName())
+ .arg(m_serialPort->errorString())
+ << endl;
QCoreApplication::exit(1);
} else if (bytesWritten != m_writeData.size()) {
- m_standardOutput << QObject::tr("Failed to write all the data to port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
+ m_standardOutput << QObject::tr("Failed to write all the data to port %1, error: %2")
+ .arg(m_serialPort->portName())
+ .arg(m_serialPort->errorString())
+ << endl;
QCoreApplication::exit(1);
}
diff --git a/examples/serialport/cwriterasync/serialportwriter.h b/examples/serialport/cwriterasync/serialportwriter.h
index 9fd305f..1e94c0f 100644
--- a/examples/serialport/cwriterasync/serialportwriter.h
+++ b/examples/serialport/cwriterasync/serialportwriter.h
@@ -51,14 +51,11 @@
#ifndef SERIALPORTWRITER_H
#define SERIALPORTWRITER_H
-#include <QtSerialPort/QSerialPort>
-
-#include <QTextStream>
-#include <QTimer>
#include <QByteArray>
#include <QObject>
-
-QT_USE_NAMESPACE
+#include <QSerialPort>
+#include <QTextStream>
+#include <QTimer>
QT_BEGIN_NAMESPACE
@@ -70,8 +67,6 @@ class SerialPortWriter : public QObject
public:
explicit SerialPortWriter(QSerialPort *serialPort, QObject *parent = nullptr);
- ~SerialPortWriter();
-
void write(const QByteArray &writeData);
private slots:
@@ -80,11 +75,11 @@ private slots:
void handleError(QSerialPort::SerialPortError error);
private:
- QSerialPort *m_serialPort;
- QByteArray m_writeData;
- QTextStream m_standardOutput;
- qint64 m_bytesWritten;
- QTimer m_timer;
+ QSerialPort *m_serialPort = nullptr;
+ QByteArray m_writeData;
+ QTextStream m_standardOutput;
+ qint64 m_bytesWritten = 0;
+ QTimer m_timer;
};
-#endif
+#endif // SERIALPORTWRITER_H
diff --git a/examples/serialport/cwritersync/main.cpp b/examples/serialport/cwritersync/main.cpp
index a134ed9..125c111 100644
--- a/examples/serialport/cwritersync/main.cpp
+++ b/examples/serialport/cwritersync/main.cpp
@@ -48,43 +48,45 @@
**
****************************************************************************/
-#include <QtSerialPort/QSerialPort>
-
-#include <QTextStream>
#include <QCoreApplication>
#include <QFile>
+#include <QSerialPort>
#include <QStringList>
-
-QT_USE_NAMESPACE
+#include <QTextStream>
int main(int argc, char *argv[])
{
QCoreApplication coreApplication(argc, argv);
- int argumentCount = QCoreApplication::arguments().size();
- QStringList argumentList = QCoreApplication::arguments();
+ const int argumentCount = QCoreApplication::arguments().size();
+ const QStringList argumentList = QCoreApplication::arguments();
QTextStream standardOutput(stdout);
if (argumentCount == 1) {
- standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]").arg(argumentList.first()) << endl;
+ standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]")
+ .arg(argumentList.first()) << endl;
return 1;
}
QSerialPort serialPort;
- QString serialPortName = argumentList.at(1);
+ const QString serialPortName = argumentList.at(1);
serialPort.setPortName(serialPortName);
- int serialPortBaudRate = (argumentCount > 2) ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
+ const int serialPortBaudRate = (argumentCount > 2)
+ ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
serialPort.setBaudRate(serialPortBaudRate);
if (!serialPort.open(QIODevice::WriteOnly)) {
- standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Failed to open port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.errorString())
+ << endl;
return 1;
}
QFile dataFile;
if (!dataFile.open(stdin, QIODevice::ReadOnly)) {
- standardOutput << QObject::tr("Failed to open stdin for reading") << endl;
+ standardOutput << QObject::tr("Failed to open stdin for reading")
+ << endl;
return 1;
}
@@ -92,24 +94,32 @@ int main(int argc, char *argv[])
dataFile.close();
if (writeData.isEmpty()) {
- standardOutput << QObject::tr("Either no data was currently available on the standard input for reading, or an error occurred for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Either no data was currently available on "
+ "the standard input for reading, or an error "
+ "occurred for port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
- qint64 bytesWritten = serialPort.write(writeData);
+ const qint64 bytesWritten = serialPort.write(writeData);
if (bytesWritten == -1) {
- standardOutput << QObject::tr("Failed to write the data to port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Failed to write the data to port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
} else if (bytesWritten != writeData.size()) {
- standardOutput << QObject::tr("Failed to write all the data to port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Failed to write all the data to port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
} else if (!serialPort.waitForBytesWritten(5000)) {
- standardOutput << QObject::tr("Operation timed out or an error occurred for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ standardOutput << QObject::tr("Operation timed out or an error "
+ "occurred for port %1, error: %2")
+ .arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
- standardOutput << QObject::tr("Data successfully sent to port %1").arg(serialPortName) << endl;
+ standardOutput << QObject::tr("Data successfully sent to port %1")
+ .arg(serialPortName) << endl;
return 0;
}
diff --git a/examples/serialport/enumerator/main.cpp b/examples/serialport/enumerator/main.cpp
index d7622a2..fef1ce0 100644
--- a/examples/serialport/enumerator/main.cpp
+++ b/examples/serialport/enumerator/main.cpp
@@ -50,13 +50,11 @@
****************************************************************************/
#include <QApplication>
-#include <QWidget>
-#include <QVBoxLayout>
#include <QLabel>
#include <QScrollArea>
-#include <QtSerialPort/QSerialPortInfo>
-
-QT_USE_NAMESPACE
+#include <QSerialPortInfo>
+#include <QVBoxLayout>
+#include <QWidget>
int main(int argc, char *argv[])
{
diff --git a/examples/serialport/master/dialog.cpp b/examples/serialport/master/dialog.cpp
index 4bed08b..e12d837 100644
--- a/examples/serialport/master/dialog.cpp
+++ b/examples/serialport/master/dialog.cpp
@@ -50,106 +50,105 @@
#include "dialog.h"
+#include <QComboBox>
+#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
-#include <QComboBox>
-#include <QSpinBox>
#include <QPushButton>
-#include <QGridLayout>
+#include <QSerialPortInfo>
+#include <QSpinBox>
-#include <QtSerialPort/QSerialPortInfo>
-
-QT_USE_NAMESPACE
-
-Dialog::Dialog(QWidget *parent)
- : QDialog(parent)
- , transactionCount(0)
- , serialPortLabel(new QLabel(tr("Serial port:")))
- , serialPortComboBox(new QComboBox())
- , waitResponseLabel(new QLabel(tr("Wait response, msec:")))
- , waitResponseSpinBox(new QSpinBox())
- , requestLabel(new QLabel(tr("Request:")))
- , requestLineEdit(new QLineEdit(tr("Who are you?")))
- , trafficLabel(new QLabel(tr("No traffic.")))
- , statusLabel(new QLabel(tr("Status: Not running.")))
- , runButton(new QPushButton(tr("Start")))
+Dialog::Dialog(QWidget *parent) :
+ QDialog(parent),
+ m_transactionCount(0),
+ m_serialPortLabel(new QLabel(tr("Serial port:"))),
+ m_serialPortComboBox(new QComboBox),
+ m_waitResponseLabel(new QLabel(tr("Wait response, msec:"))),
+ m_waitResponseSpinBox(new QSpinBox),
+ m_requestLabel(new QLabel(tr("Request:"))),
+ m_requestLineEdit(new QLineEdit(tr("Who are you?"))),
+ m_trafficLabel(new QLabel(tr("No traffic."))),
+ m_statusLabel(new QLabel(tr("Status: Not running."))),
+ m_runButton(new QPushButton(tr("Start")))
{
const auto infos = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo &info : infos)
- serialPortComboBox->addItem(info.portName());
+ m_serialPortComboBox->addItem(info.portName());
- waitResponseSpinBox->setRange(0, 10000);
- waitResponseSpinBox->setValue(100);
+ m_waitResponseSpinBox->setRange(0, 10000);
+ m_waitResponseSpinBox->setValue(100);
auto mainLayout = new QGridLayout;
- mainLayout->addWidget(serialPortLabel, 0, 0);
- mainLayout->addWidget(serialPortComboBox, 0, 1);
- mainLayout->addWidget(waitResponseLabel, 1, 0);
- mainLayout->addWidget(waitResponseSpinBox, 1, 1);
- mainLayout->addWidget(runButton, 0, 2, 2, 1);
- mainLayout->addWidget(requestLabel, 2, 0);
- mainLayout->addWidget(requestLineEdit, 2, 1, 1, 3);
- mainLayout->addWidget(trafficLabel, 3, 0, 1, 4);
- mainLayout->addWidget(statusLabel, 4, 0, 1, 5);
+ mainLayout->addWidget(m_serialPortLabel, 0, 0);
+ mainLayout->addWidget(m_serialPortComboBox, 0, 1);
+ mainLayout->addWidget(m_waitResponseLabel, 1, 0);
+ mainLayout->addWidget(m_waitResponseSpinBox, 1, 1);
+ mainLayout->addWidget(m_runButton, 0, 2, 2, 1);
+ mainLayout->addWidget(m_requestLabel, 2, 0);
+ mainLayout->addWidget(m_requestLineEdit, 2, 1, 1, 3);
+ mainLayout->addWidget(m_trafficLabel, 3, 0, 1, 4);
+ mainLayout->addWidget(m_statusLabel, 4, 0, 1, 5);
setLayout(mainLayout);
setWindowTitle(tr("Master"));
- serialPortComboBox->setFocus();
+ m_serialPortComboBox->setFocus();
- timer.setSingleShot(true);
+ m_timer.setSingleShot(true);
- connect(runButton, &QPushButton::clicked, this, &Dialog::sendRequest);
- connect(&serial, &QSerialPort::readyRead, this, &Dialog::readResponse);
- connect(&timer, &QTimer::timeout, this, &Dialog::processTimeout);
+ connect(m_runButton, &QPushButton::clicked, this, &Dialog::sendRequest);
+ connect(&m_serial, &QSerialPort::readyRead, this, &Dialog::readResponse);
+ connect(&m_timer, &QTimer::timeout, this, &Dialog::processTimeout);
}
void Dialog::sendRequest()
{
- if (serial.portName() != serialPortComboBox->currentText()) {
- serial.close();
- serial.setPortName(serialPortComboBox->currentText());
+ if (m_serial.portName() != m_serialPortComboBox->currentText()) {
+ m_serial.close();
+ m_serial.setPortName(m_serialPortComboBox->currentText());
- if (!serial.open(QIODevice::ReadWrite)) {
+ if (!m_serial.open(QIODevice::ReadWrite)) {
processError(tr("Can't open %1, error code %2")
- .arg(serial.portName()).arg(serial.error()));
+ .arg(m_serial.portName()).arg(m_serial.error()));
return;
}
}
setControlsEnabled(false);
- statusLabel->setText(tr("Status: Running, connected to port %1.")
- .arg(serialPortComboBox->currentText()));
+ m_statusLabel->setText(tr("Status: Running, connected to port %1.")
+ .arg(m_serialPortComboBox->currentText()));
- serial.write(requestLineEdit->text().toLocal8Bit());
- timer.start(waitResponseSpinBox->value());
+ m_serial.write(m_requestLineEdit->text().toUtf8());
+ m_timer.start(m_waitResponseSpinBox->value());
}
void Dialog::readResponse()
{
- response.append(serial.readAll());
+ m_response.append(m_serial.readAll());
}
void Dialog::processTimeout()
{
setControlsEnabled(true);
- trafficLabel->setText(tr("Traffic, transaction #%1:"
- "\n\r-request: %2"
- "\n\r-response: %3")
- .arg(++transactionCount).arg(requestLineEdit->text()).arg(QString(response)));
- response.clear();
+ m_trafficLabel->setText(tr("Traffic, transaction #%1:"
+ "\n\r-request: %2"
+ "\n\r-response: %3")
+ .arg(++m_transactionCount)
+ .arg(m_requestLineEdit->text())
+ .arg(QString::fromUtf8(m_response)));
+ m_response.clear();
}
void Dialog::processError(const QString &error)
{
setControlsEnabled(true);
- statusLabel->setText(tr("Status: Not running, %1.").arg(error));
- trafficLabel->setText(tr("No traffic."));
+ m_statusLabel->setText(tr("Status: Not running, %1.").arg(error));
+ m_trafficLabel->setText(tr("No traffic."));
}
void Dialog::setControlsEnabled(bool enable)
{
- runButton->setEnabled(enable);
- serialPortComboBox->setEnabled(enable);
- waitResponseSpinBox->setEnabled(enable);
- requestLineEdit->setEnabled(enable);
+ m_runButton->setEnabled(enable);
+ m_serialPortComboBox->setEnabled(enable);
+ m_waitResponseSpinBox->setEnabled(enable);
+ m_requestLineEdit->setEnabled(enable);
}
diff --git a/examples/serialport/master/dialog.h b/examples/serialport/master/dialog.h
index 0bc1241..2fb2e8e 100644
--- a/examples/serialport/master/dialog.h
+++ b/examples/serialport/master/dialog.h
@@ -52,12 +52,9 @@
#define DIALOG_H
#include <QDialog>
+#include <QSerialPort>
#include <QTimer>
-#include <QtSerialPort/QSerialPort>
-
-QT_USE_NAMESPACE
-
QT_BEGIN_NAMESPACE
class QLabel;
@@ -85,20 +82,20 @@ private:
void processError(const QString &error);
private:
- int transactionCount;
- QLabel *serialPortLabel;
- QComboBox *serialPortComboBox;
- QLabel *waitResponseLabel;
- QSpinBox *waitResponseSpinBox;
- QLabel *requestLabel;
- QLineEdit *requestLineEdit;
- QLabel *trafficLabel;
- QLabel *statusLabel;
- QPushButton *runButton;
+ int m_transactionCount = 0;
+ QLabel *m_serialPortLabel = nullptr;
+ QComboBox *m_serialPortComboBox = nullptr;
+ QLabel *m_waitResponseLabel = nullptr;
+ QSpinBox *m_waitResponseSpinBox = nullptr;
+ QLabel *m_requestLabel = nullptr;
+ QLineEdit *m_requestLineEdit = nullptr;
+ QLabel *m_trafficLabel = nullptr;
+ QLabel *m_statusLabel = nullptr;
+ QPushButton *m_runButton = nullptr;
- QSerialPort serial;
- QByteArray response;
- QTimer timer;
+ QSerialPort m_serial;
+ QByteArray m_response;
+ QTimer m_timer;
};
#endif // DIALOG_H
diff --git a/examples/serialport/master/main.cpp b/examples/serialport/master/main.cpp
index cf4c421..8e68c73 100644
--- a/examples/serialport/master/main.cpp
+++ b/examples/serialport/master/main.cpp
@@ -48,10 +48,10 @@
**
****************************************************************************/
-#include <QApplication>
-
#include "dialog.h"
+#include <QApplication>
+
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
diff --git a/examples/serialport/master/master.pro b/examples/serialport/master/master.pro
index 354d174..3eb9dda 100644
--- a/examples/serialport/master/master.pro
+++ b/examples/serialport/master/master.pro
@@ -1,5 +1,6 @@
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets serialport
+ requires(qtConfig(combobox))
} else {
include($$QTSERIALPORT_PROJECT_ROOT/src/serialport/qt4support/serialport.prf)
}
diff --git a/examples/serialport/slave/dialog.cpp b/examples/serialport/slave/dialog.cpp
index d801052..eec7999 100644
--- a/examples/serialport/slave/dialog.cpp
+++ b/examples/serialport/slave/dialog.cpp
@@ -50,109 +50,106 @@
#include "dialog.h"
+#include <QComboBox>
+#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
-#include <QComboBox>
-#include <QSpinBox>
#include <QPushButton>
-#include <QGridLayout>
+#include <QSerialPortInfo>
+#include <QSpinBox>
-#include <QtSerialPort/QSerialPortInfo>
-
-QT_USE_NAMESPACE
-
-Dialog::Dialog(QWidget *parent)
- : QDialog(parent)
- , transactionCount(0)
- , serialPortLabel(new QLabel(tr("Serial port:")))
- , serialPortComboBox(new QComboBox())
- , waitRequestLabel(new QLabel(tr("Wait request, msec:")))
- , waitRequestSpinBox(new QSpinBox())
- , responseLabel(new QLabel(tr("Response:")))
- , responseLineEdit(new QLineEdit(tr("Hello, I'm Slave.")))
- , trafficLabel(new QLabel(tr("No traffic.")))
- , statusLabel(new QLabel(tr("Status: Not running.")))
- , runButton(new QPushButton(tr("Start")))
+Dialog::Dialog(QWidget *parent) :
+ QDialog(parent),
+ m_serialPortLabel(new QLabel(tr("Serial port:"))),
+ m_serialPortComboBox(new QComboBox),
+ m_waitRequestLabel(new QLabel(tr("Wait request, msec:"))),
+ m_waitRequestSpinBox(new QSpinBox),
+ m_responseLabel(new QLabel(tr("Response:"))),
+ m_responseLineEdit(new QLineEdit(tr("Hello, I'm Slave."))),
+ m_trafficLabel(new QLabel(tr("No traffic."))),
+ m_statusLabel(new QLabel(tr("Status: Not running."))),
+ m_runButton(new QPushButton(tr("Start")))
{
- waitRequestSpinBox->setRange(0, 10000);
- waitRequestSpinBox->setValue(20);
+ m_waitRequestSpinBox->setRange(0, 10000);
+ m_waitRequestSpinBox->setValue(20);
const auto infos = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo &info : infos)
- serialPortComboBox->addItem(info.portName());
+ m_serialPortComboBox->addItem(info.portName());
auto mainLayout = new QGridLayout;
- mainLayout->addWidget(serialPortLabel, 0, 0);
- mainLayout->addWidget(serialPortComboBox, 0, 1);
- mainLayout->addWidget(waitRequestLabel, 1, 0);
- mainLayout->addWidget(waitRequestSpinBox, 1, 1);
- mainLayout->addWidget(runButton, 0, 2, 2, 1);
- mainLayout->addWidget(responseLabel, 2, 0);
- mainLayout->addWidget(responseLineEdit, 2, 1, 1, 3);
- mainLayout->addWidget(trafficLabel, 3, 0, 1, 4);
- mainLayout->addWidget(statusLabel, 4, 0, 1, 5);
+ mainLayout->addWidget(m_serialPortLabel, 0, 0);
+ mainLayout->addWidget(m_serialPortComboBox, 0, 1);
+ mainLayout->addWidget(m_waitRequestLabel, 1, 0);
+ mainLayout->addWidget(m_waitRequestSpinBox, 1, 1);
+ mainLayout->addWidget(m_runButton, 0, 2, 2, 1);
+ mainLayout->addWidget(m_responseLabel, 2, 0);
+ mainLayout->addWidget(m_responseLineEdit, 2, 1, 1, 3);
+ mainLayout->addWidget(m_trafficLabel, 3, 0, 1, 4);
+ mainLayout->addWidget(m_statusLabel, 4, 0, 1, 5);
setLayout(mainLayout);
setWindowTitle(tr("Slave"));
- serialPortComboBox->setFocus();
+ m_serialPortComboBox->setFocus();
- timer.setSingleShot(true);
+ m_timer.setSingleShot(true);
- connect(runButton, &QPushButton::clicked, this, &Dialog::startSlave);
- connect(&serial, &QSerialPort::readyRead, this, &Dialog::readRequest);
- connect(&timer, &QTimer::timeout, this, &Dialog::processTimeout);
+ connect(m_runButton, &QPushButton::clicked, this, &Dialog::startSlave);
+ connect(&m_serial, &QSerialPort::readyRead, this, &Dialog::readRequest);
+ connect(&m_timer, &QTimer::timeout, this, &Dialog::processTimeout);
- connect(serialPortComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ connect(m_serialPortComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &Dialog::activateRunButton);
- connect(waitRequestSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
+ connect(m_waitRequestSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
this, &Dialog::activateRunButton);
- connect(responseLineEdit, &QLineEdit::textChanged, this, &Dialog::activateRunButton);
+ connect(m_responseLineEdit, &QLineEdit::textChanged, this, &Dialog::activateRunButton);
}
void Dialog::startSlave()
{
- if (serial.portName() != serialPortComboBox->currentText()) {
- serial.close();
- serial.setPortName(serialPortComboBox->currentText());
+ if (m_serial.portName() != m_serialPortComboBox->currentText()) {
+ m_serial.close();
+ m_serial.setPortName(m_serialPortComboBox->currentText());
- if (!serial.open(QIODevice::ReadWrite)) {
+ if (!m_serial.open(QIODevice::ReadWrite)) {
processError(tr("Can't open %1, error code %2")
- .arg(serial.portName()).arg(serial.error()));
+ .arg(m_serial.portName()).arg(m_serial.error()));
return;
}
}
- runButton->setEnabled(false);
- statusLabel->setText(tr("Status: Running, connected to port %1.")
- .arg(serialPortComboBox->currentText()));
+ m_runButton->setEnabled(false);
+ m_statusLabel->setText(tr("Status: Running, connected to port %1.")
+ .arg(m_serialPortComboBox->currentText()));
}
void Dialog::readRequest()
{
- if (!timer.isActive())
- timer.start(waitRequestSpinBox->value());
- request.append(serial.readAll());
+ if (!m_timer.isActive())
+ m_timer.start(m_waitRequestSpinBox->value());
+ m_request.append(m_serial.readAll());
}
void Dialog::processTimeout()
{
- serial.write(responseLineEdit->text().toLocal8Bit());
-
- trafficLabel->setText(tr("Traffic, transaction #%1:"
- "\n\r-request: %2"
- "\n\r-response: %3")
- .arg(++transactionCount).arg(QString(request)).arg(responseLineEdit->text()));
- request.clear();
+ m_serial.write(m_responseLineEdit->text().toUtf8());
+
+ m_trafficLabel->setText(tr("Traffic, transaction #%1:"
+ "\n\r-request: %2"
+ "\n\r-response: %3")
+ .arg(++m_transactionCount).arg(QString::fromUtf8(m_request))
+ .arg(m_responseLineEdit->text()));
+ m_request.clear();
}
void Dialog::activateRunButton()
{
- runButton->setEnabled(true);
+ m_runButton->setEnabled(true);
}
void Dialog::processError(const QString &s)
{
activateRunButton();
- statusLabel->setText(tr("Status: Not running, %1.").arg(s));
- trafficLabel->setText(tr("No traffic."));
+ m_statusLabel->setText(tr("Status: Not running, %1.").arg(s));
+ m_trafficLabel->setText(tr("No traffic."));
}
diff --git a/examples/serialport/slave/dialog.h b/examples/serialport/slave/dialog.h
index 0405cf8..13909c7 100644
--- a/examples/serialport/slave/dialog.h
+++ b/examples/serialport/slave/dialog.h
@@ -52,12 +52,9 @@
#define DIALOG_H
#include <QDialog>
+#include <QSerialPort>
#include <QTimer>
-#include <QtSerialPort/QSerialPort>
-
-QT_USE_NAMESPACE
-
QT_BEGIN_NAMESPACE
class QLabel;
@@ -85,20 +82,20 @@ private:
void processError(const QString &s);
private:
- int transactionCount;
- QLabel *serialPortLabel;
- QComboBox *serialPortComboBox;
- QLabel *waitRequestLabel;
- QSpinBox *waitRequestSpinBox;
- QLabel *responseLabel;
- QLineEdit *responseLineEdit;
- QLabel *trafficLabel;
- QLabel *statusLabel;
- QPushButton *runButton;
+ int m_transactionCount = 0;
+ QLabel *m_serialPortLabel = nullptr;
+ QComboBox *m_serialPortComboBox = nullptr;
+ QLabel *m_waitRequestLabel = nullptr;
+ QSpinBox *m_waitRequestSpinBox = nullptr;
+ QLabel *m_responseLabel = nullptr;
+ QLineEdit *m_responseLineEdit = nullptr;
+ QLabel *m_trafficLabel = nullptr;
+ QLabel *m_statusLabel = nullptr;
+ QPushButton *m_runButton = nullptr;
- QSerialPort serial;
- QByteArray request;
- QTimer timer;
+ QSerialPort m_serial;
+ QByteArray m_request;
+ QTimer m_timer;
};
#endif // DIALOG_H
diff --git a/examples/serialport/slave/main.cpp b/examples/serialport/slave/main.cpp
index cf4c421..8e68c73 100644
--- a/examples/serialport/slave/main.cpp
+++ b/examples/serialport/slave/main.cpp
@@ -48,10 +48,10 @@
**
****************************************************************************/
-#include <QApplication>
-
#include "dialog.h"
+#include <QApplication>
+
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
diff --git a/examples/serialport/slave/slave.pro b/examples/serialport/slave/slave.pro
index 54e7d02..eb684ff 100644
--- a/examples/serialport/slave/slave.pro
+++ b/examples/serialport/slave/slave.pro
@@ -1,5 +1,6 @@
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets serialport
+ requires(qtConfig(combobox))
} else {
include($$QTSERIALPORT_PROJECT_ROOT/src/serialport/qt4support/serialport.prf)
}
diff --git a/examples/serialport/terminal/console.cpp b/examples/serialport/terminal/console.cpp
index 4f8d580..d71c5c0 100644
--- a/examples/serialport/terminal/console.cpp
+++ b/examples/serialport/terminal/console.cpp
@@ -53,23 +53,19 @@
#include <QScrollBar>
-#include <QtCore/QDebug>
-
-Console::Console(QWidget *parent)
- : QPlainTextEdit(parent)
- , localEchoEnabled(false)
+Console::Console(QWidget *parent) :
+ QPlainTextEdit(parent)
{
document()->setMaximumBlockCount(100);
QPalette p = palette();
p.setColor(QPalette::Base, Qt::black);
p.setColor(QPalette::Text, Qt::green);
setPalette(p);
-
}
void Console::putData(const QByteArray &data)
{
- insertPlainText(QString(data));
+ insertPlainText(data);
QScrollBar *bar = verticalScrollBar();
bar->setValue(bar->maximum());
@@ -77,7 +73,7 @@ void Console::putData(const QByteArray &data)
void Console::setLocalEchoEnabled(bool set)
{
- localEchoEnabled = set;
+ m_localEchoEnabled = set;
}
void Console::keyPressEvent(QKeyEvent *e)
@@ -90,7 +86,7 @@ void Console::keyPressEvent(QKeyEvent *e)
case Qt::Key_Down:
break;
default:
- if (localEchoEnabled)
+ if (m_localEchoEnabled)
QPlainTextEdit::keyPressEvent(e);
emit getData(e->text().toLocal8Bit());
}
diff --git a/examples/serialport/terminal/console.h b/examples/serialport/terminal/console.h
index 0674ded..b9fe553 100644
--- a/examples/serialport/terminal/console.h
+++ b/examples/serialport/terminal/console.h
@@ -65,18 +65,16 @@ public:
explicit Console(QWidget *parent = nullptr);
void putData(const QByteArray &data);
-
void setLocalEchoEnabled(bool set);
protected:
- void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void contextMenuEvent(QContextMenuEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *e) override;
+ void mousePressEvent(QMouseEvent *e) override;
+ void mouseDoubleClickEvent(QMouseEvent *e) override;
+ void contextMenuEvent(QContextMenuEvent *e) override;
private:
- bool localEchoEnabled;
-
+ bool m_localEchoEnabled = false;
};
#endif // CONSOLE_H
diff --git a/examples/serialport/terminal/main.cpp b/examples/serialport/terminal/main.cpp
index ec64e37..a6e901a 100644
--- a/examples/serialport/terminal/main.cpp
+++ b/examples/serialport/terminal/main.cpp
@@ -49,10 +49,10 @@
**
****************************************************************************/
-#include <QApplication>
-
#include "mainwindow.h"
+#include <QApplication>
+
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
diff --git a/examples/serialport/terminal/mainwindow.cpp b/examples/serialport/terminal/mainwindow.cpp
index f6e86cc..e8ac9d7 100644
--- a/examples/serialport/terminal/mainwindow.cpp
+++ b/examples/serialport/terminal/mainwindow.cpp
@@ -54,73 +54,71 @@
#include "console.h"
#include "settingsdialog.h"
-#include <QMessageBox>
#include <QLabel>
-#include <QtSerialPort/QSerialPort>
+#include <QMessageBox>
//! [0]
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
- ui(new Ui::MainWindow)
-{
-//! [0]
- ui->setupUi(this);
- console = new Console;
- console->setEnabled(false);
- setCentralWidget(console);
+ m_ui(new Ui::MainWindow),
+ m_status(new QLabel),
+ m_console(new Console),
+ m_settings(new SettingsDialog),
//! [1]
- serial = new QSerialPort(this);
+ m_serial(new QSerialPort(this))
//! [1]
- settings = new SettingsDialog;
+{
+//! [0]
+ m_ui->setupUi(this);
+ m_console->setEnabled(false);
+ setCentralWidget(m_console);
- ui->actionConnect->setEnabled(true);
- ui->actionDisconnect->setEnabled(false);
- ui->actionQuit->setEnabled(true);
- ui->actionConfigure->setEnabled(true);
+ m_ui->actionConnect->setEnabled(true);
+ m_ui->actionDisconnect->setEnabled(false);
+ m_ui->actionQuit->setEnabled(true);
+ m_ui->actionConfigure->setEnabled(true);
- status = new QLabel;
- ui->statusBar->addWidget(status);
+ m_ui->statusBar->addWidget(m_status);
initActionsConnections();
- connect(serial, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error),
- this, &MainWindow::handleError);
+ connect(m_serial, &QSerialPort::errorOccurred, this, &MainWindow::handleError);
//! [2]
- connect(serial, &QSerialPort::readyRead, this, &MainWindow::readData);
+ connect(m_serial, &QSerialPort::readyRead, this, &MainWindow::readData);
//! [2]
- connect(console, &Console::getData, this, &MainWindow::writeData);
+ connect(m_console, &Console::getData, this, &MainWindow::writeData);
//! [3]
}
//! [3]
MainWindow::~MainWindow()
{
- delete settings;
- delete ui;
+ delete m_settings;
+ delete m_ui;
}
//! [4]
void MainWindow::openSerialPort()
{
- SettingsDialog::Settings p = settings->settings();
- serial->setPortName(p.name);
- serial->setBaudRate(p.baudRate);
- serial->setDataBits(p.dataBits);
- serial->setParity(p.parity);
- serial->setStopBits(p.stopBits);
- serial->setFlowControl(p.flowControl);
- if (serial->open(QIODevice::ReadWrite)) {
- console->setEnabled(true);
- console->setLocalEchoEnabled(p.localEchoEnabled);
- ui->actionConnect->setEnabled(false);
- ui->actionDisconnect->setEnabled(true);
- ui->actionConfigure->setEnabled(false);
+ const SettingsDialog::Settings p = m_settings->settings();
+ m_serial->setPortName(p.name);
+ m_serial->setBaudRate(p.baudRate);
+ m_serial->setDataBits(p.dataBits);
+ m_serial->setParity(p.parity);
+ m_serial->setStopBits(p.stopBits);
+ m_serial->setFlowControl(p.flowControl);
+ if (m_serial->open(QIODevice::ReadWrite)) {
+ m_console->setEnabled(true);
+ m_console->setLocalEchoEnabled(p.localEchoEnabled);
+ m_ui->actionConnect->setEnabled(false);
+ m_ui->actionDisconnect->setEnabled(true);
+ m_ui->actionConfigure->setEnabled(false);
showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
} else {
- QMessageBox::critical(this, tr("Error"), serial->errorString());
+ QMessageBox::critical(this, tr("Error"), m_serial->errorString());
showStatusMessage(tr("Open error"));
}
@@ -130,12 +128,12 @@ void MainWindow::openSerialPort()
//! [5]
void MainWindow::closeSerialPort()
{
- if (serial->isOpen())
- serial->close();
- console->setEnabled(false);
- ui->actionConnect->setEnabled(true);
- ui->actionDisconnect->setEnabled(false);
- ui->actionConfigure->setEnabled(true);
+ if (m_serial->isOpen())
+ m_serial->close();
+ m_console->setEnabled(false);
+ m_ui->actionConnect->setEnabled(true);
+ m_ui->actionDisconnect->setEnabled(false);
+ m_ui->actionConfigure->setEnabled(true);
showStatusMessage(tr("Disconnected"));
}
//! [5]
@@ -151,15 +149,15 @@ void MainWindow::about()
//! [6]
void MainWindow::writeData(const QByteArray &data)
{
- serial->write(data);
+ m_serial->write(data);
}
//! [6]
//! [7]
void MainWindow::readData()
{
- QByteArray data = serial->readAll();
- console->putData(data);
+ const QByteArray data = m_serial->readAll();
+ m_console->putData(data);
}
//! [7]
@@ -167,7 +165,7 @@ void MainWindow::readData()
void MainWindow::handleError(QSerialPort::SerialPortError error)
{
if (error == QSerialPort::ResourceError) {
- QMessageBox::critical(this, tr("Critical Error"), serial->errorString());
+ QMessageBox::critical(this, tr("Critical Error"), m_serial->errorString());
closeSerialPort();
}
}
@@ -175,16 +173,16 @@ void MainWindow::handleError(QSerialPort::SerialPortError error)
void MainWindow::initActionsConnections()
{
- connect(ui->actionConnect, &QAction::triggered, this, &MainWindow::openSerialPort);
- connect(ui->actionDisconnect, &QAction::triggered, this, &MainWindow::closeSerialPort);
- connect(ui->actionQuit, &QAction::triggered, this, &MainWindow::close);
- connect(ui->actionConfigure, &QAction::triggered, settings, &SettingsDialog::show);
- connect(ui->actionClear, &QAction::triggered, console, &Console::clear);
- connect(ui->actionAbout, &QAction::triggered, this, &MainWindow::about);
- connect(ui->actionAboutQt, &QAction::triggered, qApp, &QApplication::aboutQt);
+ connect(m_ui->actionConnect, &QAction::triggered, this, &MainWindow::openSerialPort);
+ connect(m_ui->actionDisconnect, &QAction::triggered, this, &MainWindow::closeSerialPort);
+ connect(m_ui->actionQuit, &QAction::triggered, this, &MainWindow::close);
+ connect(m_ui->actionConfigure, &QAction::triggered, m_settings, &SettingsDialog::show);
+ connect(m_ui->actionClear, &QAction::triggered, m_console, &Console::clear);
+ connect(m_ui->actionAbout, &QAction::triggered, this, &MainWindow::about);
+ connect(m_ui->actionAboutQt, &QAction::triggered, qApp, &QApplication::aboutQt);
}
void MainWindow::showStatusMessage(const QString &message)
{
- status->setText(message);
+ m_status->setText(message);
}
diff --git a/examples/serialport/terminal/mainwindow.h b/examples/serialport/terminal/mainwindow.h
index b792895..eebae8c 100644
--- a/examples/serialport/terminal/mainwindow.h
+++ b/examples/serialport/terminal/mainwindow.h
@@ -52,11 +52,8 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
-#include <QtCore/QtGlobal>
-
#include <QMainWindow>
-
-#include <QtSerialPort/QSerialPort>
+#include <QSerialPort>
QT_BEGIN_NAMESPACE
@@ -94,11 +91,11 @@ private:
private:
void showStatusMessage(const QString &message);
- Ui::MainWindow *ui;
- QLabel *status;
- Console *console;
- SettingsDialog *settings;
- QSerialPort *serial;
+ Ui::MainWindow *m_ui = nullptr;
+ QLabel *m_status = nullptr;
+ Console *m_console = nullptr;
+ SettingsDialog *m_settings = nullptr;
+ QSerialPort *m_serial = nullptr;
};
#endif // MAINWINDOW_H
diff --git a/examples/serialport/terminal/settingsdialog.cpp b/examples/serialport/terminal/settingsdialog.cpp
index f9b8605..4b16bf5 100644
--- a/examples/serialport/terminal/settingsdialog.cpp
+++ b/examples/serialport/terminal/settingsdialog.cpp
@@ -52,31 +52,28 @@
#include "settingsdialog.h"
#include "ui_settingsdialog.h"
-#include <QtSerialPort/QSerialPortInfo>
#include <QIntValidator>
#include <QLineEdit>
-
-QT_USE_NAMESPACE
+#include <QSerialPortInfo>
static const char blankString[] = QT_TRANSLATE_NOOP("SettingsDialog", "N/A");
SettingsDialog::SettingsDialog(QWidget *parent) :
QDialog(parent),
- ui(new Ui::SettingsDialog)
+ m_ui(new Ui::SettingsDialog),
+ m_intValidator(new QIntValidator(0, 4000000, this))
{
- ui->setupUi(this);
-
- intValidator = new QIntValidator(0, 4000000, this);
+ m_ui->setupUi(this);
- ui->baudRateBox->setInsertPolicy(QComboBox::NoInsert);
+ m_ui->baudRateBox->setInsertPolicy(QComboBox::NoInsert);
- connect(ui->applyButton, &QPushButton::clicked,
+ connect(m_ui->applyButton, &QPushButton::clicked,
this, &SettingsDialog::apply);
- connect(ui->serialPortInfoListBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ connect(m_ui->serialPortInfoListBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &SettingsDialog::showPortInfo);
- connect(ui->baudRateBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ connect(m_ui->baudRateBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &SettingsDialog::checkCustomBaudRatePolicy);
- connect(ui->serialPortInfoListBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ connect(m_ui->serialPortInfoListBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &SettingsDialog::checkCustomDevicePathPolicy);
fillPortsParameters();
@@ -87,12 +84,12 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
SettingsDialog::~SettingsDialog()
{
- delete ui;
+ delete m_ui;
}
SettingsDialog::Settings SettingsDialog::settings() const
{
- return currentSettings;
+ return m_currentSettings;
}
void SettingsDialog::showPortInfo(int idx)
@@ -100,13 +97,13 @@ void SettingsDialog::showPortInfo(int idx)
if (idx == -1)
return;
- QStringList list = ui->serialPortInfoListBox->itemData(idx).toStringList();
- ui->descriptionLabel->setText(tr("Description: %1").arg(list.count() > 1 ? list.at(1) : tr(blankString)));
- ui->manufacturerLabel->setText(tr("Manufacturer: %1").arg(list.count() > 2 ? list.at(2) : tr(blankString)));
- ui->serialNumberLabel->setText(tr("Serial number: %1").arg(list.count() > 3 ? list.at(3) : tr(blankString)));
- ui->locationLabel->setText(tr("Location: %1").arg(list.count() > 4 ? list.at(4) : tr(blankString)));
- ui->vidLabel->setText(tr("Vendor Identifier: %1").arg(list.count() > 5 ? list.at(5) : tr(blankString)));
- ui->pidLabel->setText(tr("Product Identifier: %1").arg(list.count() > 6 ? list.at(6) : tr(blankString)));
+ const QStringList list = m_ui->serialPortInfoListBox->itemData(idx).toStringList();
+ m_ui->descriptionLabel->setText(tr("Description: %1").arg(list.count() > 1 ? list.at(1) : tr(blankString)));
+ m_ui->manufacturerLabel->setText(tr("Manufacturer: %1").arg(list.count() > 2 ? list.at(2) : tr(blankString)));
+ m_ui->serialNumberLabel->setText(tr("Serial number: %1").arg(list.count() > 3 ? list.at(3) : tr(blankString)));
+ m_ui->locationLabel->setText(tr("Location: %1").arg(list.count() > 4 ? list.at(4) : tr(blankString)));
+ m_ui->vidLabel->setText(tr("Vendor Identifier: %1").arg(list.count() > 5 ? list.at(5) : tr(blankString)));
+ m_ui->pidLabel->setText(tr("Product Identifier: %1").arg(list.count() > 6 ? list.at(6) : tr(blankString)));
}
void SettingsDialog::apply()
@@ -117,57 +114,57 @@ void SettingsDialog::apply()
void SettingsDialog::checkCustomBaudRatePolicy(int idx)
{
- bool isCustomBaudRate = !ui->baudRateBox->itemData(idx).isValid();
- ui->baudRateBox->setEditable(isCustomBaudRate);
+ const bool isCustomBaudRate = !m_ui->baudRateBox->itemData(idx).isValid();
+ m_ui->baudRateBox->setEditable(isCustomBaudRate);
if (isCustomBaudRate) {
- ui->baudRateBox->clearEditText();
- QLineEdit *edit = ui->baudRateBox->lineEdit();
- edit->setValidator(intValidator);
+ m_ui->baudRateBox->clearEditText();
+ QLineEdit *edit = m_ui->baudRateBox->lineEdit();
+ edit->setValidator(m_intValidator);
}
}
void SettingsDialog::checkCustomDevicePathPolicy(int idx)
{
- bool isCustomPath = !ui->serialPortInfoListBox->itemData(idx).isValid();
- ui->serialPortInfoListBox->setEditable(isCustomPath);
+ const bool isCustomPath = !m_ui->serialPortInfoListBox->itemData(idx).isValid();
+ m_ui->serialPortInfoListBox->setEditable(isCustomPath);
if (isCustomPath)
- ui->serialPortInfoListBox->clearEditText();
+ m_ui->serialPortInfoListBox->clearEditText();
}
void SettingsDialog::fillPortsParameters()
{
- ui->baudRateBox->addItem(QStringLiteral("9600"), QSerialPort::Baud9600);
- ui->baudRateBox->addItem(QStringLiteral("19200"), QSerialPort::Baud19200);
- ui->baudRateBox->addItem(QStringLiteral("38400"), QSerialPort::Baud38400);
- ui->baudRateBox->addItem(QStringLiteral("115200"), QSerialPort::Baud115200);
- ui->baudRateBox->addItem(tr("Custom"));
-
- ui->dataBitsBox->addItem(QStringLiteral("5"), QSerialPort::Data5);
- ui->dataBitsBox->addItem(QStringLiteral("6"), QSerialPort::Data6);
- ui->dataBitsBox->addItem(QStringLiteral("7"), QSerialPort::Data7);
- ui->dataBitsBox->addItem(QStringLiteral("8"), QSerialPort::Data8);
- ui->dataBitsBox->setCurrentIndex(3);
-
- ui->parityBox->addItem(tr("None"), QSerialPort::NoParity);
- ui->parityBox->addItem(tr("Even"), QSerialPort::EvenParity);
- ui->parityBox->addItem(tr("Odd"), QSerialPort::OddParity);
- ui->parityBox->addItem(tr("Mark"), QSerialPort::MarkParity);
- ui->parityBox->addItem(tr("Space"), QSerialPort::SpaceParity);
-
- ui->stopBitsBox->addItem(QStringLiteral("1"), QSerialPort::OneStop);
+ m_ui->baudRateBox->addItem(QStringLiteral("9600"), QSerialPort::Baud9600);
+ m_ui->baudRateBox->addItem(QStringLiteral("19200"), QSerialPort::Baud19200);
+ m_ui->baudRateBox->addItem(QStringLiteral("38400"), QSerialPort::Baud38400);
+ m_ui->baudRateBox->addItem(QStringLiteral("115200"), QSerialPort::Baud115200);
+ m_ui->baudRateBox->addItem(tr("Custom"));
+
+ m_ui->dataBitsBox->addItem(QStringLiteral("5"), QSerialPort::Data5);
+ m_ui->dataBitsBox->addItem(QStringLiteral("6"), QSerialPort::Data6);
+ m_ui->dataBitsBox->addItem(QStringLiteral("7"), QSerialPort::Data7);
+ m_ui->dataBitsBox->addItem(QStringLiteral("8"), QSerialPort::Data8);
+ m_ui->dataBitsBox->setCurrentIndex(3);
+
+ m_ui->parityBox->addItem(tr("None"), QSerialPort::NoParity);
+ m_ui->parityBox->addItem(tr("Even"), QSerialPort::EvenParity);
+ m_ui->parityBox->addItem(tr("Odd"), QSerialPort::OddParity);
+ m_ui->parityBox->addItem(tr("Mark"), QSerialPort::MarkParity);
+ m_ui->parityBox->addItem(tr("Space"), QSerialPort::SpaceParity);
+
+ m_ui->stopBitsBox->addItem(QStringLiteral("1"), QSerialPort::OneStop);
#ifdef Q_OS_WIN
- ui->stopBitsBox->addItem(tr("1.5"), QSerialPort::OneAndHalfStop);
+ m_ui->stopBitsBox->addItem(tr("1.5"), QSerialPort::OneAndHalfStop);
#endif
- ui->stopBitsBox->addItem(QStringLiteral("2"), QSerialPort::TwoStop);
+ m_ui->stopBitsBox->addItem(QStringLiteral("2"), QSerialPort::TwoStop);
- ui->flowControlBox->addItem(tr("None"), QSerialPort::NoFlowControl);
- ui->flowControlBox->addItem(tr("RTS/CTS"), QSerialPort::HardwareControl);
- ui->flowControlBox->addItem(tr("XON/XOFF"), QSerialPort::SoftwareControl);
+ m_ui->flowControlBox->addItem(tr("None"), QSerialPort::NoFlowControl);
+ m_ui->flowControlBox->addItem(tr("RTS/CTS"), QSerialPort::HardwareControl);
+ m_ui->flowControlBox->addItem(tr("XON/XOFF"), QSerialPort::SoftwareControl);
}
void SettingsDialog::fillPortsInfo()
{
- ui->serialPortInfoListBox->clear();
+ m_ui->serialPortInfoListBox->clear();
QString description;
QString manufacturer;
QString serialNumber;
@@ -185,39 +182,39 @@ void SettingsDialog::fillPortsInfo()
<< (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : blankString)
<< (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : blankString);
- ui->serialPortInfoListBox->addItem(list.first(), list);
+ m_ui->serialPortInfoListBox->addItem(list.first(), list);
}
- ui->serialPortInfoListBox->addItem(tr("Custom"));
+ m_ui->serialPortInfoListBox->addItem(tr("Custom"));
}
void SettingsDialog::updateSettings()
{
- currentSettings.name = ui->serialPortInfoListBox->currentText();
+ m_currentSettings.name = m_ui->serialPortInfoListBox->currentText();
- if (ui->baudRateBox->currentIndex() == 4) {
- currentSettings.baudRate = ui->baudRateBox->currentText().toInt();
+ if (m_ui->baudRateBox->currentIndex() == 4) {
+ m_currentSettings.baudRate = m_ui->baudRateBox->currentText().toInt();
} else {
- currentSettings.baudRate = static_cast<QSerialPort::BaudRate>(
- ui->baudRateBox->itemData(ui->baudRateBox->currentIndex()).toInt());
+ m_currentSettings.baudRate = static_cast<QSerialPort::BaudRate>(
+ m_ui->baudRateBox->itemData(m_ui->baudRateBox->currentIndex()).toInt());
}
- currentSettings.stringBaudRate = QString::number(currentSettings.baudRate);
+ m_currentSettings.stringBaudRate = QString::number(m_currentSettings.baudRate);
- currentSettings.dataBits = static_cast<QSerialPort::DataBits>(
- ui->dataBitsBox->itemData(ui->dataBitsBox->currentIndex()).toInt());
- currentSettings.stringDataBits = ui->dataBitsBox->currentText();
+ m_currentSettings.dataBits = static_cast<QSerialPort::DataBits>(
+ m_ui->dataBitsBox->itemData(m_ui->dataBitsBox->currentIndex()).toInt());
+ m_currentSettings.stringDataBits = m_ui->dataBitsBox->currentText();
- currentSettings.parity = static_cast<QSerialPort::Parity>(
- ui->parityBox->itemData(ui->parityBox->currentIndex()).toInt());
- currentSettings.stringParity = ui->parityBox->currentText();
+ m_currentSettings.parity = static_cast<QSerialPort::Parity>(
+ m_ui->parityBox->itemData(m_ui->parityBox->currentIndex()).toInt());
+ m_currentSettings.stringParity = m_ui->parityBox->currentText();
- currentSettings.stopBits = static_cast<QSerialPort::StopBits>(
- ui->stopBitsBox->itemData(ui->stopBitsBox->currentIndex()).toInt());
- currentSettings.stringStopBits = ui->stopBitsBox->currentText();
+ m_currentSettings.stopBits = static_cast<QSerialPort::StopBits>(
+ m_ui->stopBitsBox->itemData(m_ui->stopBitsBox->currentIndex()).toInt());
+ m_currentSettings.stringStopBits = m_ui->stopBitsBox->currentText();
- currentSettings.flowControl = static_cast<QSerialPort::FlowControl>(
- ui->flowControlBox->itemData(ui->flowControlBox->currentIndex()).toInt());
- currentSettings.stringFlowControl = ui->flowControlBox->currentText();
+ m_currentSettings.flowControl = static_cast<QSerialPort::FlowControl>(
+ m_ui->flowControlBox->itemData(m_ui->flowControlBox->currentIndex()).toInt());
+ m_currentSettings.stringFlowControl = m_ui->flowControlBox->currentText();
- currentSettings.localEchoEnabled = ui->localEchoCheckBox->isChecked();
+ m_currentSettings.localEchoEnabled = m_ui->localEchoCheckBox->isChecked();
}
diff --git a/examples/serialport/terminal/settingsdialog.h b/examples/serialport/terminal/settingsdialog.h
index ea249c1..4c0cda1 100644
--- a/examples/serialport/terminal/settingsdialog.h
+++ b/examples/serialport/terminal/settingsdialog.h
@@ -53,9 +53,7 @@
#define SETTINGSDIALOG_H
#include <QDialog>
-#include <QtSerialPort/QSerialPort>
-
-QT_USE_NAMESPACE
+#include <QSerialPort>
QT_BEGIN_NAMESPACE
@@ -104,9 +102,9 @@ private:
void updateSettings();
private:
- Ui::SettingsDialog *ui;
- Settings currentSettings;
- QIntValidator *intValidator;
+ Ui::SettingsDialog *m_ui = nullptr;
+ Settings m_currentSettings;
+ QIntValidator *m_intValidator = nullptr;
};
#endif // SETTINGSDIALOG_H
diff --git a/examples/serialport/terminal/terminal.pro b/examples/serialport/terminal/terminal.pro
index 4dbed02..fda5a8a 100644
--- a/examples/serialport/terminal/terminal.pro
+++ b/examples/serialport/terminal/terminal.pro
@@ -1,4 +1,5 @@
QT += widgets serialport
+requires(qtConfig(combobox))
TARGET = terminal
TEMPLATE = app
diff --git a/src/serialport/doc/src/index.qdoc b/src/serialport/doc/src/index.qdoc
index 3b0f762..041188e 100644
--- a/src/serialport/doc/src/index.qdoc
+++ b/src/serialport/doc/src/index.qdoc
@@ -43,11 +43,18 @@
\li Pinout signal change notification.
\endlist
- To use these classes in your application, use the following include
+ To use the serial port in your application, add the following include
statement:
\code
- #include <QtSerialPort/QtSerialPort>
+ #include <QSerialPort>
+ \endcode
+
+ For information about available serial ports, use the following include
+ statement:
+
+ \code
+ #include <QSerialPortInfo>
\endcode
To link against the module, add this line to your \l qmake \c
diff --git a/src/serialport/doc/src/qtserialport-module.qdoc b/src/serialport/doc/src/qtserialport-module.qdoc
index 325b780..6c153a0 100644
--- a/src/serialport/doc/src/qtserialport-module.qdoc
+++ b/src/serialport/doc/src/qtserialport-module.qdoc
@@ -32,11 +32,17 @@
\qtvariable serialport
\brief List of C++ classes that enable access to a serial port.
- To use these classes in your application, use the following include
+ To use QSerialPort in your application, add the following include
statement:
\code
- #include <QtSerialPort/QtSerialPort>
+ #include <QSerialPort>
+ \endcode
+
+ For QSerialPortInfo, use the following include statement:
+
+ \code
+ #include <QSerialPortInfo>
\endcode
To link against the module, add this line to your \l qmake \c
diff --git a/src/serialport/qserialport.cpp b/src/serialport/qserialport.cpp
index 8ea5a48..3b88736 100644
--- a/src/serialport/qserialport.cpp
+++ b/src/serialport/qserialport.cpp
@@ -87,42 +87,12 @@ QSerialPortErrorInfo::QSerialPortErrorInfo(QSerialPort::SerialPortError newError
}
QSerialPortPrivate::QSerialPortPrivate()
- : readBufferMaxSize(0)
- , error(QSerialPort::NoError)
- , inputBaudRate(9600)
- , outputBaudRate(9600)
- , dataBits(QSerialPort::Data8)
- , parity(QSerialPort::NoParity)
- , stopBits(QSerialPort::OneStop)
- , flowControl(QSerialPort::NoFlowControl)
-#if QT_DEPRECATED_SINCE(5,3)
- , settingsRestoredOnClose(true)
-#endif
- , isBreakEnabled(false)
#if defined(Q_OS_WIN32)
- , handle(INVALID_HANDLE_VALUE)
- , readChunkBuffer(ReadChunkSize, 0)
- , communicationStarted(false)
- , writeStarted(false)
- , readStarted(false)
- , notifier(0)
- , startAsyncWriteTimer(0)
- , originalEventMask(0)
- , triggeredEventMask(0)
-#elif defined(Q_OS_UNIX)
- , descriptor(-1)
- , readNotifier(0)
- , writeNotifier(0)
- , readPortNotifierCalled(false)
- , readPortNotifierState(false)
- , readPortNotifierStateSet(false)
- , emittedReadyRead(false)
- , emittedBytesWritten(false)
- , pendingBytesWritten(0)
- , writeSequenceStarted(false)
+ : readChunkBuffer(QSERIALPORT_BUFFERSIZE, 0)
#endif
{
- writeBufferChunkSize = InitialBufferSize;
+ writeBufferChunkSize = QSERIALPORT_BUFFERSIZE;
+ readBufferChunkSize = QSERIALPORT_BUFFERSIZE;
}
void QSerialPortPrivate::setError(const QSerialPortErrorInfo &errorInfo)
@@ -1244,10 +1214,9 @@ qint64 QSerialPort::readBufferSize() const
void QSerialPort::setReadBufferSize(qint64 size)
{
Q_D(QSerialPort);
-
- if (d->readBufferMaxSize == size)
- return;
d->readBufferMaxSize = size;
+ if (isReadable())
+ d->startAsyncRead();
}
/*!
@@ -1436,21 +1405,9 @@ qint64 QSerialPort::readData(char *data, qint64 maxSize)
Q_UNUSED(data);
Q_UNUSED(maxSize);
-#if defined(Q_OS_WIN32)
- // We need try to start async reading to read a remainder from a driver's queue
- // in case we have a limited read buffer size. Because the read notification can
- // be stalled since Windows do not re-triggered an EV_RXCHAR event if a driver's
- // buffer has a remainder of data ready to read until a new data will be received.
- Q_D(QSerialPort);
- if (d->readBufferMaxSize || d->flowControl == QSerialPort::HardwareControl)
- d->startAsyncRead();
-#elif defined(Q_OS_UNIX)
- // We need try to re-trigger the read notification to read a remainder from a
- // driver's queue in case we have a limited read buffer size.
- Q_D(QSerialPort);
- if (d->readBufferMaxSize && !d->isReadNotificationEnabled())
- d->setReadNotificationEnabled(true);
-#endif
+ // In any case we need to start the notifications if they were
+ // disabled by the read handler. If enabled, next call does nothing.
+ d_func()->startAsyncRead();
// return 0 indicating there may be more data in the future
return qint64(0);
diff --git a/src/serialport/qserialport_p.h b/src/serialport/qserialport_p.h
index 10fda34..b0955ae 100644
--- a/src/serialport/qserialport_p.h
+++ b/src/serialport/qserialport_p.h
@@ -56,6 +56,7 @@
#include "qserialport.h"
#include <private/qiodevice_p.h>
+#include <qdeadlinetimer.h>
#if defined(Q_OS_WIN32)
# include <qt_windows.h>
@@ -97,9 +98,12 @@ struct serial_struct {
# error Unsupported OS
#endif
+#ifndef QSERIALPORT_BUFFERSIZE
+#define QSERIALPORT_BUFFERSIZE 32768
+#endif
+
QT_BEGIN_NAMESPACE
-class QThread;
class QWinOverlappedIoNotifier;
class QTimer;
class QSocketNotifier;
@@ -113,7 +117,7 @@ class QSerialPortErrorInfo
public:
explicit QSerialPortErrorInfo(QSerialPort::SerialPortError newErrorCode = QSerialPort::UnknownError,
const QString &newErrorString = QString());
- QSerialPort::SerialPortError errorCode;
+ QSerialPort::SerialPortError errorCode = QSerialPort::UnknownError;
QString errorString;
};
@@ -121,11 +125,6 @@ class QSerialPortPrivate : public QIODevicePrivate
{
Q_DECLARE_PUBLIC(QSerialPort)
public:
- enum IoConstants {
- ReadChunkSize = 512,
- InitialBufferSize = 16384
- };
-
QSerialPortPrivate();
bool open(QIODevice::OpenMode mode);
@@ -158,33 +157,32 @@ public:
qint64 writeData(const char *data, qint64 maxSize);
+ bool initialize(QIODevice::OpenMode mode);
+
static QString portNameToSystemLocation(const QString &port);
static QString portNameFromSystemLocation(const QString &location);
-#if defined(Q_OS_UNIX)
- static qint32 settingFromBaudRate(qint32 baudRate);
-#endif
-
static QList<qint32> standardBaudRates();
- qint64 readBufferMaxSize;
- QSerialPort::SerialPortError error;
+ qint64 readBufferMaxSize = 0;
+ QSerialPort::SerialPortError error = QSerialPort::NoError;
QString systemLocation;
- qint32 inputBaudRate;
- qint32 outputBaudRate;
- QSerialPort::DataBits dataBits;
- QSerialPort::Parity parity;
- QSerialPort::StopBits stopBits;
- QSerialPort::FlowControl flowControl;
- bool settingsRestoredOnClose;
- bool isBreakEnabled;
+ qint32 inputBaudRate = QSerialPort::Baud9600;
+ qint32 outputBaudRate = QSerialPort::Baud9600;
+ QSerialPort::DataBits dataBits = QSerialPort::Data8;
+ QSerialPort::Parity parity = QSerialPort::NoParity;
+ QSerialPort::StopBits stopBits = QSerialPort::OneStop;
+ QSerialPort::FlowControl flowControl = QSerialPort::NoFlowControl;
+ bool settingsRestoredOnClose = true;
+ bool isBreakEnabled = false;
+
+ bool startAsyncRead();
#if defined(Q_OS_WIN32)
- bool initialize();
bool setDcb(DCB *dcb);
bool getDcb(DCB *dcb);
- OVERLAPPED *waitForNotified(int msecs);
+ OVERLAPPED *waitForNotified(QDeadlineTimer deadline);
qint64 queuedBytesCount(QSerialPort::Direction direction) const;
@@ -193,7 +191,6 @@ public:
bool completeAsyncWrite(qint64 bytesTransferred);
bool startAsyncCommunication();
- bool startAsyncRead();
bool _q_startAsyncWrite();
void _q_notified(DWORD numberOfBytes, DWORD errorCode, OVERLAPPED *overlapped);
@@ -202,23 +199,23 @@ public:
DCB restoredDcb;
COMMTIMEOUTS currentCommTimeouts;
COMMTIMEOUTS restoredCommTimeouts;
- HANDLE handle;
+ HANDLE handle = INVALID_HANDLE_VALUE;
QByteArray readChunkBuffer;
QByteArray writeChunkBuffer;
- bool communicationStarted;
- bool writeStarted;
- bool readStarted;
- QWinOverlappedIoNotifier *notifier;
- QTimer *startAsyncWriteTimer;
+ bool communicationStarted = false;
+ bool writeStarted = false;
+ bool readStarted = false;
+ QWinOverlappedIoNotifier *notifier = nullptr;
+ QTimer *startAsyncWriteTimer = nullptr;
OVERLAPPED communicationOverlapped;
OVERLAPPED readCompletionOverlapped;
OVERLAPPED writeCompletionOverlapped;
- DWORD originalEventMask;
- DWORD triggeredEventMask;
+ DWORD triggeredEventMask = 0;
#elif defined(Q_OS_UNIX)
- bool initialize(QIODevice::OpenMode mode);
+ static qint32 settingFromBaudRate(qint32 baudRate);
+
bool setTermios(const termios *tio);
bool getTermios(termios *tio);
@@ -246,20 +243,20 @@ public:
bool completeAsyncWrite();
struct termios restoredTermios;
- int descriptor;
+ int descriptor = -1;
- QSocketNotifier *readNotifier;
- QSocketNotifier *writeNotifier;
+ QSocketNotifier *readNotifier = nullptr;
+ QSocketNotifier *writeNotifier = nullptr;
- bool readPortNotifierCalled;
- bool readPortNotifierState;
- bool readPortNotifierStateSet;
+ bool readPortNotifierCalled = false;
+ bool readPortNotifierState = false;
+ bool readPortNotifierStateSet = false;
- bool emittedReadyRead;
- bool emittedBytesWritten;
+ bool emittedReadyRead = false;
+ bool emittedBytesWritten = false;
- qint64 pendingBytesWritten;
- bool writeSequenceStarted;
+ qint64 pendingBytesWritten = 0;
+ bool writeSequenceStarted = false;
QScopedPointer<QLockFile> lockFileScopedPointer;
diff --git a/src/serialport/qserialport_unix.cpp b/src/serialport/qserialport_unix.cpp
index 4df1fcb..05db317 100644
--- a/src/serialport/qserialport_unix.cpp
+++ b/src/serialport/qserialport_unix.cpp
@@ -42,10 +42,17 @@
#include "qserialport_p.h"
#include "qserialportinfo_p.h"
+#include <QtCore/qelapsedtimer.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qsocketnotifier.h>
+#include <QtCore/qstandardpaths.h>
+
+#include <private/qcore_unix_p.h>
+
#include <errno.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
#include <unistd.h>
#ifdef Q_OS_OSX
@@ -93,16 +100,6 @@ struct termios2 {
#endif
-#include <private/qcore_unix_p.h>
-
-#include <QtCore/qelapsedtimer.h>
-#include <QtCore/qsocketnotifier.h>
-#include <QtCore/qmap.h>
-
-#ifdef Q_OS_OSX
-#include <QtCore/qstandardpaths.h>
-#endif
-
QT_BEGIN_NAMESPACE
QString serialPortLockFilePath(const QString &portName)
@@ -118,12 +115,8 @@ QString serialPortLockFilePath(const QString &portName)
<< QStringLiteral("/run/lock")
#ifdef Q_OS_ANDROID
<< QStringLiteral("/data/local/tmp")
-#elif defined(Q_OS_OSX)
- // This is the workaround to specify a temporary directory
- // on OSX when running the App Sandbox feature.
- << QStandardPaths::writableLocation(QStandardPaths::TempLocation);
#endif
- ;
+ << QStandardPaths::writableLocation(QStandardPaths::TempLocation);
QString fileName = portName;
fileName.replace(QLatin1Char('/'), QLatin1Char('_'));
@@ -156,7 +149,7 @@ QString serialPortLockFilePath(const QString &portName)
class ReadNotifier : public QSocketNotifier
{
public:
- ReadNotifier(QSerialPortPrivate *d, QObject *parent)
+ explicit ReadNotifier(QSerialPortPrivate *d, QObject *parent)
: QSocketNotifier(d->descriptor, QSocketNotifier::Read, parent)
, dptr(d)
{
@@ -173,13 +166,13 @@ protected:
}
private:
- QSerialPortPrivate *dptr;
+ QSerialPortPrivate * const dptr;
};
class WriteNotifier : public QSocketNotifier
{
public:
- WriteNotifier(QSerialPortPrivate *d, QObject *parent)
+ explicit WriteNotifier(QSerialPortPrivate *d, QObject *parent)
: QSocketNotifier(d->descriptor, QSocketNotifier::Write, parent)
, dptr(d)
{
@@ -196,7 +189,7 @@ protected:
}
private:
- QSerialPortPrivate *dptr;
+ QSerialPortPrivate * const dptr;
};
static inline void qt_set_common_props(termios *tio, QIODevice::OpenMode m)
@@ -763,13 +756,19 @@ bool QSerialPortPrivate::setFlowControl(QSerialPort::FlowControl flowControl)
return setTermios(&tio);
}
+bool QSerialPortPrivate::startAsyncRead()
+{
+ setReadNotificationEnabled(true);
+ return true;
+}
+
bool QSerialPortPrivate::readNotification()
{
Q_Q(QSerialPort);
// Always buffered, read data from the port into the read buffer
qint64 newBytes = buffer.size();
- qint64 bytesToRead = ReadChunkSize;
+ qint64 bytesToRead = QSERIALPORT_BUFFERSIZE;
if (readBufferMaxSize && bytesToRead > (readBufferMaxSize - buffer.size())) {
bytesToRead = readBufferMaxSize - buffer.size();
@@ -798,10 +797,6 @@ bool QSerialPortPrivate::readNotification()
newBytes = buffer.size() - newBytes;
- // If read buffer is full, disable the read port notifier.
- if (readBufferMaxSize && buffer.size() == readBufferMaxSize)
- setReadNotificationEnabled(false);
-
// only emit readyRead() when not recursing, and only if there is data available
const bool hasData = newBytes > 0;
diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp
index 87f9e7b..f90a7ef 100644
--- a/src/serialport/qserialport_win.cpp
+++ b/src/serialport/qserialport_win.cpp
@@ -40,12 +40,12 @@
****************************************************************************/
#include "qserialport_p.h"
+#include "qwinoverlappedionotifier_p.h"
#include <QtCore/qcoreevent.h>
#include <QtCore/qelapsedtimer.h>
#include <QtCore/qvector.h>
#include <QtCore/qtimer.h>
-#include <private/qwinoverlappedionotifier_p.h>
#include <algorithm>
#ifndef CTL_CODE
@@ -176,12 +176,9 @@ static inline void qt_set_flowcontrol(DCB *dcb, QSerialPort::FlowControl flowcon
bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
{
DWORD desiredAccess = 0;
- originalEventMask = 0;
- if (mode & QIODevice::ReadOnly) {
+ if (mode & QIODevice::ReadOnly)
desiredAccess |= GENERIC_READ;
- originalEventMask |= EV_RXCHAR;
- }
if (mode & QIODevice::WriteOnly)
desiredAccess |= GENERIC_WRITE;
@@ -193,7 +190,7 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
return false;
}
- if (initialize())
+ if (initialize(mode))
return true;
::CloseHandle(handle);
@@ -347,18 +344,16 @@ bool QSerialPortPrivate::waitForReadyRead(int msecs)
const qint64 initialReadBufferSize = buffer.size();
qint64 currentReadBufferSize = initialReadBufferSize;
- QElapsedTimer stopWatch;
- stopWatch.start();
+ QDeadlineTimer deadline(msecs);
do {
- const OVERLAPPED *overlapped = waitForNotified(
- qt_subtract_from_timeout(msecs, stopWatch.elapsed()));
+ const OVERLAPPED *overlapped = waitForNotified(deadline);
if (!overlapped)
return false;
if (overlapped == &readCompletionOverlapped) {
const qint64 readBytesForOneReadOperation = qint64(buffer.size()) - currentReadBufferSize;
- if (readBytesForOneReadOperation == ReadChunkSize) {
+ if (readBytesForOneReadOperation == QSERIALPORT_BUFFERSIZE) {
currentReadBufferSize = buffer.size();
} else if (readBytesForOneReadOperation == 0) {
if (initialReadBufferSize != currentReadBufferSize)
@@ -368,7 +363,7 @@ bool QSerialPortPrivate::waitForReadyRead(int msecs)
}
}
- } while (msecs == -1 || qt_subtract_from_timeout(msecs, stopWatch.elapsed()) > 0);
+ } while (!deadline.hasExpired());
return false;
}
@@ -381,12 +376,10 @@ bool QSerialPortPrivate::waitForBytesWritten(int msecs)
if (!writeStarted && !_q_startAsyncWrite())
return false;
- QElapsedTimer stopWatch;
- stopWatch.start();
+ QDeadlineTimer deadline(msecs);
for (;;) {
- const OVERLAPPED *overlapped = waitForNotified(
- qt_subtract_from_timeout(msecs, stopWatch.elapsed()));
+ const OVERLAPPED *overlapped = waitForNotified(deadline);
if (!overlapped)
return false;
@@ -484,11 +477,10 @@ bool QSerialPortPrivate::completeAsyncRead(qint64 bytesTransferred)
readStarted = false;
bool result = true;
- if (bytesTransferred == ReadChunkSize
+ if (bytesTransferred == QSERIALPORT_BUFFERSIZE
|| queuedBytesCount(QSerialPort::Input) > 0) {
result = startAsyncRead();
- } else if (readBufferMaxSize == 0
- || readBufferMaxSize > buffer.size()) {
+ } else {
result = startAsyncCommunication();
}
@@ -541,7 +533,7 @@ bool QSerialPortPrivate::startAsyncRead()
if (readStarted)
return true;
- qint64 bytesToRead = ReadChunkSize;
+ qint64 bytesToRead = QSERIALPORT_BUFFERSIZE;
if (readBufferMaxSize && bytesToRead > (readBufferMaxSize - buffer.size())) {
bytesToRead = readBufferMaxSize - buffer.size();
@@ -552,6 +544,8 @@ bool QSerialPortPrivate::startAsyncRead()
}
}
+ Q_ASSERT(int(bytesToRead) <= readChunkBuffer.size());
+
::ZeroMemory(&readCompletionOverlapped, sizeof(readCompletionOverlapped));
if (::ReadFile(handle, readChunkBuffer.data(), bytesToRead, nullptr, &readCompletionOverlapped)) {
readStarted = true;
@@ -638,9 +632,9 @@ qint64 QSerialPortPrivate::writeData(const char *data, qint64 maxSize)
return maxSize;
}
-OVERLAPPED *QSerialPortPrivate::waitForNotified(int msecs)
+OVERLAPPED *QSerialPortPrivate::waitForNotified(QDeadlineTimer deadline)
{
- OVERLAPPED *overlapped = notifier->waitForAnyNotified(msecs);
+ OVERLAPPED *overlapped = notifier->waitForAnyNotified(deadline);
if (!overlapped) {
setError(getSystemError(WAIT_TIMEOUT));
return nullptr;
@@ -658,7 +652,7 @@ qint64 QSerialPortPrivate::queuedBytesCount(QSerialPort::Direction direction) co
: ((direction == QSerialPort::Output) ? comstat.cbOutQue : -1);
}
-inline bool QSerialPortPrivate::initialize()
+inline bool QSerialPortPrivate::initialize(QIODevice::OpenMode mode)
{
Q_Q(QSerialPort);
@@ -691,20 +685,21 @@ inline bool QSerialPortPrivate::initialize()
return false;
}
- if (!::SetCommMask(handle, originalEventMask)) {
+ const DWORD eventMask = (mode & QIODevice::ReadOnly) ? EV_RXCHAR : 0;
+ if (!::SetCommMask(handle, eventMask)) {
setError(getSystemError());
return false;
}
+ if ((eventMask & EV_RXCHAR) && !startAsyncCommunication())
+ return false;
+
notifier = new QWinOverlappedIoNotifier(q);
QObjectPrivate::connect(notifier, &QWinOverlappedIoNotifier::notified,
this, &QSerialPortPrivate::_q_notified);
notifier->setHandle(handle);
notifier->setEnabled(true);
- if ((originalEventMask & EV_RXCHAR) && !startAsyncCommunication())
- return false;
-
return true;
}
@@ -785,80 +780,16 @@ QSerialPortErrorInfo QSerialPortPrivate::getSystemError(int systemErrorCode) con
}
// This table contains standard values of baud rates that
-// are defined in MSDN and/or in Win SDK file winbase.h
-
-static const QList<qint32> standardBaudRatePairList()
-{
-
- static const QList<qint32> standardBaudRatesTable = QList<qint32>()
-
- #ifdef CBR_110
- << CBR_110
- #endif
-
- #ifdef CBR_300
- << CBR_300
- #endif
-
- #ifdef CBR_600
- << CBR_600
- #endif
-
- #ifdef CBR_1200
- << CBR_1200
- #endif
-
- #ifdef CBR_2400
- << CBR_2400
- #endif
-
- #ifdef CBR_4800
- << CBR_4800
- #endif
-
- #ifdef CBR_9600
- << CBR_9600
- #endif
-
- #ifdef CBR_14400
- << CBR_14400
- #endif
-
- #ifdef CBR_19200
- << CBR_19200
- #endif
-
- #ifdef CBR_38400
- << CBR_38400
- #endif
-
- #ifdef CBR_56000
- << CBR_56000
- #endif
-
- #ifdef CBR_57600
- << CBR_57600
- #endif
-
- #ifdef CBR_115200
- << CBR_115200
- #endif
-
- #ifdef CBR_128000
- << CBR_128000
- #endif
-
- #ifdef CBR_256000
- << CBR_256000
- #endif
- ;
-
- return standardBaudRatesTable;
-};
-
+// are defined in file winbase.h
QList<qint32> QSerialPortPrivate::standardBaudRates()
{
- return standardBaudRatePairList();
+ static const QList<qint32> baudRates = {
+ CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400,
+ CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400,
+ CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000
+ };
+
+ return baudRates;
}
QSerialPort::Handle QSerialPort::handle() const
diff --git a/src/serialport/qserialportinfo_p.h b/src/serialport/qserialportinfo_p.h
index 483ff8c..405cc41 100644
--- a/src/serialport/qserialportinfo_p.h
+++ b/src/serialport/qserialportinfo_p.h
@@ -60,18 +60,6 @@ QT_BEGIN_NAMESPACE
class Q_AUTOTEST_EXPORT QSerialPortInfoPrivate
{
public:
- QSerialPortInfoPrivate()
- : vendorIdentifier(0)
- , productIdentifier(0)
- , hasVendorIdentifier(false)
- , hasProductIdentifier(false)
- {
- }
-
- ~QSerialPortInfoPrivate()
- {
- }
-
static QString portNameToSystemLocation(const QString &source);
static QString portNameFromSystemLocation(const QString &source);
@@ -81,11 +69,11 @@ public:
QString manufacturer;
QString serialNumber;
- quint16 vendorIdentifier;
- quint16 productIdentifier;
+ quint16 vendorIdentifier = 0;
+ quint16 productIdentifier = 0;
- bool hasVendorIdentifier;
- bool hasProductIdentifier;
+ bool hasVendorIdentifier = false;
+ bool hasProductIdentifier = false;
};
class QSerialPortInfoPrivateDeleter
diff --git a/src/serialport/qwinoverlappedionotifier.cpp b/src/serialport/qwinoverlappedionotifier.cpp
new file mode 100644
index 0000000..dfae3b0
--- /dev/null
+++ b/src/serialport/qwinoverlappedionotifier.cpp
@@ -0,0 +1,420 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwinoverlappedionotifier_p.h"
+#include <qdebug.h>
+#include <qatomic.h>
+#include <qelapsedtimer.h>
+#include <qmutex.h>
+#include <qpointer.h>
+#include <qqueue.h>
+#include <qset.h>
+#include <qthread.h>
+#include <qt_windows.h>
+#include <private/qobject_p.h>
+#include <private/qiodevice_p.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QWinOverlappedIoNotifier
+ \inmodule QtCore
+ \brief The QWinOverlappedIoNotifier class provides support for overlapped I/O notifications on Windows.
+ \since 5.0
+ \internal
+
+ The QWinOverlappedIoNotifier class makes it possible to use efficient
+ overlapped (asynchronous) I/O notifications on Windows by using an
+ I/O completion port.
+
+ Once you have obtained a file handle, you can use setHandle() to get
+ notifications for I/O operations. Whenever an I/O operation completes,
+ the notified() signal is emitted which will pass the number of transferred
+ bytes, the operation's error code and a pointer to the operation's
+ OVERLAPPED object to the receiver.
+
+ Every handle that supports overlapped I/O can be used by
+ QWinOverlappedIoNotifier. That includes file handles, TCP sockets
+ and named pipes.
+
+ Note that you must not use ReadFileEx() and WriteFileEx() together
+ with QWinOverlappedIoNotifier. They are not supported as they use a
+ different I/O notification mechanism.
+
+ The hEvent member in the OVERLAPPED structure passed to ReadFile()
+ or WriteFile() is ignored and can be used for other purposes.
+
+ \warning This class is only available on Windows.
+
+ Due to peculiarities of the Windows I/O completion port API, users of
+ QWinOverlappedIoNotifier must pay attention to the following restrictions:
+ \list
+ \li File handles with a QWinOverlappedIoNotifer are assigned to an I/O
+ completion port until the handle is closed. It is impossible to
+ disassociate the file handle from the I/O completion port.
+ \li There can be only one QWinOverlappedIoNotifer per file handle. Creating
+ another QWinOverlappedIoNotifier for that file, even with a duplicated
+ handle, will fail.
+ \li Certain Windows API functions are unavailable for file handles that are
+ assigned to an I/O completion port. This includes the functions
+ \c{ReadFileEx} and \c{WriteFileEx}.
+ \endlist
+ See also the remarks in the MSDN documentation for the
+ \c{CreateIoCompletionPort} function.
+*/
+
+struct IOResult
+{
+ IOResult(DWORD n = 0, DWORD e = 0, OVERLAPPED *p = nullptr)
+ : numberOfBytes(n), errorCode(e), overlapped(p)
+ {}
+
+ DWORD numberOfBytes = 0;
+ DWORD errorCode = 0;
+ OVERLAPPED *overlapped = nullptr;
+};
+
+
+class QWinIoCompletionPort;
+
+class QWinOverlappedIoNotifierPrivate : public QObjectPrivate
+{
+ Q_DECLARE_PUBLIC(QWinOverlappedIoNotifier)
+public:
+ OVERLAPPED *waitForAnyNotified(QDeadlineTimer deadline);
+ void notify(DWORD numberOfBytes, DWORD errorCode, OVERLAPPED *overlapped);
+ void _q_notified();
+ OVERLAPPED *dispatchNextIoResult();
+
+ static QWinIoCompletionPort *iocp;
+ static HANDLE iocpInstanceLock;
+ static unsigned int iocpInstanceRefCount;
+ HANDLE hHandle = INVALID_HANDLE_VALUE;
+ HANDLE hSemaphore = nullptr;
+ HANDLE hResultsMutex = nullptr;
+ QAtomicInt waiting;
+ QQueue<IOResult> results;
+};
+
+QWinIoCompletionPort *QWinOverlappedIoNotifierPrivate::iocp = 0;
+HANDLE QWinOverlappedIoNotifierPrivate::iocpInstanceLock = CreateMutex(NULL, FALSE, NULL);
+unsigned int QWinOverlappedIoNotifierPrivate::iocpInstanceRefCount = 0;
+
+
+class QWinIoCompletionPort : protected QThread
+{
+public:
+ QWinIoCompletionPort()
+ : finishThreadKey(reinterpret_cast<ULONG_PTR>(this)),
+ drainQueueKey(reinterpret_cast<ULONG_PTR>(this + 1))
+ {
+ setObjectName(QLatin1String("I/O completion port thread"));
+ HANDLE hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
+ if (!hIOCP) {
+ qErrnoWarning("CreateIoCompletionPort failed.");
+ return;
+ }
+ hPort = hIOCP;
+ hQueueDrainedEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+ if (!hQueueDrainedEvent) {
+ qErrnoWarning("CreateEvent failed.");
+ return;
+ }
+ }
+
+ ~QWinIoCompletionPort()
+ {
+ PostQueuedCompletionStatus(hPort, 0, finishThreadKey, NULL);
+ QThread::wait();
+ CloseHandle(hPort);
+ CloseHandle(hQueueDrainedEvent);
+ }
+
+ void registerNotifier(QWinOverlappedIoNotifierPrivate *notifier)
+ {
+ const HANDLE hHandle = notifier->hHandle;
+ HANDLE hIOCP = CreateIoCompletionPort(hHandle, hPort,
+ reinterpret_cast<ULONG_PTR>(notifier), 0);
+ if (!hIOCP) {
+ qErrnoWarning("Can't associate file handle %x with I/O completion port.", hHandle);
+ return;
+ }
+ mutex.lock();
+ notifiers += notifier;
+ mutex.unlock();
+ if (!QThread::isRunning())
+ QThread::start();
+ }
+
+ void unregisterNotifier(QWinOverlappedIoNotifierPrivate *notifier)
+ {
+ mutex.lock();
+ notifiers.remove(notifier);
+ mutex.unlock();
+ }
+
+ void drainQueue()
+ {
+ QMutexLocker locker(&drainQueueMutex);
+ ResetEvent(hQueueDrainedEvent);
+ PostQueuedCompletionStatus(hPort, 0, drainQueueKey, NULL);
+ WaitForSingleObject(hQueueDrainedEvent, INFINITE);
+ }
+
+ using QThread::isRunning;
+
+protected:
+ void run()
+ {
+ DWORD dwBytesRead = 0;
+ ULONG_PTR pulCompletionKey = 0;
+ OVERLAPPED *overlapped = nullptr;
+ DWORD msecs = INFINITE;
+
+ forever {
+ BOOL success = GetQueuedCompletionStatus(hPort,
+ &dwBytesRead,
+ &pulCompletionKey,
+ &overlapped,
+ msecs);
+
+ DWORD errorCode = success ? ERROR_SUCCESS : GetLastError();
+ if (!success && !overlapped) {
+ if (!msecs) {
+ // Time out in drain mode. The completion status queue is empty.
+ msecs = INFINITE;
+ SetEvent(hQueueDrainedEvent);
+ continue;
+ }
+ qErrnoWarning(errorCode, "GetQueuedCompletionStatus failed.");
+ return;
+ }
+
+ if (pulCompletionKey == finishThreadKey)
+ return;
+ if (pulCompletionKey == drainQueueKey) {
+ // Enter drain mode.
+ Q_ASSERT(msecs == INFINITE);
+ msecs = 0;
+ continue;
+ }
+
+ QWinOverlappedIoNotifierPrivate *notifier
+ = reinterpret_cast<QWinOverlappedIoNotifierPrivate *>(pulCompletionKey);
+ mutex.lock();
+ if (notifiers.contains(notifier))
+ notifier->notify(dwBytesRead, errorCode, overlapped);
+ mutex.unlock();
+ }
+ }
+
+private:
+ const ULONG_PTR finishThreadKey;
+ const ULONG_PTR drainQueueKey;
+ HANDLE hPort = INVALID_HANDLE_VALUE;
+ QSet<QWinOverlappedIoNotifierPrivate *> notifiers;
+ QMutex mutex;
+ QMutex drainQueueMutex;
+ HANDLE hQueueDrainedEvent = nullptr;
+};
+
+
+QWinOverlappedIoNotifier::QWinOverlappedIoNotifier(QObject *parent)
+ : QObject(*new QWinOverlappedIoNotifierPrivate, parent)
+{
+ Q_D(QWinOverlappedIoNotifier);
+ WaitForSingleObject(d->iocpInstanceLock, INFINITE);
+ if (!d->iocp)
+ d->iocp = new QWinIoCompletionPort;
+ d->iocpInstanceRefCount++;
+ ReleaseMutex(d->iocpInstanceLock);
+
+ d->hSemaphore = CreateSemaphore(NULL, 0, 255, NULL);
+ d->hResultsMutex = CreateMutex(NULL, FALSE, NULL);
+ connect(this, SIGNAL(_q_notify()), this, SLOT(_q_notified()), Qt::QueuedConnection);
+}
+
+QWinOverlappedIoNotifier::~QWinOverlappedIoNotifier()
+{
+ Q_D(QWinOverlappedIoNotifier);
+ setEnabled(false);
+ CloseHandle(d->hResultsMutex);
+ CloseHandle(d->hSemaphore);
+
+ WaitForSingleObject(d->iocpInstanceLock, INFINITE);
+ if (!--d->iocpInstanceRefCount) {
+ delete d->iocp;
+ d->iocp = 0;
+ }
+ ReleaseMutex(d->iocpInstanceLock);
+}
+
+void QWinOverlappedIoNotifier::setHandle(Qt::HANDLE h)
+{
+ Q_D(QWinOverlappedIoNotifier);
+ d->hHandle = h;
+}
+
+Qt::HANDLE QWinOverlappedIoNotifier::handle() const
+{
+ Q_D(const QWinOverlappedIoNotifier);
+ return d->hHandle;
+}
+
+void QWinOverlappedIoNotifier::setEnabled(bool enabled)
+{
+ Q_D(QWinOverlappedIoNotifier);
+ if (enabled)
+ d->iocp->registerNotifier(d);
+ else
+ d->iocp->unregisterNotifier(d);
+}
+
+OVERLAPPED *QWinOverlappedIoNotifierPrivate::waitForAnyNotified(QDeadlineTimer deadline)
+{
+ if (!iocp->isRunning()) {
+ qWarning("Called QWinOverlappedIoNotifier::waitForAnyNotified on inactive notifier.");
+ return 0;
+ }
+
+ DWORD msecs = deadline.remainingTime();
+ if (msecs == 0)
+ iocp->drainQueue();
+ if (msecs == -1)
+ msecs = INFINITE;
+
+ const DWORD wfso = WaitForSingleObject(hSemaphore, msecs);
+ switch (wfso) {
+ case WAIT_OBJECT_0:
+ return dispatchNextIoResult();
+ case WAIT_TIMEOUT:
+ return 0;
+ default:
+ qErrnoWarning("QWinOverlappedIoNotifier::waitForAnyNotified: WaitForSingleObject failed.");
+ return 0;
+ }
+}
+
+class QScopedAtomicIntIncrementor
+{
+public:
+ QScopedAtomicIntIncrementor(QAtomicInt &i)
+ : m_int(i)
+ {
+ ++m_int;
+ }
+
+ ~QScopedAtomicIntIncrementor()
+ {
+ --m_int;
+ }
+
+private:
+ QAtomicInt &m_int;
+};
+
+/*!
+ * Wait synchronously for any notified signal.
+ *
+ * The function returns a pointer to the OVERLAPPED object corresponding to the completed I/O
+ * operation. In case no I/O operation was completed during the \a msec timeout, this function
+ * returns a null pointer.
+ */
+OVERLAPPED *QWinOverlappedIoNotifier::waitForAnyNotified(QDeadlineTimer deadline)
+{
+ Q_D(QWinOverlappedIoNotifier);
+ QScopedAtomicIntIncrementor saii(d->waiting);
+ OVERLAPPED *result = d->waitForAnyNotified(deadline);
+ return result;
+}
+
+/*!
+ * Wait synchronously for the notified signal.
+ *
+ * The function returns true if the notified signal was emitted for
+ * the I/O operation that corresponds to the OVERLAPPED object.
+ */
+bool QWinOverlappedIoNotifier::waitForNotified(QDeadlineTimer deadline, OVERLAPPED *overlapped)
+{
+ Q_D(QWinOverlappedIoNotifier);
+ QScopedAtomicIntIncrementor saii(d->waiting);
+ while (!deadline.hasExpired()) {
+ OVERLAPPED *triggeredOverlapped = waitForAnyNotified(deadline);
+ if (!triggeredOverlapped)
+ return false;
+ if (triggeredOverlapped == overlapped)
+ return true;
+ }
+ return false;
+}
+
+/*!
+ * Note: This function runs in the I/O completion port thread.
+ */
+void QWinOverlappedIoNotifierPrivate::notify(DWORD numberOfBytes, DWORD errorCode,
+ OVERLAPPED *overlapped)
+{
+ Q_Q(QWinOverlappedIoNotifier);
+ WaitForSingleObject(hResultsMutex, INFINITE);
+ results.enqueue(IOResult(numberOfBytes, errorCode, overlapped));
+ ReleaseMutex(hResultsMutex);
+ ReleaseSemaphore(hSemaphore, 1, NULL);
+ if (!waiting)
+ emit q->_q_notify();
+}
+
+void QWinOverlappedIoNotifierPrivate::_q_notified()
+{
+ if (WaitForSingleObject(hSemaphore, 0) == WAIT_OBJECT_0)
+ dispatchNextIoResult();
+}
+
+OVERLAPPED *QWinOverlappedIoNotifierPrivate::dispatchNextIoResult()
+{
+ Q_Q(QWinOverlappedIoNotifier);
+ WaitForSingleObject(hResultsMutex, INFINITE);
+ IOResult ioresult = results.dequeue();
+ ReleaseMutex(hResultsMutex);
+ emit q->notified(ioresult.numberOfBytes, ioresult.errorCode, ioresult.overlapped);
+ return ioresult.overlapped;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qwinoverlappedionotifier_p.cpp"
diff --git a/src/serialport/qwinoverlappedionotifier_p.h b/src/serialport/qwinoverlappedionotifier_p.h
new file mode 100644
index 0000000..9ee998b
--- /dev/null
+++ b/src/serialport/qwinoverlappedionotifier_p.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINOVERLAPPEDIONOTIFIER_P_H
+#define QWINOVERLAPPEDIONOTIFIER_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qglobal_p.h>
+#include <qobject.h>
+#include <qdeadlinetimer.h>
+
+typedef struct _OVERLAPPED OVERLAPPED;
+
+QT_BEGIN_NAMESPACE
+
+class QWinOverlappedIoNotifierPrivate;
+
+class QWinOverlappedIoNotifier : public QObject
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(QWinOverlappedIoNotifier)
+ Q_DECLARE_PRIVATE(QWinOverlappedIoNotifier)
+ Q_PRIVATE_SLOT(d_func(), void _q_notified())
+ friend class QWinIoCompletionPort;
+public:
+ QWinOverlappedIoNotifier(QObject *parent = 0);
+ ~QWinOverlappedIoNotifier();
+
+ void setHandle(Qt::HANDLE h);
+ Qt::HANDLE handle() const;
+
+ void setEnabled(bool enabled);
+ OVERLAPPED *waitForAnyNotified(QDeadlineTimer deadline);
+ bool waitForNotified(QDeadlineTimer deadline, OVERLAPPED *overlapped);
+
+Q_SIGNALS:
+ void notified(quint32 numberOfBytes, quint32 errorCode, OVERLAPPED *overlapped);
+#if !defined(Q_QDOC)
+ void _q_notify();
+#endif
+};
+
+QT_END_NAMESPACE
+
+#endif // QWINOVERLAPPEDIONOTIFIER_P_H
diff --git a/src/serialport/serialport-lib.pri b/src/serialport/serialport-lib.pri
index 9f83989..bb12df2 100644
--- a/src/serialport/serialport-lib.pri
+++ b/src/serialport/serialport-lib.pri
@@ -22,7 +22,11 @@ SOURCES += \
win32:!wince* {
SOURCES += \
$$PWD/qserialport_win.cpp \
- $$PWD/qserialportinfo_win.cpp
+ $$PWD/qserialportinfo_win.cpp \
+ $$PWD/qwinoverlappedionotifier.cpp
+
+ PRIVATE_HEADERS += \
+ $$PWD/qwinoverlappedionotifier_p.h
LIBS_PRIVATE += -lsetupapi -ladvapi32
}
diff --git a/tests/auto/bic/data/QtSerialPort.5.10.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtSerialPort.5.10.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000..0121ab6
--- /dev/null
+++ b/tests/auto/bic/data/QtSerialPort.5.10.0.linux-gcc-amd64.txt
@@ -0,0 +1,4595 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f3d6ee0fc00) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f3d6eecf3c0) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7f3d6eecf600) 0 empty
+
+Class std::__do_is_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_default_constructible_impl (0x0x7f3d6eecf840) 0 empty
+
+Class std::__do_is_static_castable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_static_castable_impl (0x0x7f3d6eecfa80) 0 empty
+
+Class std::__do_is_direct_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_direct_constructible_impl (0x0x7f3d6eecfc00) 0 empty
+
+Class std::__do_is_nary_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nary_constructible_impl (0x0x7f3d6cb0a000) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f3d6cb8c780) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f3d6cb8c840) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7f3d6cb8cba0) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7f3d6cb8cc60) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7f3d6cb8cd20) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7f3d6cb8cde0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f3d6cbcb0c0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f3d6cbcb2a0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f3d6cbcb720) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f3d6cbcb780) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f3d6cc6f420) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f3d6cc6f480) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f3d6cb7a888) 0 empty
+ std::input_iterator_tag (0x0x7f3d6cc6f4e0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f3d6cb7a8f0) 0 empty
+ std::forward_iterator_tag (0x0x7f3d6cb7a958) 0 empty
+ std::input_iterator_tag (0x0x7f3d6cc6f540) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f3d6cb7a9c0) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f3d6cb7aa28) 0 empty
+ std::forward_iterator_tag (0x0x7f3d6cb7aa90) 0 empty
+ std::input_iterator_tag (0x0x7f3d6cc6f5a0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f3d6ccd3240) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7f3d6ccd32a0) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7f3d6ccd3300) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7f3d6ccd3360) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7f3d6ccd33c0) 0 empty
+
+Class wait
+ size=4 align=4
+ base size=4 base align=4
+wait (0x0x7f3d6ccd3ea0) 0
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f3d6c9d8120) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f3d6c9d81e0) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f3d6c9d8240) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f3d6c9d8300) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f3d6c9d8360) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f3d6c9d87e0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f3d6c9d8840) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7f3d6c9d88a0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16u)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7f3d6cab7000) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16u)
+ std::exception (0x0x7f3d6c9d8900) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f3d6cab7000)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f3d6c9d8960) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7f3d6c9d89c0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16u)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7f3d6cab7208) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16u)
+ std::exception (0x0x7f3d6c9d8de0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f3d6cab7208)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7f3d6cab7270) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16u)
+ std::bad_alloc (0x0x7f3d6cab72d8) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f3d6cab7270)
+ std::exception (0x0x7f3d6c9d8e40) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f3d6cab72d8)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f3d6c9d8ea0) 0 empty
+
+Class __exception
+ size=40 align=8
+ base size=40 base align=8
+__exception (0x0x7f3d6cb03ae0) 0
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f3d6c52a7e0) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f3d6c52a840) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16u)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f3d6c5ed720) 0
+
+Class __sched_param
+ size=4 align=4
+ base size=4 base align=4
+__sched_param (0x0x7f3d6c5ed780) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f3d6c5ed840) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f3d6c5ed8a0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f3d6c5ed900) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f3d6c5ed960) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f3d6c5eda80) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f3d6c5edae0) 0
+
+Class _IO_marker
+ size=24 align=8
+ base size=24 base align=8
+_IO_marker (0x0x7f3d6c5edf00) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f3d6c5edf60) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f3d6c13f780) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f3d6c13f7e0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f3d6c18c780) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f3d6bf825a0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f3d6c142888) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f3d6bf82660) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f3d6c142b60) 0
+ std::_Bit_iterator_base (0x0x7f3d6c142bc8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f3d6bf826c0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f3d6c07c000) 0
+ std::_Bit_iterator_base (0x0x7f3d6c07c068) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f3d6bf82720) 0 empty
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f3d6bd98540) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f3d6beaf300) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f3d6beaf2a0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f3d6bc382a0) 0
+
+Class qIsNull(double)::U
+ size=8 align=8
+ base size=8 base align=8
+qIsNull(double)::U (0x0x7f3d6aab6d80) 0
+
+Class qIsNull(float)::U
+ size=4 align=4
+ base size=4 base align=4
+qIsNull(float)::U (0x0x7f3d6aab6de0) 0
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f3d6a8308a0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f3d6a830900) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f3d6a830960) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f3d6a8309c0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f3d6a830c60) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f3d6a8b31e0) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f3d6a81bf08) 0
+ std::__atomic_flag_base (0x0x7f3d6a8b3240) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f3d6a606680) 0
+ QAtomicInteger<int> (0x0x7f3d6a6066e8) 0
+ QBasicAtomicInteger<int> (0x0x7f3d6a314960) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f3d6a25af00) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f3d6a0a1f60) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f3d6a1030c0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f3d6a107138) 0
+ QGenericArgument (0x0x7f3d6a103120) 0
+
+Class QMetaObject
+ size=48 align=8
+ base size=48 base align=8
+QMetaObject (0x0x7f3d6a1032a0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f3d6a103360) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f3d69dcc3c0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f3d69dcc420) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f3d69dcc6c0) 0
+
+Class QArrayData
+ size=24 align=8
+ base size=24 base align=8
+QArrayData (0x0x7f3d69dcc720) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f3d69dcca80) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f3d69dccae0) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7f3d69dccb40) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16u)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f3d69dccba0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f3d69dccc00) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f3d69b6e000) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7f3d69ee2750) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16u)
+ std::exception (0x0x7f3d69b6e0c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f3d69ee2750)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7f3d69ee27b8) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16u)
+ std::logic_error (0x0x7f3d69ee2820) 0
+ primary-for std::domain_error (0x0x7f3d69ee27b8)
+ std::exception (0x0x7f3d69b6e120) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f3d69ee2820)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7f3d69ee2888) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16u)
+ std::logic_error (0x0x7f3d69ee28f0) 0
+ primary-for std::invalid_argument (0x0x7f3d69ee2888)
+ std::exception (0x0x7f3d69b6e180) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f3d69ee28f0)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7f3d69ee2958) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16u)
+ std::logic_error (0x0x7f3d69ee29c0) 0
+ primary-for std::length_error (0x0x7f3d69ee2958)
+ std::exception (0x0x7f3d69b6e1e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f3d69ee29c0)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7f3d69ee2a28) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16u)
+ std::logic_error (0x0x7f3d69ee2a90) 0
+ primary-for std::out_of_range (0x0x7f3d69ee2a28)
+ std::exception (0x0x7f3d69b6e240) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f3d69ee2a90)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7f3d69ee2af8) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16u)
+ std::exception (0x0x7f3d69b6e2a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f3d69ee2af8)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7f3d69ee2b60) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16u)
+ std::runtime_error (0x0x7f3d69ee2bc8) 0
+ primary-for std::range_error (0x0x7f3d69ee2b60)
+ std::exception (0x0x7f3d69b6e300) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f3d69ee2bc8)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7f3d69ee2c30) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16u)
+ std::runtime_error (0x0x7f3d69ee2c98) 0
+ primary-for std::overflow_error (0x0x7f3d69ee2c30)
+ std::exception (0x0x7f3d69b6e360) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f3d69ee2c98)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7f3d69ee2d00) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16u)
+ std::runtime_error (0x0x7f3d69ee2d68) 0
+ primary-for std::underflow_error (0x0x7f3d69ee2d00)
+ std::exception (0x0x7f3d69b6e3c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f3d69ee2d68)
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7f3d69b6e540) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16u)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f3d69b6e780) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f3d69b6e900) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7f3d69bd91a0) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16u)
+ std::runtime_error (0x0x7f3d69bd9208) 0
+ primary-for std::system_error (0x0x7f3d69bd91a0)
+ std::exception (0x0x7f3d69b6eb40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f3d69bd9208)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7f3d69bd9dd0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16u)
+ std::system_error (0x0x7f3d69bd9e38) 0
+ primary-for std::ios_base::failure (0x0x7f3d69bd9dd0)
+ std::runtime_error (0x0x7f3d69bd9ea0) 0
+ primary-for std::system_error (0x0x7f3d69bd9e38)
+ std::exception (0x0x7f3d69b6ee40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f3d69bd9ea0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f3d69b6eea0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f3d69b6ef00) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f3d69b6ef60) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7f3d69b6ede0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16u)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f3d69c4b720) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f3d69c4bde0) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2u entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24u)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64u)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64u)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2u entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24u)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64u)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2u entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64u)
+
+Construction vtable for std::basic_istream<char> (0x0x7f3d6988e7b8 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<char> (0x0x7f3d6988e888 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7u entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24u)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24u)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64u)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24u)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64u)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104u)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64u)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f3d6988ec30 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10u entries
+0 24u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551592u
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f3d6988ed00 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10u entries
+0 8u
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0u
+32 0u
+40 18446744073709551608u
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0u
+72 0u
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7u entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24u)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24u)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64u)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24u)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64u)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104u)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64u)
+
+Class QByteArrayDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QByteArrayDataPtr (0x0x7f3d69825660) 0
+
+Class QByteArray
+ size=8 align=8
+ base size=8 base align=8
+QByteArray (0x0x7f3d698256c0) 0
+
+Class QByteRef
+ size=16 align=8
+ base size=12 base align=8
+QByteRef (0x0x7f3d69600a20) 0
+
+Class QStringDataPtr
+ size=8 align=8
+ base size=8 base align=8
+QStringDataPtr (0x0x7f3d69600d80) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f3d696f6240) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f3d693930c0) 0
+
+Class QString::Null
+ size=1 align=1
+ base size=0 base align=1
+QString::Null (0x0x7f3d69393720) 0 empty
+
+Class QString
+ size=8 align=8
+ base size=8 base align=8
+QString (0x0x7f3d693936c0) 0
+
+Class QCharRef
+ size=16 align=8
+ base size=12 base align=8
+QCharRef (0x0x7f3d6915a7e0) 0
+
+Class QStringRef
+ size=16 align=8
+ base size=16 base align=8
+QStringRef (0x0x7f3d692f2420) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f3d690f2060) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f3d690f20c0) 0 empty
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f3d690f2120) 0
+
+Class QListData::NotArrayCompatibleLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotArrayCompatibleLayout (0x0x7f3d690f24e0) 0 empty
+
+Class QListData::NotIndirectLayout
+ size=1 align=1
+ base size=0 base align=1
+QListData::NotIndirectLayout (0x0x7f3d690f2540) 0 empty
+
+Class QListData::ArrayCompatibleLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::ArrayCompatibleLayout (0x0x7f3d690b46e8) 0 empty
+ QListData::NotIndirectLayout (0x0x7f3d690f25a0) 0 empty
+
+Class QListData::InlineWithPaddingLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::InlineWithPaddingLayout (0x0x7f3d68da5620) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f3d690f2600) 0 empty
+ QListData::NotIndirectLayout (0x0x7f3d690f2660) 0 empty
+
+Class QListData::IndirectLayout
+ size=1 align=1
+ base size=1 base align=1
+QListData::IndirectLayout (0x0x7f3d690b4750) 0 empty
+ QListData::NotArrayCompatibleLayout (0x0x7f3d690f26c0) 0 empty
+
+Class QListData::Data
+ size=24 align=8
+ base size=24 base align=8
+QListData::Data (0x0x7f3d690f2720) 0
+
+Class QListData
+ size=8 align=8
+ base size=8 base align=8
+QListData (0x0x7f3d690f2480) 0
+
+Class QRegExp
+ size=8 align=8
+ base size=8 base align=8
+QRegExp (0x0x7f3d690f2ba0) 0
+
+Class QStringMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QStringMatcher::Data (0x0x7f3d68b3ede0) 0
+
+Class QStringMatcher
+ size=1048 align=8
+ base size=1048 base align=8
+QStringMatcher (0x0x7f3d68b3ed80) 0
+
+Class QStringList
+ size=8 align=8
+ base size=8 base align=8
+QStringList (0x0x7f3d68b5f1a0) 0
+ QList<QString> (0x0x7f3d68b5f208) 0
+ QListSpecialMethods<QString> (0x0x7f3d68b9d000) 0 empty
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f3d68b9d420) 0 empty
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f3d68b9df00) 0
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f3d68c935a0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f3d68c93720) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f3d68c937e0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f3d68b5faf8) 0
+ std::__uses_alloc_base (0x0x7f3d68c93780) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f3d68abd840) 0 empty
+
+Class QtPrivate::AbstractDebugStreamFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::AbstractDebugStreamFunction (0x0x7f3d68abda80) 0
+
+Class QtPrivate::AbstractComparatorFunction
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::AbstractComparatorFunction (0x0x7f3d68abdb40) 0
+
+Class QtPrivate::AbstractConverterFunction
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::AbstractConverterFunction (0x0x7f3d68abdc60) 0
+
+Class QMetaType
+ size=80 align=8
+ base size=80 base align=8
+QMetaType (0x0x7f3d68abdde0) 0
+
+Class QtMetaTypePrivate::VariantData
+ size=24 align=8
+ base size=20 base align=8
+QtMetaTypePrivate::VariantData (0x0x7f3d687f8240) 0
+
+Class QtMetaTypePrivate::VectorBoolElements
+ size=1 align=1
+ base size=0 base align=1
+QtMetaTypePrivate::VectorBoolElements (0x0x7f3d687f8360) 0 empty
+
+Class QtMetaTypePrivate::QSequentialIterableImpl
+ size=104 align=8
+ base size=104 base align=8
+QtMetaTypePrivate::QSequentialIterableImpl (0x0x7f3d687f8cc0) 0
+
+Class QtMetaTypePrivate::QAssociativeIterableImpl
+ size=112 align=8
+ base size=112 base align=8
+QtMetaTypePrivate::QAssociativeIterableImpl (0x0x7f3d684ea120) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f3d684ea420) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f3d6830fc60) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f3d6847eae0) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=48 align=8
+ base size=48 base align=8
+QObjectData (0x0x7f3d6847eb40) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16u)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f3d6847ed20) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7f3d6847ecc0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16u)
+
+Vtable for QObjectUserData
+QObjectUserData::_ZTV15QObjectUserData: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QObjectUserData)
+16 (int (*)(...))QObjectUserData::~QObjectUserData
+24 (int (*)(...))QObjectUserData::~QObjectUserData
+
+Class QObjectUserData
+ size=8 align=8
+ base size=8 base align=8
+QObjectUserData (0x0x7f3d68183000) 0 nearly-empty
+ vptr=((& QObjectUserData::_ZTV15QObjectUserData) + 16u)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f3d68183060) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f3d68183120) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7f3d6814fea0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16u)
+ QObject (0x0x7f3d681830c0) 0
+ primary-for QAbstractAnimation (0x0x7f3d6814fea0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f3d681831e0) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7f3d6814ff08) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16u)
+ QObject (0x0x7f3d68183180) 0
+ primary-for QAnimationDriver (0x0x7f3d6814ff08)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f3d681832a0) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7f3d6814ff70) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16u)
+ QObject (0x0x7f3d68183240) 0
+ primary-for QEventLoop (0x0x7f3d6814ff70)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f3d68183480) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f3d68183540) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f3d681835a0) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 28u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))QAbstractEventDispatcher::startingUp
+216 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f3d6814f2d8) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16u)
+ QObject (0x0x7f3d681834e0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f3d6814f2d8)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7f3d68183840) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16u)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7f3d68221138) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16u)
+ std::exception (0x0x7f3d681838a0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f3d68221138)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7f3d682211a0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16u)
+ std::exception (0x0x7f3d68183900) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f3d682211a0)
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7f3d67f9a410) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16u)
+ std::exception (0x0x7f3d67f4a9c0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f3d67f9a410)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f3d67f4aa80) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f3d67f4aae0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f3d67f4ac00) 0
+
+Class QMapNodeBase
+ size=24 align=8
+ base size=24 base align=8
+QMapNodeBase (0x0x7f3d68012120) 0
+
+Class QMapDataBase
+ size=40 align=8
+ base size=40 base align=8
+QMapDataBase (0x0x7f3d68012660) 0
+
+Class QHashData::Node
+ size=16 align=8
+ base size=16 base align=8
+QHashData::Node (0x0x7f3d68012a20) 0
+
+Class QHashData
+ size=48 align=8
+ base size=44 base align=8
+QHashData (0x0x7f3d680129c0) 0
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f3d68012a80) 0 empty
+
+Class QVariant::PrivateShared
+ size=16 align=8
+ base size=12 base align=8
+QVariant::PrivateShared (0x0x7f3d67d96360) 0
+
+Class QVariant::Private::Data
+ size=8 align=8
+ base size=8 base align=8
+QVariant::Private::Data (0x0x7f3d67d96420) 0
+
+Class QVariant::Private
+ size=16 align=8
+ base size=12 base align=8
+QVariant::Private (0x0x7f3d67d963c0) 0
+
+Class QVariant::Handler
+ size=72 align=8
+ base size=72 base align=8
+QVariant::Handler (0x0x7f3d67d96480) 0
+
+Class QVariant
+ size=16 align=8
+ base size=16 base align=8
+QVariant (0x0x7f3d67d96300) 0
+
+Class QVariantComparisonHelper
+ size=8 align=8
+ base size=8 base align=8
+QVariantComparisonHelper (0x0x7f3d67b1df60) 0
+
+Class QSequentialIterable::const_iterator
+ size=112 align=8
+ base size=112 base align=8
+QSequentialIterable::const_iterator (0x0x7f3d67bca600) 0
+
+Class QSequentialIterable
+ size=104 align=8
+ base size=104 base align=8
+QSequentialIterable (0x0x7f3d67bca5a0) 0
+
+Class QAssociativeIterable::const_iterator
+ size=120 align=8
+ base size=120 base align=8
+QAssociativeIterable::const_iterator (0x0x7f3d67bca6c0) 0
+
+Class QAssociativeIterable
+ size=112 align=8
+ base size=112 base align=8
+QAssociativeIterable (0x0x7f3d67bca660) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f3d678eb9c0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f3d67a2f0c0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f3d67ab97e0) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractItemModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractItemModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f3d67acc1a0) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16u)
+ QObject (0x0x7f3d67ab9780) 0
+ primary-for QAbstractItemModel (0x0x7f3d67acc1a0)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f3d67ab9b40) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractTableModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractTableModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f3d67acc3a8) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16u)
+ QAbstractItemModel (0x0x7f3d67acc410) 0
+ primary-for QAbstractTableModel (0x0x7f3d67acc3a8)
+ QObject (0x0x7f3d67ab9ae0) 0
+ primary-for QAbstractItemModel (0x0x7f3d67acc410)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f3d67ab9c00) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QAbstractItemModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QAbstractListModel::flags
+328 (int (*)(...))QAbstractItemModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f3d67acc478) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16u)
+ QAbstractItemModel (0x0x7f3d67acc4e0) 0
+ primary-for QAbstractListModel (0x0x7f3d67acc478)
+ QObject (0x0x7f3d67ab9ba0) 0
+ primary-for QAbstractItemModel (0x0x7f3d67acc4e0)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f3d67ab9ea0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16u)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f3d67ab9f60) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 53u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QAbstractProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QAbstractItemModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QAbstractItemModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QAbstractProxyModel::setSourceModel
+392 (int (*)(...))__cxa_pure_virtual
+400 (int (*)(...))__cxa_pure_virtual
+408 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+416 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f3d67acc618) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16u)
+ QAbstractItemModel (0x0x7f3d67acc680) 0
+ primary-for QAbstractProxyModel (0x0x7f3d67acc618)
+ QObject (0x0x7f3d67ab9f00) 0
+ primary-for QAbstractItemModel (0x0x7f3d67acc680)
+
+Class QAbstractState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractState::QPrivateSignal (0x0x7f3d677eb060) 0 empty
+
+Vtable for QAbstractState
+QAbstractState::_ZTV14QAbstractState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QAbstractState)
+16 (int (*)(...))QAbstractState::metaObject
+24 (int (*)(...))QAbstractState::qt_metacast
+32 (int (*)(...))QAbstractState::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractState
+ size=16 align=8
+ base size=16 base align=8
+QAbstractState (0x0x7f3d67acc6e8) 0
+ vptr=((& QAbstractState::_ZTV14QAbstractState) + 16u)
+ QObject (0x0x7f3d677eb000) 0
+ primary-for QAbstractState (0x0x7f3d67acc6e8)
+
+Class QAbstractTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTransition::QPrivateSignal (0x0x7f3d677eb120) 0 empty
+
+Vtable for QAbstractTransition
+QAbstractTransition::_ZTV19QAbstractTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTransition)
+16 (int (*)(...))QAbstractTransition::metaObject
+24 (int (*)(...))QAbstractTransition::qt_metacast
+32 (int (*)(...))QAbstractTransition::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAbstractTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractTransition
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTransition (0x0x7f3d67acc750) 0
+ vptr=((& QAbstractTransition::_ZTV19QAbstractTransition) + 16u)
+ QObject (0x0x7f3d677eb0c0) 0
+ primary-for QAbstractTransition (0x0x7f3d67acc750)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f3d677eb1e0) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7f3d67acc7b8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16u)
+ QAbstractAnimation (0x0x7f3d67acc820) 0
+ primary-for QAnimationGroup (0x0x7f3d67acc7b8)
+ QObject (0x0x7f3d677eb180) 0
+ primary-for QAbstractAnimation (0x0x7f3d67acc820)
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f3d67837f00) 0
+
+Class QBitArray
+ size=8 align=8
+ base size=8 base align=8
+QBitArray (0x0x7f3d6787b1e0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=12 base align=8
+QBitRef (0x0x7f3d6787b2a0) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f3d6787b5a0) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 30u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f3d67accea0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16u)
+ QObject (0x0x7f3d6787b540) 0
+ primary-for QIODevice (0x0x7f3d67accea0)
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f3d6787b7e0) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 30u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f3d67521000) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16u)
+ QIODevice (0x0x7f3d67521068) 0
+ primary-for QBuffer (0x0x7f3d67521000)
+ QObject (0x0x7f3d6787b780) 0
+ primary-for QIODevice (0x0x7f3d67521068)
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f3d6787b8a0) 0
+
+Class QByteArrayMatcher
+ size=1040 align=8
+ base size=1040 base align=8
+QByteArrayMatcher (0x0x7f3d6787b840) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f3d6787b9c0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f3d6787b960) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f3d6787bba0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f3d6787bd80) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f3d676583c0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f3d67658480) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f3d672de480) 0
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+
+Class QEvent
+ size=24 align=8
+ base size=20 base align=8
+QEvent (0x0x7f3d672de900) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16u)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+
+Class QTimerEvent
+ size=24 align=8
+ base size=24 base align=8
+QTimerEvent (0x0x7f3d672e3548) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16u)
+ QEvent (0x0x7f3d672de960) 0
+ primary-for QTimerEvent (0x0x7f3d672e3548)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+
+Class QChildEvent
+ size=32 align=8
+ base size=32 base align=8
+QChildEvent (0x0x7f3d672e35b0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16u)
+ QEvent (0x0x7f3d672de9c0) 0
+ primary-for QChildEvent (0x0x7f3d672e35b0)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+
+Class QDynamicPropertyChangeEvent
+ size=32 align=8
+ base size=32 base align=8
+QDynamicPropertyChangeEvent (0x0x7f3d672e3af8) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16u)
+ QEvent (0x0x7f3d672deea0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f3d672e3af8)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=24 base align=8
+QDeferredDeleteEvent (0x0x7f3d672e3b60) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16u)
+ QEvent (0x0x7f3d672def00) 0
+ primary-for QDeferredDeleteEvent (0x0x7f3d672e3b60)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f3d67375000) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7f3d672e3bc8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16u)
+ QObject (0x0x7f3d672def60) 0
+ primary-for QCoreApplication (0x0x7f3d672e3bc8)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f3d67375060) 0
+
+Class QContiguousCacheData
+ size=24 align=4
+ base size=24 base align=4
+QContiguousCacheData (0x0x7f3d673750c0) 0
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f3d673756c0) 0
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f3d67375720) 0
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f3d673757e0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f3d67375cc0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f3d67375f60) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f3d6709d720) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f3d6709d780) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f3d6709d6c0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f3d6714a8a0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f3d6714ad80) 0
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7f3d6726fd20) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16u)
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f3d66f17000) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f3d66f17240) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f3d66f173c0) 0
+
+Class QDebug::Stream
+ size=80 align=8
+ base size=76 base align=8
+QDebug::Stream (0x0x7f3d66f17900) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f3d66f178a0) 0
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f3d66d11de0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f3d66d11ea0) 0 empty
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f3d66e0f060) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 34u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFileDevice::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f3d66df3d00) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16u)
+ QIODevice (0x0x7f3d66df3d68) 0
+ primary-for QFileDevice (0x0x7f3d66df3d00)
+ QObject (0x0x7f3d66e0f000) 0
+ primary-for QIODevice (0x0x7f3d66df3d68)
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f3d66e0f2a0) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 34u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QFileDevice::writeData
+240 (int (*)(...))QFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f3d66df3ea0) 0
+ vptr=((& QFile::_ZTV5QFile) + 16u)
+ QFileDevice (0x0x7f3d66df3f08) 0
+ primary-for QFile (0x0x7f3d66df3ea0)
+ QIODevice (0x0x7f3d66df3f70) 0
+ primary-for QFileDevice (0x0x7f3d66df3f08)
+ QObject (0x0x7f3d66e0f240) 0
+ primary-for QIODevice (0x0x7f3d66df3f70)
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f3d66e0f480) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f3d66e0f8a0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f3d66b112a0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f3d66b114e0) 0
+
+Class QEventTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventTransition::QPrivateSignal (0x0x7f3d66c0f900) 0 empty
+
+Vtable for QEventTransition
+QEventTransition::_ZTV16QEventTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QEventTransition)
+16 (int (*)(...))QEventTransition::metaObject
+24 (int (*)(...))QEventTransition::qt_metacast
+32 (int (*)(...))QEventTransition::qt_metacall
+40 (int (*)(...))QEventTransition::~QEventTransition
+48 (int (*)(...))QEventTransition::~QEventTransition
+56 (int (*)(...))QEventTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QEventTransition::eventTest
+120 (int (*)(...))QEventTransition::onTransition
+
+Class QEventTransition
+ size=16 align=8
+ base size=16 base align=8
+QEventTransition (0x0x7f3d66c08f70) 0
+ vptr=((& QEventTransition::_ZTV16QEventTransition) + 16u)
+ QAbstractTransition (0x0x7f3d66c5b000) 0
+ primary-for QEventTransition (0x0x7f3d66c08f70)
+ QObject (0x0x7f3d66c0f8a0) 0
+ primary-for QAbstractTransition (0x0x7f3d66c5b000)
+
+Vtable for QException
+QException::_ZTV10QException: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7f3d66c5b068) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16u)
+ std::exception (0x0x7f3d66c0f960) 0 nearly-empty
+ primary-for QException (0x0x7f3d66c5b068)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=8 align=8
+ base size=8 base align=8
+QUnhandledException (0x0x7f3d66c5b0d0) 0 nearly-empty
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16u)
+ QException (0x0x7f3d66c5b138) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f3d66c5b0d0)
+ std::exception (0x0x7f3d66c0f9c0) 0 nearly-empty
+ primary-for QException (0x0x7f3d66c5b138)
+
+Class QtPrivate::ExceptionHolder
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionHolder (0x0x7f3d66c0fa20) 0
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f3d66c0fae0) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f3d66c0fb40) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16u)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f3d66c0fc60) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7f3d66c5b1a0) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16u)
+ QObject (0x0x7f3d66c0fc00) 0
+ primary-for QFileSelector (0x0x7f3d66c5b1a0)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f3d66c0fd20) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7f3d66c5b208) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16u)
+ QObject (0x0x7f3d66c0fcc0) 0
+ primary-for QFileSystemWatcher (0x0x7f3d66c5b208)
+
+Class QFinalState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFinalState::QPrivateSignal (0x0x7f3d66c0fde0) 0 empty
+
+Vtable for QFinalState
+QFinalState::_ZTV11QFinalState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFinalState)
+16 (int (*)(...))QFinalState::metaObject
+24 (int (*)(...))QFinalState::qt_metacast
+32 (int (*)(...))QFinalState::qt_metacall
+40 (int (*)(...))QFinalState::~QFinalState
+48 (int (*)(...))QFinalState::~QFinalState
+56 (int (*)(...))QFinalState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFinalState::onEntry
+120 (int (*)(...))QFinalState::onExit
+
+Class QFinalState
+ size=16 align=8
+ base size=16 base align=8
+QFinalState (0x0x7f3d66c5b270) 0
+ vptr=((& QFinalState::_ZTV11QFinalState) + 16u)
+ QAbstractState (0x0x7f3d66c5b2d8) 0
+ primary-for QFinalState (0x0x7f3d66c5b270)
+ QObject (0x0x7f3d66c0fd80) 0
+ primary-for QAbstractState (0x0x7f3d66c5b2d8)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class QRunnable
+ size=16 align=8
+ base size=12 base align=8
+QRunnable (0x0x7f3d66c0fe40) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16u)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f3d66c0fea0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f3d66c5b410) 0
+ QBasicMutex (0x0x7f3d668f10c0) 0
+
+Class QMutexLocker
+ size=8 align=8
+ base size=8 base align=8
+QMutexLocker (0x0x7f3d668f1120) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f3d668f1180) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f3d668f11e0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7f3d668f1300) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16u)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f3d668f1b40) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16u)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f3d66a25360) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0u
+48 0u
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7f3d669d4548) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16u)
+ QObject (0x0x7f3d66a25300) 0
+ primary-for QFutureWatcherBase (0x0x7f3d669d4548)
+
+Class QHistoryState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHistoryState::QPrivateSignal (0x0x7f3d66a25960) 0 empty
+
+Vtable for QHistoryState
+QHistoryState::_ZTV13QHistoryState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QHistoryState)
+16 (int (*)(...))QHistoryState::metaObject
+24 (int (*)(...))QHistoryState::qt_metacast
+32 (int (*)(...))QHistoryState::qt_metacall
+40 (int (*)(...))QHistoryState::~QHistoryState
+48 (int (*)(...))QHistoryState::~QHistoryState
+56 (int (*)(...))QHistoryState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHistoryState::onEntry
+120 (int (*)(...))QHistoryState::onExit
+
+Class QHistoryState
+ size=16 align=8
+ base size=16 base align=8
+QHistoryState (0x0x7f3d669d4e38) 0
+ vptr=((& QHistoryState::_ZTV13QHistoryState) + 16u)
+ QAbstractState (0x0x7f3d669d4ea0) 0
+ primary-for QHistoryState (0x0x7f3d669d4e38)
+ QObject (0x0x7f3d66a25900) 0
+ primary-for QAbstractState (0x0x7f3d669d4ea0)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f3d66a25a20) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 53u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::mimeTypes
+216 (int (*)(...))QAbstractProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QIdentityProxyModel::dropMimeData
+240 (int (*)(...))QAbstractProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QIdentityProxyModel::insertRows
+264 (int (*)(...))QIdentityProxyModel::insertColumns
+272 (int (*)(...))QIdentityProxyModel::removeRows
+280 (int (*)(...))QIdentityProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractProxyModel::fetchMore
+312 (int (*)(...))QAbstractProxyModel::canFetchMore
+320 (int (*)(...))QAbstractProxyModel::flags
+328 (int (*)(...))QAbstractProxyModel::sort
+336 (int (*)(...))QAbstractProxyModel::buddy
+344 (int (*)(...))QIdentityProxyModel::match
+352 (int (*)(...))QAbstractProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QIdentityProxyModel::setSourceModel
+392 (int (*)(...))QIdentityProxyModel::mapToSource
+400 (int (*)(...))QIdentityProxyModel::mapFromSource
+408 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+416 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f3d669d4f08) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7f3d669d4f70) 0
+ primary-for QIdentityProxyModel (0x0x7f3d669d4f08)
+ QAbstractItemModel (0x0x7f3d6669c000) 0
+ primary-for QAbstractProxyModel (0x0x7f3d669d4f70)
+ QObject (0x0x7f3d66a259c0) 0
+ primary-for QAbstractItemModel (0x0x7f3d6669c000)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f3d66a25a80) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f3d666ff180) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7f3d6669c820) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16u)
+ QObject (0x0x7f3d666ff120) 0
+ primary-for QItemSelectionModel (0x0x7f3d6669c820)
+
+Class QItemSelection
+ size=8 align=8
+ base size=8 base align=8
+QItemSelection (0x0x7f3d6669ca28) 0
+ QList<QItemSelectionRange> (0x0x7f3d6669ca90) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f3d666ff480) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=20 base align=8
+QJsonValue (0x0x7f3d666ff960) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=12 base align=8
+QJsonValueRef (0x0x7f3d664fe0c0) 0
+
+Class QJsonValuePtr
+ size=24 align=8
+ base size=24 base align=8
+QJsonValuePtr (0x0x7f3d664fe600) 0
+
+Class QJsonValueRefPtr
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRefPtr (0x0x7f3d664fe660) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::iterator (0x0x7f3d664fe840) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonArray::const_iterator (0x0x7f3d664fe8a0) 0
+
+Class QJsonArray
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray (0x0x7f3d664fe7e0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f3d66609ae0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f3d66609b40) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::iterator (0x0x7f3d6667f1e0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=12 base align=8
+QJsonObject::const_iterator (0x0x7f3d6667f240) 0
+
+Class QJsonObject
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject (0x0x7f3d6667f180) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f3d663164e0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=32 align=8
+ base size=25 base align=8
+QLibrary (0x0x7f3d6630add0) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16u)
+ QObject (0x0x7f3d66316480) 0
+ primary-for QLibrary (0x0x7f3d6630add0)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f3d66316ba0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f3d663166c0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f3d6640b0c0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f3d6640b120) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f3d6640b3c0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f3d6640b660) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f3d660cb000) 0
+
+Class QLinkedListData
+ size=32 align=8
+ base size=25 base align=8
+QLinkedListData (0x0x7f3d660cb960) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f3d660cbcc0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f3d660cbe40) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f3d660cbde0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f3d6621d000) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f3d6621d2a0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f3d6621d900) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=12 base align=8
+QMetaMethod (0x0x7f3d6621d960) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=12 base align=8
+QMetaEnum (0x0x7f3d6621df60) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f3d65f0c2a0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=12 base align=8
+QMetaClassInfo (0x0x7f3d65f0c300) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f3d65f0c600) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7f3d65f26068) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16u)
+ QObject (0x0x7f3d65f0c5a0) 0
+ primary-for QMimeData (0x0x7f3d65f26068)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f3d65f0c660) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f3d65f0c960) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f3d65f0ca20) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=24 align=8
+ base size=24 base align=8
+QObjectCleanupHandler (0x0x7f3d65f26270) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16u)
+ QObject (0x0x7f3d65f0c9c0) 0
+ primary-for QObjectCleanupHandler (0x0x7f3d65f26270)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f3d65f0ca80) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f3d65f9c240) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7f3d65f269c0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7f3d65f26a28) 0
+ primary-for QParallelAnimationGroup (0x0x7f3d65f269c0)
+ QAbstractAnimation (0x0x7f3d65f26a90) 0
+ primary-for QAnimationGroup (0x0x7f3d65f26a28)
+ QObject (0x0x7f3d65f9c1e0) 0
+ primary-for QAbstractAnimation (0x0x7f3d65f26a90)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f3d65f9c300) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7f3d65f26af8) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16u)
+ QAbstractAnimation (0x0x7f3d65f26b60) 0
+ primary-for QPauseAnimation (0x0x7f3d65f26af8)
+ QObject (0x0x7f3d65f9c2a0) 0
+ primary-for QAbstractAnimation (0x0x7f3d65f26b60)
+
+Class QStaticPlugin
+ size=16 align=8
+ base size=16 base align=8
+QStaticPlugin (0x0x7f3d65f9c4e0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f3d65f9c7e0) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7f3d65f26d68) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16u)
+ QObject (0x0x7f3d65f9c780) 0
+ primary-for QPluginLoader (0x0x7f3d65f26d68)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f3d65f9c840) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f3d65f9cf00) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 31u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QProcess::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QProcess::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QProcess::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QProcess::writeData
+240 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f3d660063a8) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16u)
+ QIODevice (0x0x7f3d66006410) 0
+ primary-for QProcess (0x0x7f3d660063a8)
+ QObject (0x0x7f3d65f9cea0) 0
+ primary-for QIODevice (0x0x7f3d66006410)
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f3d66049000) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7f3d66006478) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16u)
+ QAbstractAnimation (0x0x7f3d660064e0) 0
+ primary-for QVariantAnimation (0x0x7f3d66006478)
+ QObject (0x0x7f3d65f9cf60) 0
+ primary-for QAbstractAnimation (0x0x7f3d660064e0)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f3d660490c0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7f3d660065b0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16u)
+ QVariantAnimation (0x0x7f3d66006618) 0
+ primary-for QPropertyAnimation (0x0x7f3d660065b0)
+ QAbstractAnimation (0x0x7f3d66006680) 0
+ primary-for QVariantAnimation (0x0x7f3d66006618)
+ QObject (0x0x7f3d66049060) 0
+ primary-for QAbstractAnimation (0x0x7f3d66006680)
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f3d660491e0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f3d66049180) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f3d65ce7958) 0
+ QRandomGenerator (0x0x7f3d65cff180) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f3d65cff240) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f3d65cff4e0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f3d65cff5a0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f3d65cff660) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f3d65cff900) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f3d65cffba0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f3d65cffe40) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f3d65af2120) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f3d65af2720) 0
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f3d65af2a20) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f3d65af2d20) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f3d65af2ea0) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 34u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QSaveFile::writeData
+240 (int (*)(...))QSaveFile::fileName
+248 (int (*)(...))QFileDevice::resize
+256 (int (*)(...))QFileDevice::permissions
+264 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f3d65e2fb60) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16u)
+ QFileDevice (0x0x7f3d65e2fbc8) 0
+ primary-for QSaveFile (0x0x7f3d65e2fb60)
+ QIODevice (0x0x7f3d65e2fc30) 0
+ primary-for QFileDevice (0x0x7f3d65e2fbc8)
+ QObject (0x0x7f3d65af2e40) 0
+ primary-for QIODevice (0x0x7f3d65e2fc30)
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f3d65af2f60) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f3d65c38000) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f3d65919600) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7f3d65923478) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16u)
+ QAnimationGroup (0x0x7f3d659234e0) 0
+ primary-for QSequentialAnimationGroup (0x0x7f3d65923478)
+ QAbstractAnimation (0x0x7f3d65923548) 0
+ primary-for QAnimationGroup (0x0x7f3d659234e0)
+ QObject (0x0x7f3d659195a0) 0
+ primary-for QAbstractAnimation (0x0x7f3d65923548)
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f3d659196c0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7f3d659235b0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16u)
+ QObject (0x0x7f3d65919660) 0
+ primary-for QSettings (0x0x7f3d659235b0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f3d65919780) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7f3d65923618) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16u)
+ QObject (0x0x7f3d65919720) 0
+ primary-for QSharedMemory (0x0x7f3d65923618)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f3d65919840) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7f3d65923680) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16u)
+ QObject (0x0x7f3d659197e0) 0
+ primary-for QSignalMapper (0x0x7f3d65923680)
+
+Class QSignalTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalTransition::QPrivateSignal (0x0x7f3d65919900) 0 empty
+
+Vtable for QSignalTransition
+QSignalTransition::_ZTV17QSignalTransition: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSignalTransition)
+16 (int (*)(...))QSignalTransition::metaObject
+24 (int (*)(...))QSignalTransition::qt_metacast
+32 (int (*)(...))QSignalTransition::qt_metacall
+40 (int (*)(...))QSignalTransition::~QSignalTransition
+48 (int (*)(...))QSignalTransition::~QSignalTransition
+56 (int (*)(...))QSignalTransition::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSignalTransition::eventTest
+120 (int (*)(...))QSignalTransition::onTransition
+
+Class QSignalTransition
+ size=16 align=8
+ base size=16 base align=8
+QSignalTransition (0x0x7f3d659236e8) 0
+ vptr=((& QSignalTransition::_ZTV17QSignalTransition) + 16u)
+ QAbstractTransition (0x0x7f3d65923750) 0
+ primary-for QSignalTransition (0x0x7f3d659236e8)
+ QObject (0x0x7f3d659198a0) 0
+ primary-for QAbstractTransition (0x0x7f3d65923750)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f3d659199c0) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7f3d659237b8) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16u)
+ QObject (0x0x7f3d65919960) 0
+ primary-for QSocketNotifier (0x0x7f3d659237b8)
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f3d65919a80) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 56u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QSortFilterProxyModel::mimeTypes
+216 (int (*)(...))QSortFilterProxyModel::mimeData
+224 (int (*)(...))QAbstractProxyModel::canDropMimeData
+232 (int (*)(...))QSortFilterProxyModel::dropMimeData
+240 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+248 (int (*)(...))QAbstractProxyModel::supportedDragActions
+256 (int (*)(...))QSortFilterProxyModel::insertRows
+264 (int (*)(...))QSortFilterProxyModel::insertColumns
+272 (int (*)(...))QSortFilterProxyModel::removeRows
+280 (int (*)(...))QSortFilterProxyModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QSortFilterProxyModel::fetchMore
+312 (int (*)(...))QSortFilterProxyModel::canFetchMore
+320 (int (*)(...))QSortFilterProxyModel::flags
+328 (int (*)(...))QSortFilterProxyModel::sort
+336 (int (*)(...))QSortFilterProxyModel::buddy
+344 (int (*)(...))QSortFilterProxyModel::match
+352 (int (*)(...))QSortFilterProxyModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractProxyModel::submit
+376 (int (*)(...))QAbstractProxyModel::revert
+384 (int (*)(...))QSortFilterProxyModel::setSourceModel
+392 (int (*)(...))QSortFilterProxyModel::mapToSource
+400 (int (*)(...))QSortFilterProxyModel::mapFromSource
+408 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+416 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+424 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+432 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+440 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f3d65923820) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16u)
+ QAbstractProxyModel (0x0x7f3d65923888) 0
+ primary-for QSortFilterProxyModel (0x0x7f3d65923820)
+ QAbstractItemModel (0x0x7f3d659238f0) 0
+ primary-for QAbstractProxyModel (0x0x7f3d65923888)
+ QObject (0x0x7f3d65919a20) 0
+ primary-for QAbstractItemModel (0x0x7f3d659238f0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f3d65919b40) 0 empty
+
+Class QState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QState::QPrivateSignal (0x0x7f3d65919d80) 0 empty
+
+Vtable for QState
+QState::_ZTV6QState: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QState)
+16 (int (*)(...))QState::metaObject
+24 (int (*)(...))QState::qt_metacast
+32 (int (*)(...))QState::qt_metacall
+40 (int (*)(...))QState::~QState
+48 (int (*)(...))QState::~QState
+56 (int (*)(...))QState::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QState::onEntry
+120 (int (*)(...))QState::onExit
+
+Class QState
+ size=16 align=8
+ base size=16 base align=8
+QState (0x0x7f3d65923a90) 0
+ vptr=((& QState::_ZTV6QState) + 16u)
+ QAbstractState (0x0x7f3d65923af8) 0
+ primary-for QState (0x0x7f3d65923a90)
+ QObject (0x0x7f3d65919d20) 0
+ primary-for QAbstractState (0x0x7f3d65923af8)
+
+Class QStateMachine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStateMachine::QPrivateSignal (0x0x7f3d65919ea0) 0 empty
+
+Vtable for QStateMachine::SignalEvent
+QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine11SignalEventE)
+16 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+24 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+
+Class QStateMachine::SignalEvent
+ size=48 align=8
+ base size=48 base align=8
+QStateMachine::SignalEvent (0x0x7f3d65923c98) 0
+ vptr=((& QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE) + 16u)
+ QEvent (0x0x7f3d65919f00) 0
+ primary-for QStateMachine::SignalEvent (0x0x7f3d65923c98)
+
+Vtable for QStateMachine::WrappedEvent
+QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE: 4u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QStateMachine12WrappedEventE)
+16 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+24 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+
+Class QStateMachine::WrappedEvent
+ size=40 align=8
+ base size=40 base align=8
+QStateMachine::WrappedEvent (0x0x7f3d65923d00) 0
+ vptr=((& QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE) + 16u)
+ QEvent (0x0x7f3d65919f60) 0
+ primary-for QStateMachine::WrappedEvent (0x0x7f3d65923d00)
+
+Vtable for QStateMachine
+QStateMachine::_ZTV13QStateMachine: 20u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStateMachine)
+16 (int (*)(...))QStateMachine::metaObject
+24 (int (*)(...))QStateMachine::qt_metacast
+32 (int (*)(...))QStateMachine::qt_metacall
+40 (int (*)(...))QStateMachine::~QStateMachine
+48 (int (*)(...))QStateMachine::~QStateMachine
+56 (int (*)(...))QStateMachine::event
+64 (int (*)(...))QStateMachine::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStateMachine::onEntry
+120 (int (*)(...))QStateMachine::onExit
+128 (int (*)(...))QStateMachine::beginSelectTransitions
+136 (int (*)(...))QStateMachine::endSelectTransitions
+144 (int (*)(...))QStateMachine::beginMicrostep
+152 (int (*)(...))QStateMachine::endMicrostep
+
+Class QStateMachine
+ size=16 align=8
+ base size=16 base align=8
+QStateMachine (0x0x7f3d65923b60) 0
+ vptr=((& QStateMachine::_ZTV13QStateMachine) + 16u)
+ QState (0x0x7f3d65923bc8) 0
+ primary-for QStateMachine (0x0x7f3d65923b60)
+ QAbstractState (0x0x7f3d65923c30) 0
+ primary-for QState (0x0x7f3d65923bc8)
+ QObject (0x0x7f3d65919e40) 0
+ primary-for QAbstractState (0x0x7f3d65923c30)
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f3d65a49000) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f3d65a49f00) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f3d656a3a20) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 48u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::mimeTypes
+216 (int (*)(...))QAbstractItemModel::mimeData
+224 (int (*)(...))QAbstractItemModel::canDropMimeData
+232 (int (*)(...))QAbstractListModel::dropMimeData
+240 (int (*)(...))QStringListModel::supportedDropActions
+248 (int (*)(...))QAbstractItemModel::supportedDragActions
+256 (int (*)(...))QStringListModel::insertRows
+264 (int (*)(...))QAbstractItemModel::insertColumns
+272 (int (*)(...))QStringListModel::removeRows
+280 (int (*)(...))QAbstractItemModel::removeColumns
+288 (int (*)(...))QAbstractItemModel::moveRows
+296 (int (*)(...))QAbstractItemModel::moveColumns
+304 (int (*)(...))QAbstractItemModel::fetchMore
+312 (int (*)(...))QAbstractItemModel::canFetchMore
+320 (int (*)(...))QStringListModel::flags
+328 (int (*)(...))QStringListModel::sort
+336 (int (*)(...))QAbstractItemModel::buddy
+344 (int (*)(...))QAbstractItemModel::match
+352 (int (*)(...))QAbstractItemModel::span
+360 (int (*)(...))QAbstractItemModel::roleNames
+368 (int (*)(...))QAbstractItemModel::submit
+376 (int (*)(...))QAbstractItemModel::revert
+
+Class QStringListModel
+ size=24 align=8
+ base size=24 base align=8
+QStringListModel (0x0x7f3d65701208) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16u)
+ QAbstractListModel (0x0x7f3d65701270) 0
+ primary-for QStringListModel (0x0x7f3d65701208)
+ QAbstractItemModel (0x0x7f3d657012d8) 0
+ primary-for QAbstractListModel (0x0x7f3d65701270)
+ QObject (0x0x7f3d656a39c0) 0
+ primary-for QAbstractItemModel (0x0x7f3d657012d8)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f3d656a3a80) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f3d656a3b40) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f3d656a3c60) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 34u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QFileDevice::writeData
+240 (int (*)(...))QTemporaryFile::fileName
+248 (int (*)(...))QFile::resize
+256 (int (*)(...))QFile::permissions
+264 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f3d65701340) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16u)
+ QFile (0x0x7f3d657013a8) 0
+ primary-for QTemporaryFile (0x0x7f3d65701340)
+ QFileDevice (0x0x7f3d65701410) 0
+ primary-for QFile (0x0x7f3d657013a8)
+ QIODevice (0x0x7f3d65701478) 0
+ primary-for QFileDevice (0x0x7f3d65701410)
+ QObject (0x0x7f3d656a3c00) 0
+ primary-for QIODevice (0x0x7f3d65701478)
+
+Class QTextBoundaryFinder
+ size=48 align=8
+ base size=48 base align=8
+QTextBoundaryFinder (0x0x7f3d656a3cc0) 0
+
+Class QTextCodec::ConverterState
+ size=32 align=8
+ base size=32 base align=8
+QTextCodec::ConverterState (0x0x7f3d656a3f00) 0
+
+Vtable for QTextCodec
+QTextCodec::_ZTV10QTextCodec: 9u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextCodec)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))QTextCodec::aliases
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 0u
+64 0u
+
+Class QTextCodec
+ size=8 align=8
+ base size=8 base align=8
+QTextCodec (0x0x7f3d656a3ea0) 0 nearly-empty
+ vptr=((& QTextCodec::_ZTV10QTextCodec) + 16u)
+
+Class QTextEncoder
+ size=40 align=8
+ base size=40 base align=8
+QTextEncoder (0x0x7f3d6579a120) 0
+
+Class QTextDecoder
+ size=40 align=8
+ base size=40 base align=8
+QTextDecoder (0x0x7f3d6579a180) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f3d6579a1e0) 0
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f3d6579a240) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f3d65701680) 0
+ std::__mutex_base (0x0x7f3d6579a2a0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f3d657016e8) 0
+ std::__recursive_mutex_base (0x0x7f3d6579a300) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f3d65801460) 0
+ std::__mutex_base (0x0x7f3d6579a420) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f3d6579a480) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f3d658160e0) 0
+ std::__recursive_mutex_base (0x0x7f3d6579a540) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f3d6579a5a0) 0 empty
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f3d6579a600) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f3d6579a660) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f3d6579a6c0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f3d6579a900) 0
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7f3d65701820) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16u)
+ std::exception (0x0x7f3d6579a9c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f3d65701820)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7f3d65701888) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16u)
+ std::exception (0x0x7f3d6579aa80) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f3d65701888)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7f3d657018f0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16u)
+ std::exception (0x0x7f3d6579ab40) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f3d657018f0)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7f3d657019c0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16u)
+ std::exception (0x0x7f3d6579ac00) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f3d657019c0)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f3d6579acc0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f3d6579ad20) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f3d6579ad80) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f3d6579ade0) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7f3d65701c98) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16u)
+ std::exception (0x0x7f3d654e5180) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f3d65701c98)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f3d654e59c0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f3d651871e0) 0
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f3d651873c0) 0
+
+Vtable for std::thread::_Impl_base
+std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread10_Impl_baseE)
+16 0u
+24 0u
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_Impl_base
+ size=24 align=8
+ base size=24 base align=8
+std::thread::_Impl_base (0x0x7f3d65187420) 0
+ vptr=((& std::thread::_Impl_base::_ZTVNSt6thread10_Impl_baseE) + 16u)
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f3d65187360) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f3d65346060) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f3d65346120) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f3d65346180) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f3d64ffa7e0) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7f3d6504b000) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16u)
+ std::logic_error (0x0x7f3d6504b068) 0
+ primary-for std::future_error (0x0x7f3d6504b000)
+ std::exception (0x0x7f3d64ffa900) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f3d6504b068)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f3d64ffaa20) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0u
+32 0u
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f3d64ffa9c0) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16u)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7f3d65090f60) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7f3d64d56618) 0
+ std::__at_thread_exit_elt (0x0x7f3d64d7a060) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7f3d64ffaba0) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16u)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f3d64ffa960) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7f3d64aed208) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16u)
+ std::__future_base::_State_baseV2 (0x0x7f3d64a99f00) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f3d64aed208)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f3d64afe660) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7f3d64aedc98) 0
+ vptr=((& QThread::_ZTV7QThread) + 16u)
+ QObject (0x0x7f3d64afe600) 0
+ primary-for QThread (0x0x7f3d64aedc98)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f3d64afe780) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7f3d64aedd00) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16u)
+ QObject (0x0x7f3d64afe720) 0
+ primary-for QThreadPool (0x0x7f3d64aedd00)
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f3d64afe7e0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f3d64afe900) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7f3d64aedd68) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16u)
+ QObject (0x0x7f3d64afe8a0) 0
+ primary-for QTimeLine (0x0x7f3d64aedd68)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f3d64afe9c0) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=32 align=8
+ base size=29 base align=8
+QTimer (0x0x7f3d64aeddd0) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16u)
+ QObject (0x0x7f3d64afe960) 0
+ primary-for QTimer (0x0x7f3d64aeddd0)
+
+Class QTimeZone::OffsetData
+ size=32 align=8
+ base size=28 base align=8
+QTimeZone::OffsetData (0x0x7f3d647c50c0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f3d647c5060) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f3d647c5660) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7f3d647b7820) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16u)
+ QObject (0x0x7f3d647c5600) 0
+ primary-for QTranslator (0x0x7f3d647b7820)
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f3d647c5780) 0
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f3d648f9e40) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f3d6459c4e0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f3d6459cae0) 0
+
+Class QXmlStreamStringRef
+ size=16 align=8
+ base size=16 base align=8
+QXmlStreamStringRef (0x0x7f3d6459cb40) 0
+
+Class QXmlStreamAttribute
+ size=80 align=8
+ base size=73 base align=8
+QXmlStreamAttribute (0x0x7f3d6459ce40) 0
+
+Class QXmlStreamAttributes
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamAttributes (0x0x7f3d646272d8) 0
+ QVector<QXmlStreamAttribute> (0x0x7f3d64644240) 0
+
+Class QXmlStreamNamespaceDeclaration
+ size=40 align=8
+ base size=40 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f3d646442a0) 0
+
+Class QXmlStreamNotationDeclaration
+ size=56 align=8
+ base size=56 base align=8
+QXmlStreamNotationDeclaration (0x0x7f3d64644540) 0
+
+Class QXmlStreamEntityDeclaration
+ size=88 align=8
+ base size=88 base align=8
+QXmlStreamEntityDeclaration (0x0x7f3d646447e0) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7f3d64644a80) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16u)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f3d64644ae0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f3d64718540) 0
+
+Class QSerialPort::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSerialPort::QPrivateSignal (0x0x7f3d647186c0) 0 empty
+
+Vtable for QSerialPort
+QSerialPort::_ZTV11QSerialPort: 30u entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSerialPort)
+16 (int (*)(...))QSerialPort::metaObject
+24 (int (*)(...))QSerialPort::qt_metacast
+32 (int (*)(...))QSerialPort::qt_metacall
+40 (int (*)(...))QSerialPort::~QSerialPort
+48 (int (*)(...))QSerialPort::~QSerialPort
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSerialPort::isSequential
+120 (int (*)(...))QSerialPort::open
+128 (int (*)(...))QSerialPort::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSerialPort::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSerialPort::bytesAvailable
+184 (int (*)(...))QSerialPort::bytesToWrite
+192 (int (*)(...))QSerialPort::canReadLine
+200 (int (*)(...))QSerialPort::waitForReadyRead
+208 (int (*)(...))QSerialPort::waitForBytesWritten
+216 (int (*)(...))QSerialPort::readData
+224 (int (*)(...))QSerialPort::readLineData
+232 (int (*)(...))QSerialPort::writeData
+
+Class QSerialPort
+ size=24 align=8
+ base size=24 base align=8
+QSerialPort (0x0x7f3d6473f410) 0
+ vptr=((& QSerialPort::_ZTV11QSerialPort) + 16u)
+ QIODevice (0x0x7f3d6473f478) 0
+ primary-for QSerialPort (0x0x7f3d6473f410)
+ QObject (0x0x7f3d64718660) 0
+ primary-for QIODevice (0x0x7f3d6473f478)
+
+Class QSerialPortInfo
+ size=8 align=8
+ base size=8 base align=8
+QSerialPortInfo (0x0x7f3d64718a20) 0
+