summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-12-24 01:06:18 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-01-02 16:17:28 +0100
commit343bf28e95581476f6f41334e69d21aae5df70bd (patch)
treefec910cfe43af133c515b9d487cdb8bb65df0d77
parent6f699f91ed8f184eee26b83e5f6edfa04b27b4ec (diff)
parent4e15aa6d7c4f9a03f4ae57b3ba04ade3400cccf1 (diff)
downloadqtserialport-343bf28e95581476f6f41334e69d21aae5df70bd.tar.gz
Merge remote-tracking branch 'origin/stable' into dev
Conflicts: .qmake.conf src/serialport/qserialportinfo_unix.cpp Change-Id: I9582d161018939defd3ba81d601fff176e86eb3c
-rw-r--r--dist/changes-5.2.020
-rw-r--r--examples/serialport/cenumerator/main.cpp14
-rw-r--r--examples/serialport/creaderasync/serialportreader.cpp6
-rw-r--r--examples/serialport/creadersync/main.cpp7
-rw-r--r--examples/serialport/terminal/settingsdialog.cpp13
-rw-r--r--src/serialport/qserialport.cpp81
-rw-r--r--src/serialport/qserialport.h23
-rw-r--r--src/serialport/qserialport_symbian.cpp26
-rw-r--r--src/serialport/qserialport_symbian_p.h3
-rw-r--r--src/serialport/qserialport_unix.cpp51
-rw-r--r--src/serialport/qserialport_unix_p.h3
-rw-r--r--src/serialport/qserialport_win.cpp480
-rw-r--r--src/serialport/qserialport_win_p.h29
-rw-r--r--src/serialport/qserialport_wince.cpp29
-rw-r--r--src/serialport/qserialportglobal.h4
-rw-r--r--src/serialport/qserialportinfo.cpp1
-rw-r--r--src/serialport/qserialportinfo.h7
-rw-r--r--src/serialport/qserialportinfo_mac.cpp3
-rw-r--r--src/serialport/qserialportinfo_symbian.cpp21
-rw-r--r--src/serialport/qserialportinfo_unix.cpp150
-rw-r--r--src/serialport/qserialportinfo_win.cpp57
-rw-r--r--src/serialport/qserialportinfo_wince.cpp3
-rw-r--r--src/serialport/qtudev_p.h2
-rw-r--r--src/serialport/serialport-lib.pri2
-rw-r--r--tests/auto/bic/data/QtSerialPort.5.1.0.linux-gcc-ia32.txt3520
-rw-r--r--tests/global/.gitignore2
-rw-r--r--tests/global/global.cfg5
27 files changed, 3976 insertions, 586 deletions
diff --git a/dist/changes-5.2.0 b/dist/changes-5.2.0
index 20fd35c..6105c8b 100644
--- a/dist/changes-5.2.0
+++ b/dist/changes-5.2.0
@@ -64,9 +64,6 @@ now.
- [QTBUG-33774] Document that the serial port parameters cannot be set before
opening.
-- Add an "UnknownSignal" value for the pinout signals. This is now the returned
-value when the pinout state of the signals cannot be detected properly.
-
- No more unnecessary syscalls (parameter settings, pinout signal query, etc) in the
backend when the port is closed. This also means no improper errors are set
accordingly.
@@ -103,9 +100,9 @@ not used for finding udev again.
- [QTBUG-32563] Motorola IMX support was added when udev and sysfs are not
present.
-- [QTBUG-34429] Mark the the data error policy obsolete. End users should stop
-using this feature now. It may be removed later in Qt 6.X, and there is a
-warning now if it is used.
+- [QTBUG-34429] Mark the data error policy obsolete. End users should stop using
+this feature now. It may be removed later in Qt 6.X, and there is a warning now
+if it is used.
- Support has been added for the hard-coded device enumeration backend to get
information. Android uarts such as /dev/ttyHS* (High speed UART) and
@@ -121,3 +118,14 @@ information. /dev/ttyO* (native OMAP UART) is supported by that backend.
- The lock file usage has been extended to support Android as there is no direct
access to the usual Unix lock file system paths. The lock file is now placed
into /data/local/tmp.
+
+- [QTBUG-35064] PCI support has been added to the sysfs backend on Linux to
+support the enumeration of such devices.
+
+- [QTBUG-35184] Mark the isValid() method in QSerialPortInfo deprecated because
+it has no common use case.
+
+- [QTBUG-35215] Mark the QSerialPort::Unknown* enumeration values in QSerialPort
+deprecated because it has no use case, and was added mistakenly. There is no
+such "standard" serial port behavior general for these as "unknown". It is an
+implementation detail for error reporting, and hence not recommended anymore.
diff --git a/examples/serialport/cenumerator/main.cpp b/examples/serialport/cenumerator/main.cpp
index f55b92d..2d770e8 100644
--- a/examples/serialport/cenumerator/main.cpp
+++ b/examples/serialport/cenumerator/main.cpp
@@ -53,14 +53,20 @@ int main(int argc, char *argv[])
out << QObject::tr("Total number of ports available: ") << serialPortInfoList.count() << endl;
+ const QString blankString = QObject::tr("N/A");
+ QString description;
+ QString manufacturer;
+
foreach (const QSerialPortInfo &serialPortInfo, serialPortInfoList) {
+ description = serialPortInfo.description();
+ manufacturer = serialPortInfo.manufacturer();
out << endl
<< QObject::tr("Port: ") << serialPortInfo.portName() << endl
<< QObject::tr("Location: ") << serialPortInfo.systemLocation() << endl
- << QObject::tr("Description: ") << serialPortInfo.description() << endl
- << QObject::tr("Manufacturer: ") << serialPortInfo.manufacturer() << endl
- << QObject::tr("Vendor Identifier: ") << (serialPortInfo.hasVendorIdentifier() ? QByteArray::number(serialPortInfo.vendorIdentifier(), 16) : QByteArray()) << endl
- << QObject::tr("Product Identifier: ") << (serialPortInfo.hasProductIdentifier() ? QByteArray::number(serialPortInfo.productIdentifier(), 16) : QByteArray()) << endl
+ << QObject::tr("Description: ") << (!description.isEmpty() ? description : blankString) << endl
+ << QObject::tr("Manufacturer: ") << (!manufacturer.isEmpty() ? manufacturer : 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;
}
diff --git a/examples/serialport/creaderasync/serialportreader.cpp b/examples/serialport/creaderasync/serialportreader.cpp
index 5dd7412..e238304 100644
--- a/examples/serialport/creaderasync/serialportreader.cpp
+++ b/examples/serialport/creaderasync/serialportreader.cpp
@@ -72,13 +72,13 @@ void SerialPortReader::handleReadyRead()
void SerialPortReader::handleTimeout()
{
if (m_readData.isEmpty()) {
- m_standardOutput << QObject::tr("Either no data was currently available for reading, or an error occurred for port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
- QCoreApplication::exit(1);
+ 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 << m_readData << endl;
- QCoreApplication::quit();
}
+
+ QCoreApplication::quit();
}
void SerialPortReader::handleError(QSerialPort::SerialPortError serialPortError)
diff --git a/examples/serialport/creadersync/main.cpp b/examples/serialport/creadersync/main.cpp
index cd10b8e..188d7b8 100644
--- a/examples/serialport/creadersync/main.cpp
+++ b/examples/serialport/creadersync/main.cpp
@@ -99,9 +99,12 @@ int main(int argc, char *argv[])
while (serialPort.waitForReadyRead(5000))
readData.append(serialPort.readAll());
- if (readData.isEmpty()) {
- standardOutput << QObject::tr("Either no data was currently available for reading, or an error occurred for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
+ if (serialPort.error() == QSerialPort::ReadError) {
+ 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) {
+ 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;
diff --git a/examples/serialport/terminal/settingsdialog.cpp b/examples/serialport/terminal/settingsdialog.cpp
index ad32824..923f000 100644
--- a/examples/serialport/terminal/settingsdialog.cpp
+++ b/examples/serialport/terminal/settingsdialog.cpp
@@ -151,14 +151,19 @@ void SettingsDialog::fillPortsParameters()
void SettingsDialog::fillPortsInfo()
{
ui->serialPortInfoListBox->clear();
+ static const QString blankString = QObject::tr("N/A");
+ QString description;
+ QString manufacturer;
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
QStringList list;
+ description = info.description();
+ manufacturer = info.manufacturer();
list << info.portName()
- << info.description()
- << info.manufacturer()
+ << (!description.isEmpty() ? description : blankString)
+ << (!manufacturer.isEmpty() ? manufacturer : blankString)
<< info.systemLocation()
- << (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : QString())
- << (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : QString());
+ << (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : blankString)
+ << (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : blankString);
ui->serialPortInfoListBox->addItem(list.first(), list);
}
diff --git a/src/serialport/qserialport.cpp b/src/serialport/qserialport.cpp
index 7c332cc..5d9442e 100644
--- a/src/serialport/qserialport.cpp
+++ b/src/serialport/qserialport.cpp
@@ -70,10 +70,10 @@ QSerialPortPrivateData::QSerialPortPrivateData(QSerialPort *q)
, error(QSerialPort::NoError)
, inputBaudRate(0)
, outputBaudRate(0)
- , dataBits(QSerialPort::UnknownDataBits)
- , parity(QSerialPort::UnknownParity)
- , stopBits(QSerialPort::UnknownStopBits)
- , flow(QSerialPort::UnknownFlowControl)
+ , dataBits(QSerialPort::Data8)
+ , parity(QSerialPort::NoParity)
+ , stopBits(QSerialPort::OneStop)
+ , flow(QSerialPort::NoFlowControl)
, policy(QSerialPort::IgnorePolicy)
, settingsRestoredOnClose(true)
, q_ptr(q)
@@ -198,7 +198,9 @@ int QSerialPortPrivateData::timeoutValue(int msecs, int elapsed)
\value Baud38400 38400 baud.
\value Baud57600 57600 baud.
\value Baud115200 115200 baud.
- \value UnknownBaud Unknown baud.
+ \value UnknownBaud Unknown baud. This value is obsolete. It is provided to
+ keep old source code working. We strongly advise against
+ using it in new code.
\sa QSerialPort::baudRate
*/
@@ -208,11 +210,21 @@ int QSerialPortPrivateData::timeoutValue(int msecs, int elapsed)
This enum describes the number of data bits used.
- \value Data5 Five bits.
- \value Data6 Six bits.
- \value Data7 Seven bits
- \value Data8 Eight bits.
- \value UnknownDataBits Unknown number of bits.
+ \value Data5 The number of data bits in each character is 5. It
+ is used for Baudot code. It generally only makes
+ sense with older equipments such as teleprinters.
+ \value Data6 The number of data bits in each character is 6. It
+ is rarely used.
+ \value Data7 The number of data bits in each character is 7. It
+ is used for true ASCII. It generally only makes
+ sense with older equipments such as teleprinters.
+ \value Data8 The number of data bits in each character is 8. It
+ is used for most kinds of data, as this size matches
+ the size of a byte. It is almost universally used in
+ newer applications.
+ \value UnknownDataBits Unknown number of bits. This value is obsolete. It
+ is provided to keep old source code working. We
+ strongly advise against using it in new code.
\sa QSerialPort::dataBits
*/
@@ -222,12 +234,23 @@ int QSerialPortPrivateData::timeoutValue(int msecs, int elapsed)
This enum describes the parity scheme used.
- \value NoParity No parity.
- \value EvenParity Even parity.
- \value OddParity Odd parity.
- \value SpaceParity Space parity.
- \value MarkParity Mark parity.
- \value UnknownParity Unknown parity.
+ \value NoParity No parity bit it sent. This is the most common
+ parity setting. Error detection is handled by the
+ communication protocol.
+ \value EvenParity The number of 1 bits in each character, including
+ the parity bit, is always even.
+ \value OddParity The number of 1 bits in each character, including
+ the parity bit, is always odd. It ensures that at
+ least one state transition occurs in each character.
+ \value SpaceParity Space parity. The parity bit is sent in the space
+ signal condition. It does not provide error
+ detection information.
+ \value MarkParity Mark parity. The parity bit is always set to the
+ mark signal condition (logical 1). It does not
+ provide error detection information.
+ \value UnknownParity Unknown parity. This value is obsolete. It is
+ provided to keep old source code working. We
+ strongly advise against using it in new code.
\sa QSerialPort::parity
*/
@@ -238,9 +261,11 @@ int QSerialPortPrivateData::timeoutValue(int msecs, int elapsed)
This enum describes the number of stop bits used.
\value OneStop 1 stop bit.
- \value OneAndHalfStop 1.5 stop bits.
+ \value OneAndHalfStop 1.5 stop bits. This is only for Windows platform.
\value TwoStop 2 stop bits.
- \value UnknownStopBits Unknown number of stop bit.
+ \value UnknownStopBits Unknown number of stop bit. This value is obsolete.
+ It is provided to keep old source code working. We
+ strongly advise against using it in new code.
\sa QSerialPort::stopBits
*/
@@ -253,7 +278,9 @@ int QSerialPortPrivateData::timeoutValue(int msecs, int elapsed)
\value NoFlowControl No flow control.
\value HardwareControl Hardware flow control (RTS/CTS).
\value SoftwareControl Software flow control (XON/XOFF).
- \value UnknownFlowControl Unknown flow control.
+ \value UnknownFlowControl Unknown flow control. This value is obsolete. It
+ is provided to keep old source code working. We
+ strongly advise against using it in new code.
\sa QSerialPort::flowControl
*/
@@ -274,7 +301,6 @@ int QSerialPortPrivateData::timeoutValue(int msecs, int elapsed)
\value ClearToSendSignal CTS (Clear To Send).
\value SecondaryTransmittedDataSignal STD (Secondary Transmitted Data).
\value SecondaryReceivedDataSignal SRD (Secondary Received Data).
- \value UnknownSignal Unknown line state. This value was introduced in QtSerialPort 5.2.
\sa pinoutSignals(), QSerialPort::dataTerminalReady,
QSerialPort::requestToSend
@@ -621,7 +647,7 @@ qint32 QSerialPort::baudRate(Directions directions) const
Q_D(const QSerialPort);
if (directions == QSerialPort::AllDirections)
return d->inputBaudRate == d->outputBaudRate ?
- d->inputBaudRate : QSerialPort::UnknownBaud;
+ d->inputBaudRate : -1;
return directions & QSerialPort::Input ? d->inputBaudRate : d->outputBaudRate;
}
@@ -953,8 +979,7 @@ bool QSerialPort::isRequestToSend()
operating systems cannot provide proper notifications about the changes.
\note The serial port has to be open before trying to get the pinout
- signals; otherwise returns UnknownSignal and sets the NotOpenError error
- code.
+ signals; otherwise returns NoSignal and sets the NotOpenError error code.
\sa isDataTerminalReady(), isRequestToSend, setDataTerminalReady(),
setRequestToSend()
@@ -966,7 +991,7 @@ QSerialPort::PinoutSignals QSerialPort::pinoutSignals()
if (!isOpen()) {
setError(QSerialPort::NotOpenError);
qWarning("%s: device not open", Q_FUNC_INFO);
- return QSerialPort::UnknownSignal;
+ return QSerialPort::NoSignal;
}
return d->pinoutSignals();
@@ -1053,7 +1078,7 @@ bool QSerialPort::clear(Directions directions)
bool QSerialPort::atEnd() const
{
Q_D(const QSerialPort);
- return QIODevice::atEnd() && (!isOpen() || (d->bytesAvailable() == 0));
+ return QIODevice::atEnd() && (!isOpen() || (d->readBuffer.size() == 0));
}
/*!
@@ -1201,7 +1226,7 @@ bool QSerialPort::isSequential() const
qint64 QSerialPort::bytesAvailable() const
{
Q_D(const QSerialPort);
- return d->bytesAvailable() + QIODevice::bytesAvailable();
+ return d->readBuffer.size() + QIODevice::bytesAvailable();
}
/*!
@@ -1230,7 +1255,7 @@ qint64 QSerialPort::bytesToWrite() const
bool QSerialPort::canReadLine() const
{
Q_D(const QSerialPort);
- const bool hasLine = (d->bytesAvailable() > 0) && d->readBuffer.canReadLine();
+ const bool hasLine = (d->readBuffer.size() > 0) && d->readBuffer.canReadLine();
return hasLine || QIODevice::canReadLine();
}
@@ -1333,7 +1358,7 @@ bool QSerialPort::setBreakEnabled(bool set)
qint64 QSerialPort::readData(char *data, qint64 maxSize)
{
Q_D(QSerialPort);
- return d->readFromBuffer(data, maxSize);
+ return d->readBuffer.read(data, maxSize);
}
/*!
diff --git a/src/serialport/qserialport.h b/src/serialport/qserialport.h
index ada19fb..c07af91 100644
--- a/src/serialport/qserialport.h
+++ b/src/serialport/qserialport.h
@@ -47,10 +47,6 @@
#include <QtSerialPort/qserialportglobal.h>
-#ifndef QT_DEPRECATED_SINCE
-#define QT_DEPRECATED_SINCE(major, minor) 1
-#endif
-
QT_BEGIN_NAMESPACE
class QSerialPortInfo;
@@ -135,6 +131,16 @@ public:
UnknownFlowControl = -1
};
+#if QT_DEPRECATED_SINCE(5, 2)
+#if defined _MSC_VER
+#pragma deprecated(UnknownBaud)
+#pragma deprecated(UnknownDataBits)
+#pragma deprecated(UnknownParity)
+#pragma deprecated(UnknownStopBits)
+#pragma deprecated(UnknownFlowControl)
+#endif
+#endif
+
enum PinoutSignal {
NoSignal = 0x00,
TransmittedDataSignal = 0x01,
@@ -146,8 +152,7 @@ public:
RequestToSendSignal = 0x40,
ClearToSendSignal = 0x80,
SecondaryTransmittedDataSignal = 0x100,
- SecondaryReceivedDataSignal = 0x200,
- UnknownSignal = -1
+ SecondaryReceivedDataSignal = 0x200
};
Q_DECLARE_FLAGS(PinoutSignals, PinoutSignal)
@@ -269,6 +274,12 @@ private:
QSerialPortPrivate * const d_ptr;
Q_DISABLE_COPY(QSerialPort)
+
+#if defined (Q_OS_WIN32) || defined(Q_OS_WIN64)
+ Q_PRIVATE_SLOT(d_func(), void _q_canCompleteCommunication())
+ Q_PRIVATE_SLOT(d_func(), void _q_canCompleteRead())
+ Q_PRIVATE_SLOT(d_func(), void _q_canCompleteWrite())
+#endif
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QSerialPort::Directions)
diff --git a/src/serialport/qserialport_symbian.cpp b/src/serialport/qserialport_symbian.cpp
index d905db1..6047793 100644
--- a/src/serialport/qserialport_symbian.cpp
+++ b/src/serialport/qserialport_symbian.cpp
@@ -248,17 +248,6 @@ qint64 QSerialPortPrivate::systemOutputQueueSize () const
return 0;
}
-qint64 QSerialPortPrivate::bytesAvailable() const
-{
- return readBuffer.size();
-}
-
-qint64 QSerialPortPrivate::readFromBuffer(char *data, qint64 maxSize)
-{
- // TODO: Implement me
- return -1;
-}
-
qint64 QSerialPortPrivate::writeToBuffer(const char *data, qint64 maxSize)
{
// TODO: Implement me
@@ -433,7 +422,8 @@ void QSerialPortPrivate::detectDefaultSettings()
dataBits = QSerialPort::Data8;
break;
default:
- dataBits = QSerialPort::UnknownDataBits;
+ qWarning("%s: Unexpected data bits settings", Q_FUNC_INFO);
+ dataBits = QSerialPort::Data8;
break;
}
@@ -455,7 +445,8 @@ void QSerialPortPrivate::detectDefaultSettings()
parity = QSerialPort::SpaceParity;
break;
default:
- parity = QSerialPort::UnknownParity;
+ qWarning("%s: Unexpected parity settings", Q_FUNC_INFO);
+ parity = QSerialPort::NoParity;
break;
}
@@ -468,7 +459,8 @@ void QSerialPortPrivate::detectDefaultSettings()
stopBits = QSerialPort::TwoStop;
break;
default:
- stopBits = QSerialPort::UnknownStopBits;
+ qWarning("%s: Unexpected stop bits settings", Q_FUNC_INFO);
+ stopBits = QSerialPort::OneStop;
break;
}
@@ -481,8 +473,10 @@ void QSerialPortPrivate::detectDefaultSettings()
flow = QSerialPort::HardwareControl;
else if (currentSettings().iHandshake & KConfigFailDSR)
flow = QSerialPort::NoFlowControl;
- else
- flow = QSerialPort::UnknownFlowControl;
+ else {
+ qWarning("%s: Unexpected flow control settings", Q_FUNC_INFO);
+ flow = QSerialPort::NoFlowControl;
+ }
}
QSerialPort::SerialPortError QSerialPortPrivate::decodeSystemError() const
diff --git a/src/serialport/qserialport_symbian_p.h b/src/serialport/qserialport_symbian_p.h
index c56ddae..253aa11 100644
--- a/src/serialport/qserialport_symbian_p.h
+++ b/src/serialport/qserialport_symbian_p.h
@@ -72,9 +72,6 @@ public:
qint64 systemInputQueueSize () const;
qint64 systemOutputQueueSize () const;
- qint64 bytesAvailable() const;
-
- qint64 readFromBuffer(char *data, qint64 maxSize);
qint64 writeToBuffer(const char *data, qint64 maxSize);
bool waitForReadyRead(int msec);
diff --git a/src/serialport/qserialport_unix.cpp b/src/serialport/qserialport_unix.cpp
index 8b3d94b..51bb01e 100644
--- a/src/serialport/qserialport_unix.cpp
+++ b/src/serialport/qserialport_unix.cpp
@@ -305,7 +305,7 @@ QSerialPort::PinoutSignals QSerialPortPrivate::pinoutSignals()
if (::ioctl(descriptor, TIOCMGET, &arg) == -1) {
q->setError(decodeSystemError());
- return QSerialPort::UnknownSignal;
+ return QSerialPort::NoSignal;
}
QSerialPort::PinoutSignals ret = QSerialPort::NoSignal;
@@ -414,46 +414,6 @@ qint64 QSerialPortPrivate::systemOutputQueueSize () const
return nbytes;
}
-qint64 QSerialPortPrivate::bytesAvailable() const
-{
- return readBuffer.size();
-}
-
-qint64 QSerialPortPrivate::readFromBuffer(char *data, qint64 maxSize)
-{
- if (readBuffer.isEmpty())
- return 0;
-
- if (maxSize == 1) {
- *data = readBuffer.getChar();
- if (readBuffer.isEmpty())
- setReadNotificationEnabled(true);
- return 1;
- }
-
- const qint64 bytesToRead = qMin(qint64(readBuffer.size()), maxSize);
- qint64 readSoFar = 0;
- while (readSoFar < bytesToRead) {
- const char *ptr = readBuffer.readPointer();
- const int bytesToReadFromThisBlock = qMin(int(bytesToRead - readSoFar),
- readBuffer.nextDataBlockSize());
- ::memcpy(data + readSoFar, ptr, bytesToReadFromThisBlock);
- readSoFar += bytesToReadFromThisBlock;
- readBuffer.free(bytesToReadFromThisBlock);
- }
-
- if (!isReadNotificationEnabled())
- setReadNotificationEnabled(true);
-
- if (readSoFar > 0) {
- if (readBuffer.isEmpty())
- setReadNotificationEnabled(true);
- return readSoFar;
- }
-
- return readSoFar;
-}
-
qint64 QSerialPortPrivate::writeToBuffer(const char *data, qint64 maxSize)
{
char *ptr = writeBuffer.reserve(maxSize);
@@ -921,7 +881,8 @@ void QSerialPortPrivate::detectDefaultSettings()
dataBits = QSerialPort::Data8;
break;
default:
- dataBits = QSerialPort::UnknownDataBits;
+ qWarning("%s: Unexpected data bits settings", Q_FUNC_INFO);
+ dataBits = QSerialPort::Data8;
break;
}
@@ -953,8 +914,10 @@ void QSerialPortPrivate::detectDefaultSettings()
flow = QSerialPort::SoftwareControl;
else if ((currentTermios.c_cflag & CRTSCTS) && (!(currentTermios.c_iflag & (IXON | IXOFF | IXANY))))
flow = QSerialPort::HardwareControl;
- else
- flow = QSerialPort::UnknownFlowControl;
+ else {
+ qWarning("%s: Unexpected flow control settings", Q_FUNC_INFO);
+ flow = QSerialPort::NoFlowControl;
+ }
}
QSerialPort::SerialPortError QSerialPortPrivate::decodeSystemError() const
diff --git a/src/serialport/qserialport_unix_p.h b/src/serialport/qserialport_unix_p.h
index 15bb5f8..7c2b771 100644
--- a/src/serialport/qserialport_unix_p.h
+++ b/src/serialport/qserialport_unix_p.h
@@ -111,9 +111,6 @@ public:
qint64 systemInputQueueSize () const;
qint64 systemOutputQueueSize () const;
- qint64 bytesAvailable() const;
-
- qint64 readFromBuffer(char *data, qint64 maxSize);
qint64 writeToBuffer(const char *data, qint64 maxSize);
bool waitForReadyRead(int msecs);
diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp
index 80cba34..506dc94 100644
--- a/src/serialport/qserialport_win.cpp
+++ b/src/serialport/qserialport_win.cpp
@@ -88,167 +88,55 @@ QT_BEGIN_NAMESPACE
#ifndef Q_OS_WINCE
-class AbstractOverlappedEventNotifier : public QWinEventNotifier
+static void initializeOverlappedStructure(OVERLAPPED &overlapped)
{
- Q_OBJECT
-public:
- enum Type { CommEvent, ReadCompletionEvent, WriteCompletionEvent };
-
- AbstractOverlappedEventNotifier(QSerialPortPrivate *d, Type type, bool manual, QObject *parent)
- : QWinEventNotifier(parent), dptr(d), t(type) {
- ::ZeroMemory(&o, sizeof(o));
- o.hEvent = ::CreateEvent(NULL, manual, FALSE, NULL);
- if (!o.hEvent) {
- dptr->setError(dptr->decodeSystemError());
- } else {
- setHandle(o.hEvent);
- dptr->notifiers[o.hEvent] = this;
- }
- }
-
- virtual bool processCompletionRoutine() = 0;
-
- virtual ~AbstractOverlappedEventNotifier() {
- setEnabled(false);
- if (!::CloseHandle(o.hEvent))
- dptr->setError(dptr->decodeSystemError());
- }
-
- Type type() const { return t; }
- OVERLAPPED *overlappedPointer() { return &o; }
-
-protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE {
- const bool ret = QWinEventNotifier::event(e);
- if (e->type() == QEvent::WinEventAct)
- processCompletionRoutine();
- return ret;
- }
-
- QSerialPortPrivate *dptr;
- Type t;
- OVERLAPPED o;
-};
-
-class CommOverlappedEventNotifier : public AbstractOverlappedEventNotifier
-{
- Q_OBJECT
-public:
- CommOverlappedEventNotifier(QSerialPortPrivate *d, DWORD eventMask, QObject *parent)
- : AbstractOverlappedEventNotifier(d, CommEvent, false, parent)
- , originalEventMask(eventMask), triggeredEventMask(0) {
- if (!::SetCommMask(dptr->descriptor, originalEventMask))
- dptr->setError(dptr->decodeSystemError());
- else
- startWaitCommEvent();
- }
-
- void startWaitCommEvent() {
- if (!::WaitCommEvent(dptr->descriptor, &triggeredEventMask, &o)) {
- const QSerialPort::SerialPortError error = dptr->decodeSystemError();
- if (error != QSerialPort::NoError) {
- dptr->setError(dptr->decodeSystemError());
- return;
- }
- }
- }
-
- bool processCompletionRoutine() Q_DECL_OVERRIDE {
- DWORD numberOfBytesTransferred = 0;
-
- if (!::GetOverlappedResult(dptr->descriptor, &o, &numberOfBytesTransferred, FALSE))
- dptr->setError(dptr->decodeSystemError());
-
- bool error = false;
-
- // Check for unexpected event. This event triggered when pulled previously
- // opened device from the system, when opened as for not to read and not to
- // write options and so forth.
- if (triggeredEventMask == 0)
- error = true;
-
- // Workaround for standard CDC ACM serial ports, for which triggered an
- // unexpected event EV_TXEMPTY at data transmission.
- if ((originalEventMask & triggeredEventMask) == 0) {
- if ((triggeredEventMask & EV_TXEMPTY) == 0)
- error = true;
- }
-
- // Start processing a caught error.
- if (error || (EV_ERR & triggeredEventMask))
- dptr->processIoErrors(error);
-
- if (!error)
- dptr->startAsyncRead();
-
- return !error;
- }
-
-private:
- DWORD originalEventMask;
- DWORD triggeredEventMask;
-};
-
-class ReadOverlappedCompletionNotifier : public AbstractOverlappedEventNotifier
-{
- Q_OBJECT
-public:
- ReadOverlappedCompletionNotifier(QSerialPortPrivate *d, QObject *parent)
- : AbstractOverlappedEventNotifier(d, ReadCompletionEvent, false, parent) {}
-
- bool processCompletionRoutine() Q_DECL_OVERRIDE {
- DWORD numberOfBytesTransferred = 0;
- if (!::GetOverlappedResult(dptr->descriptor, &o, &numberOfBytesTransferred, FALSE))
- dptr->setError(dptr->decodeSystemError());
-
- dptr->completeAsyncRead(numberOfBytesTransferred);
-
- // start async read for possible remainder into driver queue
- if ((numberOfBytesTransferred > 0) && (dptr->policy == QSerialPort::IgnorePolicy)) {
- dptr->startAsyncRead();
- } else { // driver queue is emplty, so startup wait comm event
- CommOverlappedEventNotifier *n =
- qobject_cast<CommOverlappedEventNotifier *>(dptr->lookupCommEventNotifier());
- if (n)
- n->startWaitCommEvent();
- }
-
- return true;
- }
-};
-
-class WriteOverlappedCompletionNotifier : public AbstractOverlappedEventNotifier
-{
- Q_OBJECT
-public:
- WriteOverlappedCompletionNotifier(QSerialPortPrivate *d, QObject *parent)
- : AbstractOverlappedEventNotifier(d, WriteCompletionEvent, false, parent) {}
-
- bool processCompletionRoutine() Q_DECL_OVERRIDE {
- setEnabled(false);
- DWORD numberOfBytesTransferred = 0;
- if (!::GetOverlappedResult(dptr->descriptor, &o, &numberOfBytesTransferred, FALSE)) {
- numberOfBytesTransferred = 0;
- dptr->setError(dptr->decodeSystemError());
- }
-
- dptr->completeAsyncWrite(numberOfBytesTransferred);
- return true;
- }
-};
-
-#include "qserialport_win.moc"
+ overlapped.Internal = 0;
+ overlapped.InternalHigh = 0;
+ overlapped.Offset = 0;
+ overlapped.OffsetHigh = 0;
+}
QSerialPortPrivate::QSerialPortPrivate(QSerialPort *q)
: QSerialPortPrivateData(q)
, descriptor(INVALID_HANDLE_VALUE)
, parityErrorOccurred(false)
- , actualReadBufferSize(0)
+ , readChunkBuffer(ReadChunkSize, 0)
, actualWriteBufferSize(0)
, acyncWritePosition(0)
, readyReadEmitted(0)
, writeSequenceStarted(false)
+ , communicationNotifier(new QWinEventNotifier(q))
+ , readCompletionNotifier(new QWinEventNotifier(q))
+ , writeCompletionNotifier(new QWinEventNotifier(q))
+ , originalEventMask(0)
+ , triggeredEventMask(0)
{
+ ::ZeroMemory(&communicationOverlapped, sizeof(communicationOverlapped));
+ communicationOverlapped.hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
+ if (!communicationOverlapped.hEvent)
+ q->setError(decodeSystemError());
+ else {
+ communicationNotifier->setHandle(communicationOverlapped.hEvent);
+ q->connect(communicationNotifier, SIGNAL(activated(HANDLE)), q, SLOT(_q_canCompleteCommunication()));
+ }
+
+ ::ZeroMemory(&readCompletionOverlapped, sizeof(readCompletionOverlapped));
+ readCompletionOverlapped.hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
+ if (!readCompletionOverlapped.hEvent)
+ q->setError(decodeSystemError());
+ else {
+ readCompletionNotifier->setHandle(readCompletionOverlapped.hEvent);
+ q->connect(readCompletionNotifier, SIGNAL(activated(HANDLE)), q, SLOT(_q_canCompleteRead()));
+ }
+
+ ::ZeroMemory(&writeCompletionOverlapped, sizeof(writeCompletionOverlapped));
+ writeCompletionOverlapped.hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
+ if (!writeCompletionOverlapped.hEvent)
+ q->setError(decodeSystemError());
+ else {
+ writeCompletionNotifier->setHandle(writeCompletionOverlapped.hEvent);
+ q->connect(writeCompletionNotifier, SIGNAL(activated(HANDLE)), q, SLOT(_q_canCompleteWrite()));
+ }
}
bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
@@ -256,7 +144,7 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
Q_Q(QSerialPort);
DWORD desiredAccess = 0;
- DWORD originalEventMask = EV_ERR;
+ originalEventMask = EV_ERR;
if (mode & QIODevice::ReadOnly) {
desiredAccess |= GENERIC_READ;
@@ -300,13 +188,27 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
if (!updateCommTimeouts())
return false;
- if (originalEventMask & EV_RXCHAR) {
- QWinEventNotifier *n = new ReadOverlappedCompletionNotifier(this, q);
- n->setEnabled(true);
+ if (mode & QIODevice::ReadOnly)
+ readCompletionNotifier->setEnabled(true);
+
+ if (mode & QIODevice::WriteOnly)
+ writeCompletionNotifier->setEnabled(true);
+
+ if (!::SetCommMask(descriptor, originalEventMask)) {
+ q->setError(decodeSystemError());
+ return false;
+ }
+
+ initializeOverlappedStructure(communicationOverlapped);
+ if (!::WaitCommEvent(descriptor, &triggeredEventMask, &communicationOverlapped)) {
+ const QSerialPort::SerialPortError error = decodeSystemError();
+ if (error != QSerialPort::NoError) {
+ q->setError(decodeSystemError());
+ return false;
+ }
}
- QWinEventNotifier *n = new CommOverlappedEventNotifier(this, originalEventMask, q);
- n->setEnabled(true);
+ communicationNotifier->setEnabled(true);
detectDefaultSettings();
return true;
@@ -319,11 +221,11 @@ void QSerialPortPrivate::close()
if (!::CancelIo(descriptor))
q->setError(decodeSystemError());
- qDeleteAll(notifiers);
- notifiers.clear();
+ readCompletionNotifier->setEnabled(false);
+ writeCompletionNotifier->setEnabled(false);
+ communicationNotifier->setEnabled(false);
readBuffer.clear();
- actualReadBufferSize = 0;
writeSequenceStarted = false;
writeBuffer.clear();
@@ -356,7 +258,7 @@ QSerialPort::PinoutSignals QSerialPortPrivate::pinoutSignals()
if (!::GetCommModemStatus(descriptor, &modemStat)) {
q->setError(decodeSystemError());
- return QSerialPort::UnknownSignal;
+ return QSerialPort::NoSignal;
}
QSerialPort::PinoutSignals ret = QSerialPort::NoSignal;
@@ -405,10 +307,8 @@ bool QSerialPortPrivate::flush()
bool QSerialPortPrivate::clear(QSerialPort::Directions directions)
{
DWORD flags = 0;
- if (directions & QSerialPort::Input) {
+ if (directions & QSerialPort::Input)
flags |= PURGE_RXABORT | PURGE_RXCLEAR;
- actualReadBufferSize = 0;
- }
if (directions & QSerialPort::Output) {
flags |= PURGE_TXABORT | PURGE_TXCLEAR;
actualWriteBufferSize = 0;
@@ -466,38 +366,6 @@ qint64 QSerialPortPrivate::systemOutputQueueSize ()
#ifndef Q_OS_WINCE
-qint64 QSerialPortPrivate::bytesAvailable() const
-{
- return actualReadBufferSize;
-}
-
-qint64 QSerialPortPrivate::readFromBuffer(char *data, qint64 maxSize)
-{
- if (actualReadBufferSize == 0)
- return 0;
-
- qint64 readSoFar = -1;
- if (maxSize == 1 && actualReadBufferSize > 0) {
- *data = readBuffer.getChar();
- actualReadBufferSize--;
- readSoFar = 1;
- } else {
- const qint64 bytesToRead = qMin(qint64(actualReadBufferSize), maxSize);
- readSoFar = 0;
- while (readSoFar < bytesToRead) {
- const char *ptr = readBuffer.readPointer();
- const int bytesToReadFromThisBlock = qMin(bytesToRead - readSoFar,
- qint64(readBuffer.nextDataBlockSize()));
- ::memcpy(data + readSoFar, ptr, bytesToReadFromThisBlock);
- readSoFar += bytesToReadFromThisBlock;
- readBuffer.free(bytesToReadFromThisBlock);
- actualReadBufferSize -= bytesToReadFromThisBlock;
- }
- }
-
- return readSoFar;
-}
-
qint64 QSerialPortPrivate::writeToBuffer(const char *data, qint64 maxSize)
{
char *ptr = writeBuffer.reserve(maxSize);
@@ -524,28 +392,28 @@ bool QSerialPortPrivate::waitForReadyRead(int msecs)
do {
bool timedOut = false;
- AbstractOverlappedEventNotifier *n = 0;
+ HANDLE triggeredEvent = 0;
- if (!waitAnyEvent(timeoutValue(msecs, stopWatch.elapsed()), &timedOut, &n) || !n) {
+ if (!waitAnyEvent(timeoutValue(msecs, stopWatch.elapsed()), &timedOut, &triggeredEvent) || !triggeredEvent) {
// This is occur timeout or another error
if (!timedOut)
q->setError(decodeSystemError());
return false;
}
- switch (n->type()) {
- case AbstractOverlappedEventNotifier::CommEvent:
- if (!n->processCompletionRoutine())
+ if (triggeredEvent == communicationOverlapped.hEvent) {
+ _q_canCompleteCommunication();
+ if (error != QSerialPort::NoError)
return false;
- break;
- case AbstractOverlappedEventNotifier::ReadCompletionEvent:
- return n->processCompletionRoutine();
- case AbstractOverlappedEventNotifier::WriteCompletionEvent:
- n->processCompletionRoutine();
- break;
- default: // newer called
+ } else if (triggeredEvent == readCompletionOverlapped.hEvent) {
+ _q_canCompleteRead();
+ return error == QSerialPort::NoError;
+ } else if (triggeredEvent == writeCompletionOverlapped.hEvent) {
+ _q_canCompleteWrite();
+ } else {
return false;
}
+
} while (msecs == -1 || timeoutValue(msecs, stopWatch.elapsed()) > 0);
return false;
@@ -563,25 +431,25 @@ bool QSerialPortPrivate::waitForBytesWritten(int msecs)
forever {
bool timedOut = false;
- AbstractOverlappedEventNotifier *n = 0;
+ HANDLE triggeredEvent = 0;
- if (!waitAnyEvent(timeoutValue(msecs, stopWatch.elapsed()), &timedOut, &n) || !n) {
+ if (!waitAnyEvent(timeoutValue(msecs, stopWatch.elapsed()), &timedOut, &triggeredEvent) || !triggeredEvent) {
if (!timedOut)
q->setError(decodeSystemError());
return false;
}
- switch (n->type()) {
- case AbstractOverlappedEventNotifier::CommEvent:
- // do nothing, jump to ReadCompletionEvent case
- case AbstractOverlappedEventNotifier::ReadCompletionEvent:
- n->processCompletionRoutine();
- break;
- case AbstractOverlappedEventNotifier::WriteCompletionEvent:
- return n->processCompletionRoutine();
- default: // newer called
+ if (triggeredEvent == communicationOverlapped.hEvent) {
+ _q_canCompleteRead();
+ } else if (triggeredEvent == readCompletionOverlapped.hEvent) {
+ _q_canCompleteRead();
+ } else if (triggeredEvent == writeCompletionOverlapped.hEvent) {
+ _q_canCompleteWrite();
+ return error == QSerialPort::NoError;
+ } else {
return false;
}
+
}
return false;
@@ -685,6 +553,75 @@ bool QSerialPortPrivate::setDataErrorPolicy(QSerialPort::DataErrorPolicy policy)
#ifndef Q_OS_WINCE
+void QSerialPortPrivate::_q_canCompleteCommunication()
+{
+ Q_Q(QSerialPort);
+
+ DWORD numberOfBytesTransferred = 0;
+
+ if (!::GetOverlappedResult(descriptor, &communicationOverlapped, &numberOfBytesTransferred, FALSE))
+ q->setError(decodeSystemError());
+
+ bool error = false;
+
+ // Check for unexpected event. This event triggered when pulled previously
+ // opened device from the system, when opened as for not to read and not to
+ // write options and so forth.
+ if (triggeredEventMask == 0)
+ error = true;
+
+ // Workaround for standard CDC ACM serial ports, for which triggered an
+ // unexpected event EV_TXEMPTY at data transmission.
+ if ((originalEventMask & triggeredEventMask) == 0) {
+ if ((triggeredEventMask & EV_TXEMPTY) == 0)
+ error = true;
+ }
+
+ // Start processing a caught error.
+ if (error || (EV_ERR & triggeredEventMask))
+ processIoErrors(error);
+
+ if (!error)
+ startAsyncRead();
+}
+
+void QSerialPortPrivate::_q_canCompleteRead()
+{
+ Q_Q(QSerialPort);
+
+ DWORD numberOfBytesTransferred = 0;
+ if (!::GetOverlappedResult(descriptor, &readCompletionOverlapped, &numberOfBytesTransferred, FALSE))
+ q->setError(decodeSystemError());
+
+ completeAsyncRead(numberOfBytesTransferred);
+
+ // start async read for possible remainder into driver queue
+ if ((numberOfBytesTransferred > 0) && (policy == QSerialPort::IgnorePolicy)) {
+ startAsyncRead();
+ } else { // driver queue is emplty, so startup wait comm event
+ initializeOverlappedStructure(communicationOverlapped);
+ if (!::WaitCommEvent(descriptor, &triggeredEventMask, &communicationOverlapped)) {
+ const QSerialPort::SerialPortError error = decodeSystemError();
+ if (error != QSerialPort::NoError) {
+ q->setError(decodeSystemError());
+ }
+ }
+ }
+}
+
+void QSerialPortPrivate::_q_canCompleteWrite()
+{
+ Q_Q(QSerialPort);
+
+ DWORD numberOfBytesTransferred = 0;
+ if (!::GetOverlappedResult(descriptor, &writeCompletionOverlapped, &numberOfBytesTransferred, FALSE)) {
+ numberOfBytesTransferred = 0;
+ q->setError(decodeSystemError());
+ }
+
+ completeAsyncWrite(numberOfBytesTransferred);
+}
+
bool QSerialPortPrivate::startAsyncRead()
{
Q_Q(QSerialPort);
@@ -700,15 +637,8 @@ bool QSerialPortPrivate::startAsyncRead()
}
}
- AbstractOverlappedEventNotifier *n = lookupReadCompletionNotifier();
- if (!n) {
- q->setError(QSerialPort::ResourceError);
- return false;
- }
-
- char *ptr = readBuffer.reserve(bytesToRead);
-
- if (::ReadFile(descriptor, ptr, bytesToRead, NULL, n->overlappedPointer()))
+ initializeOverlappedStructure(readCompletionOverlapped);
+ if (::ReadFile(descriptor, readChunkBuffer.data(), bytesToRead, NULL, &readCompletionOverlapped))
return true;
QSerialPort::SerialPortError error = decodeSystemError();
@@ -717,7 +647,6 @@ bool QSerialPortPrivate::startAsyncRead()
error = QSerialPort::ReadError;
q->setError(error);
- readBuffer.truncate(actualReadBufferSize);
return false;
}
@@ -740,15 +669,8 @@ bool QSerialPortPrivate::startAsyncWrite(int maxSize)
writeSequenceStarted = true;
- AbstractOverlappedEventNotifier *n = lookupFreeWriteCompletionNotifier();
- if (!n) {
- q->setError(QSerialPort::ResourceError);
- return false;
- }
-
- n->setEnabled(true);
-
- if (::WriteFile(descriptor, ptr, nextSize, NULL, n->overlappedPointer()))
+ initializeOverlappedStructure(writeCompletionOverlapped);
+ if (::WriteFile(descriptor, ptr, nextSize, NULL, &writeCompletionOverlapped))
return true;
QSerialPort::SerialPortError error = decodeSystemError();
@@ -800,11 +722,10 @@ void QSerialPortPrivate::completeAsyncRead(DWORD numberOfBytes)
{
Q_Q(QSerialPort);
- actualReadBufferSize += qint64(numberOfBytes);
- readBuffer.truncate(actualReadBufferSize);
-
if (numberOfBytes > 0) {
+ readBuffer.append(readChunkBuffer.left(numberOfBytes));
+
// Process emulate policy.
if ((policy != QSerialPort::IgnorePolicy) && parityErrorOccurred) {
@@ -854,39 +775,6 @@ void QSerialPortPrivate::completeAsyncWrite(DWORD numberOfBytes)
startAsyncWrite(WriteChunkSize);
}
-AbstractOverlappedEventNotifier *QSerialPortPrivate::lookupFreeWriteCompletionNotifier()
-{
- Q_Q(QSerialPort);
-
- // find first free not running write notifier
- foreach (AbstractOverlappedEventNotifier *n, notifiers) {
- if ((n->type() == AbstractOverlappedEventNotifier::WriteCompletionEvent)
- && !n->isEnabled()) {
- return n;
- }
- }
- // if all write notifiers in use, then create new write notifier
- return new WriteOverlappedCompletionNotifier(this, q);
-}
-
-AbstractOverlappedEventNotifier *QSerialPortPrivate::lookupCommEventNotifier()
-{
- foreach (AbstractOverlappedEventNotifier *n, notifiers) {
- if (n->type() == AbstractOverlappedEventNotifier::CommEvent)
- return n;
- }
- return 0;
-}
-
-AbstractOverlappedEventNotifier *QSerialPortPrivate::lookupReadCompletionNotifier()
-{
- foreach (AbstractOverlappedEventNotifier *n, notifiers) {
- if (n->type() == AbstractOverlappedEventNotifier::ReadCompletionEvent)
- return n;
- }
- return 0;
-}
-
bool QSerialPortPrivate::updateDcb()
{
Q_Q(QSerialPort);
@@ -932,7 +820,8 @@ void QSerialPortPrivate::detectDefaultSettings()
dataBits = QSerialPort::Data8;
break;
default:
- dataBits = QSerialPort::UnknownDataBits;
+ qWarning("%s: Unexpected data bits settings", Q_FUNC_INFO);
+ dataBits = QSerialPort::Data8;
break;
}
@@ -947,8 +836,10 @@ void QSerialPortPrivate::detectDefaultSettings()
parity = QSerialPort::EvenParity;
else if ((currentDcb.Parity == ODDPARITY) && currentDcb.fParity)
parity = QSerialPort::OddParity;
- else
- parity = QSerialPort::UnknownParity;
+ else {
+ qWarning("%s: Unexpected parity settings", Q_FUNC_INFO);
+ parity = QSerialPort::NoParity;
+ }
// Detect stopbits.
switch (currentDcb.StopBits) {
@@ -962,7 +853,8 @@ void QSerialPortPrivate::detectDefaultSettings()
stopBits = QSerialPort::TwoStop;
break;
default:
- stopBits = QSerialPort::UnknownStopBits;
+ qWarning("%s: Unexpected stop bits settings", Q_FUNC_INFO);
+ stopBits = QSerialPort::OneStop;
break;
}
@@ -976,8 +868,10 @@ void QSerialPortPrivate::detectDefaultSettings()
} else if (currentDcb.fOutxCtsFlow && (currentDcb.fRtsControl == RTS_CONTROL_HANDSHAKE)
&& !currentDcb.fInX && !currentDcb.fOutX) {
flow = QSerialPort::HardwareControl;
- } else
- flow = QSerialPort::UnknownFlowControl;
+ } else {
+ qWarning("%s: Unexpected flow control settings", Q_FUNC_INFO);
+ flow = QSerialPort::NoFlowControl;
+ }
}
QSerialPort::SerialPortError QSerialPortPrivate::decodeSystemError() const
@@ -1017,14 +911,17 @@ QSerialPort::SerialPortError QSerialPortPrivate::decodeSystemError() const
#ifndef Q_OS_WINCE
-bool QSerialPortPrivate::waitAnyEvent(int msecs, bool *timedOut,
- AbstractOverlappedEventNotifier **triggeredNotifier)
+bool QSerialPortPrivate::waitAnyEvent(int msecs, bool *timedOut, HANDLE *triggeredEvent)
{
Q_Q(QSerialPort);
Q_ASSERT(timedOut);
- QVector<HANDLE> handles = notifiers.keys().toVector();
+ QVector<HANDLE> handles = QVector<HANDLE>()
+ << communicationOverlapped.hEvent
+ << readCompletionOverlapped.hEvent
+ << writeCompletionOverlapped.hEvent;
+
DWORD waitResult = ::WaitForMultipleObjects(handles.count(),
handles.constData(),
FALSE, // wait any event
@@ -1038,8 +935,7 @@ bool QSerialPortPrivate::waitAnyEvent(int msecs, bool *timedOut,
if (waitResult >= DWORD(WAIT_OBJECT_0 + handles.count()))
return false;
- HANDLE h = handles.at(waitResult - WAIT_OBJECT_0);
- *triggeredNotifier = notifiers.value(h);
+ *triggeredEvent = handles.at(waitResult - WAIT_OBJECT_0);
return true;
}
@@ -1155,21 +1051,7 @@ qint32 QSerialPortPrivate::settingFromBaudRate(qint32 baudRate)
QList<qint32> QSerialPortPrivate::standardBaudRates()
{
- QList<qint32> ret;
- const QList<qint32> baudRatePairs = standardBaudRatePairList();
-
- foreach (qint32 baudRatePair, baudRatePairs) {
- ret.append(baudRatePair);
- }
-
- return ret;
-}
-
-void QSerialPortPrivate::setError(QSerialPort::SerialPortError serialPortError, const QString &errorString)
-{
- Q_Q(QSerialPort);
-
- q->setError(serialPortError, errorString);
+ return standardBaudRatePairList();
}
QSerialPort::Handle QSerialPort::handle() const
diff --git a/src/serialport/qserialport_win_p.h b/src/serialport/qserialport_win_p.h
index 414f026..059be87 100644
--- a/src/serialport/qserialport_win_p.h
+++ b/src/serialport/qserialport_win_p.h
@@ -57,10 +57,6 @@ QT_BEGIN_NAMESPACE
class QThread;
#endif
-#ifndef Q_OS_WINCE
-class AbstractOverlappedEventNotifier;
-#endif
-
class QSerialPortPrivate : public QSerialPortPrivateData
{
Q_DECLARE_PUBLIC(QSerialPort)
@@ -85,9 +81,6 @@ public:
qint64 systemInputQueueSize ();
qint64 systemOutputQueueSize ();
- qint64 bytesAvailable() const;
-
- qint64 readFromBuffer(char *data, qint64 maxSize);
qint64 writeToBuffer(const char *data, qint64 maxSize);
bool waitForReadyRead(int msec);
@@ -101,16 +94,16 @@ public:
bool setDataErrorPolicy(QSerialPort::DataErrorPolicy policy);
void processIoErrors(bool error);
- void setError(QSerialPort::SerialPortError error, const QString &errorString = QString());
QSerialPort::SerialPortError decodeSystemError() const;
#ifndef Q_OS_WINCE
+ void _q_canCompleteCommunication();
+ void _q_canCompleteRead();
+ void _q_canCompleteWrite();
+
bool startAsyncRead();
bool startAsyncWrite(int maxSize = INT_MAX);
void completeAsyncRead(DWORD numberOfBytes);
void completeAsyncWrite(DWORD numberOfBytes);
- AbstractOverlappedEventNotifier *lookupFreeWriteCompletionNotifier();
- AbstractOverlappedEventNotifier *lookupCommEventNotifier();
- AbstractOverlappedEventNotifier *lookupReadCompletionNotifier();
#else
bool notifyRead();
bool notifyWrite(int maxSize = INT_MAX);
@@ -132,12 +125,19 @@ public:
bool parityErrorOccurred;
#ifndef Q_OS_WINCE
- QHash<HANDLE, AbstractOverlappedEventNotifier *> notifiers;
- qint64 actualReadBufferSize;
+ QByteArray readChunkBuffer;
qint64 actualWriteBufferSize;
qint64 acyncWritePosition;
bool readyReadEmitted;
bool writeSequenceStarted;
+ QWinEventNotifier *communicationNotifier;
+ QWinEventNotifier *readCompletionNotifier;
+ QWinEventNotifier *writeCompletionNotifier;
+ OVERLAPPED communicationOverlapped;
+ OVERLAPPED readCompletionOverlapped;
+ OVERLAPPED writeCompletionOverlapped;
+ DWORD originalEventMask;
+ DWORD triggeredEventMask;
#else
QThread *eventNotifier;
QMutex settingsChangeMutex;
@@ -150,8 +150,7 @@ private:
void detectDefaultSettings();
#ifndef Q_OS_WINCE
- bool waitAnyEvent(int msecs, bool *timedOut,
- AbstractOverlappedEventNotifier **triggeredNotifier);
+ bool waitAnyEvent(int msecs, bool *timedOut, HANDLE *triggeredEvent);
#else
bool waitForReadOrWrite(bool *selectForRead, bool *selectForWrite,
bool checkRead, bool checkWrite,
diff --git a/src/serialport/qserialport_wince.cpp b/src/serialport/qserialport_wince.cpp
index 21bea1e..2983071 100644
--- a/src/serialport/qserialport_wince.cpp
+++ b/src/serialport/qserialport_wince.cpp
@@ -253,35 +253,6 @@ bool QSerialPortPrivate::clear(QSerialPort::Directions directions)
return ::PurgeComm(descriptor, flags);
}
-qint64 QSerialPortPrivate::bytesAvailable() const
-{
- return readBuffer.size();
-}
-
-qint64 QSerialPortPrivate::readFromBuffer(char *data, qint64 maxSize)
-{
- if (readBuffer.isEmpty())
- return 0;
-
- if (maxSize == 1) {
- *data = readBuffer.getChar();
- return 1;
- }
-
- const qint64 bytesToRead = qMin(qint64(readBuffer.size()), maxSize);
- qint64 readSoFar = 0;
- while (readSoFar < bytesToRead) {
- const char *ptr = readBuffer.readPointer();
- const int bytesToReadFromThisBlock = qMin(int(bytesToRead - readSoFar),
- readBuffer.nextDataBlockSize());
- ::memcpy(data + readSoFar, ptr, bytesToReadFromThisBlock);
- readSoFar += bytesToReadFromThisBlock;
- readBuffer.free(bytesToReadFromThisBlock);
- }
-
- return readSoFar;
-}
-
qint64 QSerialPortPrivate::writeToBuffer(const char *data, qint64 maxSize)
{
char *ptr = writeBuffer.reserve(maxSize);
diff --git a/src/serialport/qserialportglobal.h b/src/serialport/qserialportglobal.h
index 09ba0df..d17ce6b 100644
--- a/src/serialport/qserialportglobal.h
+++ b/src/serialport/qserialportglobal.h
@@ -59,6 +59,10 @@ QT_BEGIN_NAMESPACE
#endif
// These macros have been available only since Qt 5.0
+#ifndef QT_DEPRECATED_SINCE
+#define QT_DEPRECATED_SINCE(major, minor) 1
+#endif
+
#ifndef Q_DECL_OVERRIDE
#define Q_DECL_OVERRIDE
#endif
diff --git a/src/serialport/qserialportinfo.cpp b/src/serialport/qserialportinfo.cpp
index 78ef694..5172e60 100644
--- a/src/serialport/qserialportinfo.cpp
+++ b/src/serialport/qserialportinfo.cpp
@@ -258,6 +258,7 @@ bool QSerialPortInfo::hasProductIdentifier() const
/*!
\fn bool QSerialPortInfo::isValid() const
+ \obsolete
Returns true if serial port is present on system;
otherwise returns false.
diff --git a/src/serialport/qserialportinfo.h b/src/serialport/qserialportinfo.h
index 51f3b10..8320fc5 100644
--- a/src/serialport/qserialportinfo.h
+++ b/src/serialport/qserialportinfo.h
@@ -80,12 +80,17 @@ public:
bool isNull() const;
bool isBusy() const;
- bool isValid() const;
+#if QT_DEPRECATED_SINCE(5, 2)
+ QT_DEPRECATED bool isValid() const;
+#endif
static QList<qint32> standardBaudRates();
static QList<QSerialPortInfo> availablePorts();
private:
+ friend QList<QSerialPortInfo> availablePortsByUdev();
+ friend QList<QSerialPortInfo> availablePortsBySysfs();
+ friend QList<QSerialPortInfo> availablePortsByFiltersOfDevices();
QScopedPointer<QSerialPortInfoPrivate, QSerialPortInfoPrivateDeleter> d_ptr;
};
diff --git a/src/serialport/qserialportinfo_mac.cpp b/src/serialport/qserialportinfo_mac.cpp
index af57598..c69a4a3 100644
--- a/src/serialport/qserialportinfo_mac.cpp
+++ b/src/serialport/qserialportinfo_mac.cpp
@@ -97,7 +97,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
io_registry_entry_t entry = service;
- // Find MacOSX-specific properties names.
do {
if (!device) {
@@ -184,7 +183,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
}
- // If all matching properties is found, then force break loop.
if (matchingPropertiesCounter == propertyCount)
break;
@@ -194,7 +192,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
(void) ::IOObjectRelease(entry);
- // Convert from MacOSX-specific properties to Qt4-specific.
if (matchingPropertiesCounter > 0) {
QSerialPortInfo serialPortInfo;
diff --git a/src/serialport/qserialportinfo_symbian.cpp b/src/serialport/qserialportinfo_symbian.cpp
index 5512048..cae00e9 100644
--- a/src/serialport/qserialportinfo_symbian.cpp
+++ b/src/serialport/qserialportinfo_symbian.cpp
@@ -46,7 +46,6 @@
#include "qserialport_symbian_p.h"
#include <e32base.h>
-//#include <e32test.h>
#include <c32comm.h>
#include <f32file.h>
@@ -54,23 +53,19 @@
QT_BEGIN_NAMESPACE
-// Physical device driver.
#ifdef __WINS__
_LIT(KPddName, "ECDRV");
-#else // defined (__EPOC32__)
+#else
_LIT(KPddName, "EUART");
#endif
-// Logical native device driver.
_LIT(KLddName,"ECOMM");
-// Modules names.
_LIT(KRS232ModuleName , "ECUART");
_LIT(KBluetoothModuleName , "BTCOMM");
_LIT(KInfraRedModuleName , "IRCOMM");
_LIT(KACMModuleName, "ECACM");
-// Return false on error load.
static bool loadDevices()
{
TInt r = KErrNone;
@@ -84,16 +79,16 @@ static bool loadDevices()
r = User::LoadPhysicalDevice(KPddName);
if (r != KErrNone && r != KErrAlreadyExists)
- return false; //User::Leave(r);
+ return false;
r = User::LoadLogicalDevice(KLddName);
if (r != KErrNone && r != KErrAlreadyExists)
- return false; //User::Leave(r);
+ return false;
#ifndef __WINS__
r = StartC32();
if (r != KErrNone && r != KErrAlreadyExists)
- return false; //User::Leave(r);
+ return false;
#endif
return true;
@@ -109,14 +104,13 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
RCommServ server;
TInt r = server.Connect();
if (r != KErrNone)
- return serialPortInfoList; //User::LeaveIfError(r);
+ return serialPortInfoList;
- TSerialInfo nativeSerialInfo; // Native Symbian OS port info class.
+ TSerialInfo nativeSerialInfo;
QString s("%1::%2");
// FIXME: Get info about RS232 ports.
r = server.LoadCommModule(KRS232ModuleName);
- //User::LeaveIfError(r);
if (r == KErrNone) {
r = server.GetPortInfo(KRS232ModuleName, nativeSerialInfo);
if (r == KErrNone) {
@@ -138,7 +132,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
// FIXME: Get info about Bluetooth ports.
r = server.LoadCommModule(KBluetoothModuleName);
- //User::LeaveIfError(r);
if (r == KErrNone) {
r = server.GetPortInfo(KBluetoothModuleName, nativeSerialInfo);
if (r == KErrNone) {
@@ -160,7 +153,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
// FIXME: Get info about InfraRed ports.
r = server.LoadCommModule(KInfraRedModuleName);
- //User::LeaveIfError(r);
if (r == KErrNone) {
r = server.GetPortInfo(KInfraRedModuleName, nativeSerialInfo);
if (r == KErrNone) {
@@ -182,7 +174,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
// FIXME: Get info about ACM ports.
r = server.LoadCommModule(KACMModuleName);
- //User::LeaveIfError(r);
if (r == KErrNone) {
r = server.GetPortInfo(KACMModuleName, nativeSerialInfo);
if (r == KErrNone) {
diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp
index 9b3bf94..4433a4e 100644
--- a/src/serialport/qserialportinfo_unix.cpp
+++ b/src/serialport/qserialportinfo_unix.cpp
@@ -47,29 +47,23 @@
#include <QtCore/qlockfile.h>
#include <QtCore/qfile.h>
+#include <QtCore/qdir.h>
#ifndef Q_OS_MAC
-#if defined(LINK_LIBUDEV) || defined(LOAD_LIBUDEV)
#include "qtudev_p.h"
-#else
-#include <QtCore/qdir.h>
-#include <QtCore/qstringlist.h>
-#endif
-#endif // Q_OS_MAC
+#endif
QT_BEGIN_NAMESPACE
#ifndef Q_OS_MAC
-#if !defined(LINK_LIBUDEV) && !defined(LOAD_LIBUDEV)
-
-static inline const QStringList& filtersOfDevices()
+static QStringList filteredDeviceFilePaths()
{
static const QStringList deviceFileNameFilterList = QStringList()
-# ifdef Q_OS_LINUX
+#ifdef Q_OS_LINUX
<< QStringLiteral("ttyS*") // Standard UART 8250 and etc.
<< QStringLiteral("ttyO*") // OMAP UART 8250 and etc.
<< QStringLiteral("ttyUSB*") // Usb/serial converters PL2303 and etc.
@@ -80,22 +74,17 @@ static inline const QStringList& filtersOfDevices()
<< QStringLiteral("ttyAMA*") // AMBA serial device for embedded platform on ARM (i.e. Raspberry Pi).
<< QStringLiteral("rfcomm*") // Bluetooth serial device.
<< QStringLiteral("ircomm*"); // IrDA serial device.
-# elif defined (Q_OS_FREEBSD)
+#elif defined (Q_OS_FREEBSD)
<< QStringLiteral("cu*");
-# else
- ; // Here for other *nix OS.
-# endif
-
- return deviceFileNameFilterList;
-}
+#else
+ ;
+#endif
-static QStringList filteredDeviceFilePaths()
-{
QStringList result;
QDir deviceDir(QStringLiteral("/dev"));
if (deviceDir.exists()) {
- deviceDir.setNameFilters(filtersOfDevices());
+ deviceDir.setNameFilters(deviceFileNameFilterList);
deviceDir.setFilter(QDir::Files | QDir::System | QDir::NoSymLinks);
QStringList deviceFilePaths;
foreach (const QFileInfo &deviceFileInfo, deviceDir.entryInfoList()) {
@@ -110,13 +99,23 @@ static QStringList filteredDeviceFilePaths()
return result;
}
-QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
+QList<QSerialPortInfo> availablePortsByFiltersOfDevices()
{
QList<QSerialPortInfo> serialPortInfoList;
-#ifndef Q_OS_LINUX
- static const bool sysfsEnabled = false;
-#else
+ foreach (const QString &deviceFilePath, filteredDeviceFilePaths()) {
+ QSerialPortInfo serialPortInfo;
+ serialPortInfo.d_ptr->device = deviceFilePath;
+ serialPortInfo.d_ptr->portName = QSerialPortPrivate::portNameFromSystemLocation(deviceFilePath);
+ serialPortInfoList.append(serialPortInfo);
+ }
+
+ return serialPortInfoList;
+}
+
+QList<QSerialPortInfo> availablePortsBySysfs()
+{
+ QList<QSerialPortInfo> serialPortInfoList;
QDir ttySysClassDir(QStringLiteral("/sys/class/tty"));
const bool sysfsEnabled = ttySysClassDir.exists() && ttySysClassDir.isReadable();
@@ -131,16 +130,12 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
if (lastIndexOfSlash == -1)
continue;
- bool canAppendToList = true;
QSerialPortInfo serialPortInfo;
if (targetPath.contains(QStringLiteral("pnp"))) {
- // TODO: Implement me.
+ // TODO: Obtain more information
} else if (targetPath.contains(QStringLiteral("platform"))) {
- // Platform 'pseudo' bus for legacy device.
- // Skip this devices because this type of subsystem does
- // not include a real physical serial device.
- canAppendToList = false;
+ continue;
} else if (targetPath.contains(QStringLiteral("usb"))) {
QDir targetDir(targetPath);
@@ -185,26 +180,14 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
}
} while (targetDir.cdUp());
+ } else if (targetPath.contains(QStringLiteral("pci"))) {
+ // TODO: Obtain more information about the device
} else {
- // unknown types of devices
- canAppendToList = false;
- }
-
- if (canAppendToList) {
- serialPortInfo.d_ptr->portName = targetPath.mid(lastIndexOfSlash + 1);
- serialPortInfo.d_ptr->device = QSerialPortPrivate::portNameToSystemLocation(serialPortInfo.d_ptr->portName);
- serialPortInfoList.append(serialPortInfo);
+ continue;
}
- }
- }
-#endif
-
- if (!sysfsEnabled) {
- foreach (const QString &deviceFilePath, filteredDeviceFilePaths()) {
- QSerialPortInfo serialPortInfo;
- serialPortInfo.d_ptr->device = deviceFilePath;
- serialPortInfo.d_ptr->portName = QSerialPortPrivate::portNameFromSystemLocation(deviceFilePath);
+ serialPortInfo.d_ptr->portName = targetPath.mid(lastIndexOfSlash + 1);
+ serialPortInfo.d_ptr->device = QSerialPortPrivate::portNameToSystemLocation(serialPortInfo.d_ptr->portName);
serialPortInfoList.append(serialPortInfo);
}
}
@@ -212,18 +195,15 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
return serialPortInfoList;
}
-#else
-
-QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
+QList<QSerialPortInfo> availablePortsByUdev()
{
-#ifdef LOAD_LIBUDEV
+#ifndef LINK_LIBUDEV
static bool symbolsResolved = resolveSymbols();
if (!symbolsResolved)
return QList<QSerialPortInfo>();
#endif
QList<QSerialPortInfo> serialPortInfoList;
- // White list for devices without a parent
static const QString rfcommDeviceName(QStringLiteral("rfcomm"));
struct ::udev *udev = ::udev_new();
@@ -256,15 +236,12 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
struct ::udev_device *parentdev = ::udev_device_get_parent(dev);
- bool canAppendToList = true;
-
if (parentdev) {
QString subsys = QString::fromLatin1(::udev_device_get_subsystem(parentdev));
if (subsys == QStringLiteral("usb-serial")
- || subsys == QStringLiteral("usb")) { // USB bus type
- // Append this devices and try get additional information about them.
+ || subsys == QStringLiteral("usb")) {
serialPortInfo.d_ptr->description = QString::fromLatin1(::udev_device_get_property_value(dev,
"ID_MODEL")).replace(QLatin1Char('_'), QLatin1Char(' '));
serialPortInfo.d_ptr->manufacturer = QString::fromLatin1(::udev_device_get_property_value(dev,
@@ -278,39 +255,28 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
QString::fromLatin1(::udev_device_get_property_value(dev,
"ID_MODEL_ID")).toInt(&serialPortInfo.d_ptr->hasProductIdentifier, 16);
- } else if (subsys == QStringLiteral("pnp")) { // PNP bus type
- // Append this device.
- // FIXME: How to get additional information about serial devices
- // with this subsystem?
- } else if (subsys == QStringLiteral("platform")) { // Platform 'pseudo' bus for legacy device.
- // Skip this devices because this type of subsystem does
- // not include a real physical serial device.
- canAppendToList = false;
- } else { // Others types of subsystems.
- // Append this devices because we believe that any other types of
- // subsystems provide a real serial devices. For example, for devices
- // such as ttyGSx, its driver provide an empty subsystem name, but it
- // devices is a real physical serial devices.
- // FIXME: How to get additional information about serial devices
- // with this subsystems?
+ } else if (subsys == QStringLiteral("pnp")) {
+ // TODO: Obtain more information
+ } else if (subsys == QStringLiteral("platform")) {
+ continue;
+ } else if (subsys == QStringLiteral("pci")) {
+ // TODO: Obtain more information about the device
+ } else {
+ // FIXME: Obtain more information
}
- } else { // Devices without a parent
- if (serialPortInfo.d_ptr->portName.startsWith(rfcommDeviceName)) { // Bluetooth device
+ } else {
+ if (serialPortInfo.d_ptr->portName.startsWith(rfcommDeviceName)) {
bool ok;
- // Check for an unsigned decimal integer at the end of the device name: "rfcomm0", "rfcomm15"
- // devices with negative and invalid numbers in the name are rejected
int portNumber = serialPortInfo.d_ptr->portName.mid(rfcommDeviceName.length()).toInt(&ok);
- if (!ok || (portNumber < 0) || (portNumber > 255)) {
- canAppendToList = false;
- }
+ if (!ok || (portNumber < 0) || (portNumber > 255))
+ continue;
} else {
- canAppendToList = false;
+ continue;
}
}
- if (canAppendToList)
- serialPortInfoList.append(serialPortInfo);
+ serialPortInfoList.append(serialPortInfo);
::udev_device_unref(dev);
}
@@ -326,11 +292,29 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
return serialPortInfoList;
}
+QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
+{
+ QList<QSerialPortInfo> serialPortInfoList;
+ // TODO: Remove this condition once the udev runtime symbol resolution crash
+ // is fixed for Qt 4.
+#if defined(LINK_LIBUDEV) || (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
+ serialPortInfoList = availablePortsByUdev();
#endif
-#endif // Q_OS_MAC
+#ifdef Q_OS_LINUX
+ if (serialPortInfoList.isEmpty())
+ serialPortInfoList = availablePortsBySysfs();
+ else
+ return serialPortInfoList;
+#endif
-// common part
+ if (serialPortInfoList.isEmpty())
+ serialPortInfoList = availablePortsByFiltersOfDevices();
+
+ return serialPortInfoList;
+}
+
+#endif
QList<qint32> QSerialPortInfo::standardBaudRates()
{
diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp
index 7eec46a..51f529e 100644
--- a/src/serialport/qserialportinfo_win.cpp
+++ b/src/serialport/qserialportinfo_win.cpp
@@ -52,24 +52,28 @@
#include <QtCore/qvariant.h>
#include <QtCore/qstringlist.h>
+#include <QtCore/quuid.h>
+#include <QtCore/qpair.h>
QT_BEGIN_NAMESPACE
#ifndef Q_OS_WINCE
-static const GUID guidsArray[] =
+typedef QPair<QUuid, DWORD> GuidFlagsPair;
+
+static inline const QList<GuidFlagsPair>& guidFlagsPairs()
{
- // Windows Ports Class GUID
- { 0x4D36E978, 0xE325, 0x11CE, { 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 } },
- // Virtual Ports Class GUID (i.e. com0com and etc)
- { 0xDF799E12, 0x3C56, 0x421B, { 0xB2, 0x98, 0xB6, 0xD3, 0x64, 0x2B, 0xC8, 0x78 } },
- // Windows Modems Class GUID
- { 0x4D36E96D, 0xE325, 0x11CE, { 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 } },
- // Eltima Virtual Serial Port Driver v4 GUID
- { 0xCC0EF009, 0xB820, 0x42F4, { 0x95, 0xA9, 0x9B, 0xFA, 0x6A, 0x5A, 0xB7, 0xAB } },
- // Advanced Virtual COM Port GUID
- { 0x9341CD95, 0x4371, 0x4A37, { 0xA5, 0xAF, 0xFD, 0xB0, 0xA9, 0xD1, 0x96, 0x31 } },
-};
+ static const QList<GuidFlagsPair> guidFlagsPairList = QList<GuidFlagsPair>()
+ // Standard Setup Ports Class GUID
+ << qMakePair(QUuid(0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), DWORD(DIGCF_PRESENT))
+ // Standard Setup Modems Class GUID
+ << qMakePair(QUuid(0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), DWORD(DIGCF_PRESENT))
+ // Standard Serial Port Device Interface Class GUID
+ << qMakePair(QUuid(0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE))
+ // Standard Modem Device Interface Class GUID
+ << qMakePair(QUuid(0x2C7089AA, 0x2E0E, 0x11D1, 0xB1, 0x14, 0x00, 0xC0, 0x4F, 0xC2, 0xAA, 0xE4), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));
+ return guidFlagsPairList;
+}
static QVariant deviceRegistryProperty(HDEVINFO deviceInfoSet,
PSP_DEVINFO_DATA deviceInfoData,
@@ -157,6 +161,23 @@ static QString devicePortName(HDEVINFO deviceInfoSet, PSP_DEVINFO_DATA deviceInf
return QString::fromWCharArray(((const wchar_t *)data.constData()));
}
+class SerialPortNameEqualFunctor
+{
+public:
+ explicit SerialPortNameEqualFunctor(const QString &serialPortName)
+ : m_serialPortName(serialPortName)
+ {
+ }
+
+ bool operator() (const QSerialPortInfo &serialPortInfo) const
+ {
+ return serialPortInfo.portName() == m_serialPortName;
+ }
+
+private:
+ const QString &m_serialPortName;
+};
+
QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
{
static const QString usbVendorIdentifierPrefix(QStringLiteral("VID_"));
@@ -168,10 +189,9 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
static const int productIdentifierSize = 4;
QList<QSerialPortInfo> serialPortInfoList;
- static const int guidCount = sizeof(guidsArray)/sizeof(guidsArray[0]);
- for (int i = 0; i < guidCount; ++i) {
- const HDEVINFO deviceInfoSet = ::SetupDiGetClassDevs(&guidsArray[i], NULL, 0, DIGCF_PRESENT);
+ foreach (const GuidFlagsPair &uniquePair, guidFlagsPairs()) {
+ const HDEVINFO deviceInfoSet = ::SetupDiGetClassDevs(reinterpret_cast<const GUID *>(&uniquePair.first), NULL, 0, uniquePair.second);
if (deviceInfoSet == INVALID_HANDLE_VALUE)
return serialPortInfoList;
@@ -187,6 +207,11 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
if (s.isEmpty() || s.contains(QStringLiteral("LPT")))
continue;
+ if (std::find_if(serialPortInfoList.begin(), serialPortInfoList.end(),
+ SerialPortNameEqualFunctor(s)) != serialPortInfoList.end()) {
+ continue;
+ }
+
serialPortInfo.d_ptr->portName = s;
serialPortInfo.d_ptr->device = QSerialPortPrivate::portNameToSystemLocation(s);
serialPortInfo.d_ptr->description =
@@ -227,8 +252,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
#endif
-// common part
-
QList<qint32> QSerialPortInfo::standardBaudRates()
{
return QSerialPortPrivate::standardBaudRates();
diff --git a/src/serialport/qserialportinfo_wince.cpp b/src/serialport/qserialportinfo_wince.cpp
index 0d0fd0d..27ecb28 100644
--- a/src/serialport/qserialportinfo_wince.cpp
+++ b/src/serialport/qserialportinfo_wince.cpp
@@ -119,9 +119,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
serialPortInfo.d_ptr->description = findDescription(HKEY_LOCAL_MACHINE,
QString::fromWCharArray(di.szDeviceKey));
- // Get manufacturer, vendor identifier, product identifier are not
- // possible.
-
serialPortInfoList.append(serialPortInfo);
} while (::FindNextDevice(hSearch, &di));
diff --git a/src/serialport/qtudev_p.h b/src/serialport/qtudev_p.h
index 457c3f0..1187165 100644
--- a/src/serialport/qtudev_p.h
+++ b/src/serialport/qtudev_p.h
@@ -47,7 +47,7 @@ extern "C"
{
#include <libudev.h>
}
-#elif defined(LOAD_LIBUDEV)
+#else
#include <QtCore/qlibrary.h>
#include <QtCore/qstring.h>
#include <QtCore/qdebug.h>
diff --git a/src/serialport/serialport-lib.pri b/src/serialport/serialport-lib.pri
index 7ad55f8..4c7e732 100644
--- a/src/serialport/serialport-lib.pri
+++ b/src/serialport/serialport-lib.pri
@@ -1,6 +1,6 @@
INCLUDEPATH += $$PWD
-!contains(DEFINES, LOAD_LIBUDEV): unix {
+unix {
greaterThan(QT_MAJOR_VERSION, 4) {
contains(QT_CONFIG, libudev) {
DEFINES += LINK_LIBUDEV
diff --git a/tests/auto/bic/data/QtSerialPort.5.1.0.linux-gcc-ia32.txt b/tests/auto/bic/data/QtSerialPort.5.1.0.linux-gcc-ia32.txt
new file mode 100644
index 0000000..3e7ced6
--- /dev/null
+++ b/tests/auto/bic/data/QtSerialPort.5.1.0.linux-gcc-ia32.txt
@@ -0,0 +1,3520 @@
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0xb7212620) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0xb7212658) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0xb5f466c8) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0xb5f46700) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0xb7143a50) 0 empty
+ std::input_iterator_tag (0xb5f46738) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0xb7143a8c) 0 empty
+ std::forward_iterator_tag (0xb7143ac8) 0 empty
+ std::input_iterator_tag (0xb5f46770) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0xb7143b04) 0 empty
+ std::bidirectional_iterator_tag (0xb7143b40) 0 empty
+ std::forward_iterator_tag (0xb7143b7c) 0 empty
+ std::input_iterator_tag (0xb5f467a8) 0 empty
+
+Class wait
+ size=4 align=4
+ base size=4 base align=4
+wait (0xb5faadc8) 0
+
+Class __locale_struct
+ size=116 align=4
+ base size=116 base align=4
+__locale_struct (0xb5faaf18) 0
+
+Class timespec
+ size=8 align=4
+ base size=8 base align=4
+timespec (0xb5faafc0) 0
+
+Class timeval
+ size=8 align=4
+ base size=8 base align=4
+timeval (0xb5faaa48) 0
+
+Class __pthread_internal_slist
+ size=4 align=4
+ base size=4 base align=4
+__pthread_internal_slist (0xb5ff3070) 0
+
+Class random_data
+ size=28 align=4
+ base size=28 base align=4
+random_data (0xb5ff3380) 0
+
+Class drand48_data
+ size=24 align=4
+ base size=24 base align=4
+drand48_data (0xb5ff33b8) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTISt9exception)
+8 (int (*)(...))std::exception::~exception
+12 (int (*)(...))std::exception::~exception
+16 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=4 align=4
+ base size=4 base align=4
+std::exception (0xb5ff3af0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 8u)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTISt13bad_exception)
+8 (int (*)(...))std::bad_exception::~bad_exception
+12 (int (*)(...))std::bad_exception::~bad_exception
+16 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=4 align=4
+ base size=4 base align=4
+std::bad_exception (0xb7143d98) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 8u)
+ std::exception (0xb5ff3d20) 0 nearly-empty
+ primary-for std::bad_exception (0xb7143d98)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTISt9bad_alloc)
+8 (int (*)(...))std::bad_alloc::~bad_alloc
+12 (int (*)(...))std::bad_alloc::~bad_alloc
+16 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=4 align=4
+ base size=4 base align=4
+std::bad_alloc (0xb7143dd4) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 8u)
+ std::exception (0xb5ff3f50) 0 nearly-empty
+ primary-for std::bad_alloc (0xb7143dd4)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0xb5e750e0) 0 empty
+
+Class qIsNull(double)::U
+ size=8 align=4
+ base size=8 base align=4
+qIsNull(double)::U (0xb5d568f8) 0
+
+Class qIsNull(float)::U
+ size=4 align=4
+ base size=4 base align=4
+qIsNull(float)::U (0xb5d569a0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0xb5ef8564) 0
+ QBasicAtomicInteger<int> (0xb5e039a0) 0
+
+Class QMessageLogContext
+ size=20 align=4
+ base size=20 base align=4
+QMessageLogContext (0xb5e1c578) 0
+
+Class QMessageLogger
+ size=20 align=4
+ base size=20 base align=4
+QMessageLogger (0xb5e1cd58) 0
+
+Class QtPrivate::big_
+ size=2 align=1
+ base size=2 base align=1
+QtPrivate::big_ (0xb5c552a0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0xb5ca1c08) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0xb5ca1f88) 0
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0xb5cab7e0) 0 empty
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0xb5bff268) 0 empty
+
+Class QGenericArgument
+ size=8 align=4
+ base size=8 base align=4
+QGenericArgument (0xb5a3ec08) 0
+
+Class QGenericReturnArgument
+ size=8 align=4
+ base size=8 base align=4
+QGenericReturnArgument (0xb5b9e294) 0
+ QGenericArgument (0xb5a79000) 0
+
+Class QMetaObject
+ size=24 align=4
+ base size=24 base align=4
+QMetaObject (0xb5a793f0) 0
+
+Class QMetaObject::Connection
+ size=4 align=4
+ base size=4 base align=4
+QMetaObject::Connection (0xb5a8c540) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0xb5a8cee0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0xb5a98310) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0xb5ade818) 0
+
+Class QArrayData
+ size=16 align=4
+ base size=16 base align=4
+QArrayData (0xb5ae9268) 0
+
+Class QByteArrayDataPtr
+ size=4 align=4
+ base size=4 base align=4
+QByteArrayDataPtr (0xb5b2c1f8) 0
+
+Class QByteArray
+ size=4 align=4
+ base size=4 base align=4
+QByteArray (0xb5b2c230) 0
+
+Class QByteRef
+ size=8 align=4
+ base size=8 base align=4
+QByteRef (0xb596a9d8) 0
+
+Class lconv
+ size=56 align=4
+ base size=56 base align=4
+lconv (0xb59e3ee0) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+8 (int (*)(...))__cxxabiv1::__forced_unwind::~__forced_unwind
+12 (int (*)(...))__cxxabiv1::__forced_unwind::~__forced_unwind
+16 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=4 align=4
+ base size=4 base align=4
+__cxxabiv1::__forced_unwind (0xb59e3f88) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 8u)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0xb585df18) 0
+
+Class __sched_param
+ size=4 align=4
+ base size=4 base align=4
+__sched_param (0xb585df50) 0
+
+Class timex
+ size=128 align=4
+ base size=128 base align=4
+timex (0xb585dfc0) 0
+
+Class tm
+ size=44 align=4
+ base size=44 base align=4
+tm (0xb5884000) 0
+
+Class itimerspec
+ size=16 align=4
+ base size=16 base align=4
+itimerspec (0xb5884070) 0
+
+Class _pthread_cleanup_buffer
+ size=16 align=4
+ base size=16 base align=4
+_pthread_cleanup_buffer (0xb58840a8) 0
+
+Class __pthread_cleanup_frame
+ size=16 align=4
+ base size=16 base align=4
+__pthread_cleanup_frame (0xb5884150) 0
+
+Class __pthread_cleanup_class
+ size=16 align=4
+ base size=16 base align=4
+__pthread_cleanup_class (0xb5884188) 0
+
+Class QLatin1String
+ size=8 align=4
+ base size=8 base align=4
+QLatin1String (0xb578d8f8) 0
+
+Class QStringDataPtr
+ size=4 align=4
+ base size=4 base align=4
+QStringDataPtr (0xb5633380) 0
+
+Class QString::Null
+ size=1 align=1
+ base size=0 base align=1
+QString::Null (0xb567a8f8) 0 empty
+
+Class QString
+ size=4 align=4
+ base size=4 base align=4
+QString (0xb56333b8) 0
+
+Class QCharRef
+ size=8 align=4
+ base size=8 base align=4
+QCharRef (0xb56ebaf0) 0
+
+Class QStringRef
+ size=12 align=4
+ base size=12 base align=4
+QStringRef (0xb556f9d8) 0
+
+Class std::locale
+ size=4 align=4
+ base size=4 base align=4
+std::locale (0xb55b8c40) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTINSt6locale5facetE)
+8 (int (*)(...))std::locale::facet::~facet
+12 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=8 align=4
+ base size=8 base align=4
+std::locale::facet (0xb55e6f88) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 8u)
+
+Class std::locale::id
+ size=4 align=4
+ base size=4 base align=4
+std::locale::id (0xb55f1658) 0
+
+Class std::locale::_Impl
+ size=20 align=4
+ base size=20 base align=4
+std::locale::_Impl (0xb55f1968) 0
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureE: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTINSt8ios_base7failureE)
+8 (int (*)(...))std::ios_base::failure::~failure
+12 (int (*)(...))std::ios_base::failure::~failure
+16 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=8 align=4
+ base size=8 base align=4
+std::ios_base::failure (0xb5696438) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureE) + 8u)
+ std::exception (0xb560a118) 0 nearly-empty
+ primary-for std::ios_base::failure (0xb5696438)
+
+Class std::ios_base::_Callback_list
+ size=16 align=4
+ base size=16 base align=4
+std::ios_base::_Callback_list (0xb542ff88) 0
+
+Class std::ios_base::_Words
+ size=8 align=4
+ base size=8 base align=4
+std::ios_base::_Words (0xb54334d0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0xb5433850) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTISt8ios_base)
+8 (int (*)(...))std::ios_base::~ios_base
+12 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=112 align=4
+ base size=112 base align=4
+std::ios_base (0xb560afc0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 8u)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0xb5454bd0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0xb5502e70) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2u entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 12u)
+4 ((& std::basic_ostream<char>::_ZTVSo) + 32u)
+
+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) + 12u)
+4 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 32u)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2u entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 12u)
+4 ((& std::basic_istream<char>::_ZTVSi) + 32u)
+
+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) + 12u)
+4 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 32u)
+
+Construction vtable for std::basic_istream<char> (0xb5696fb4 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10u entries
+0 12u
+4 (int (*)(...))0
+8 (int (*)(...))(& _ZTISi)
+12 (int (*)(...))std::basic_istream<_CharT, _Traits>::~basic_istream [with _CharT = char, _Traits = std::char_traits<char>]
+16 (int (*)(...))std::basic_istream<_CharT, _Traits>::~basic_istream [with _CharT = char, _Traits = std::char_traits<char>]
+20 4294967284u
+24 (int (*)(...))-0x0000000000000000c
+28 (int (*)(...))(& _ZTISi)
+32 (int (*)(...))std::basic_istream<char>::_ZTv0_n12_NSiD1Ev
+36 (int (*)(...))std::basic_istream<char>::_ZTv0_n12_NSiD0Ev
+
+Construction vtable for std::basic_ostream<char> (0xb52e603c instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd8_So: 10u entries
+0 4u
+4 (int (*)(...))0
+8 (int (*)(...))(& _ZTISo)
+12 (int (*)(...))std::basic_ostream<_CharT, _Traits>::~basic_ostream [with _CharT = char, _Traits = std::char_traits<char>]
+16 (int (*)(...))std::basic_ostream<_CharT, _Traits>::~basic_ostream [with _CharT = char, _Traits = std::char_traits<char>]
+20 4294967292u
+24 (int (*)(...))-0x00000000000000004
+28 (int (*)(...))(& _ZTISo)
+32 (int (*)(...))std::basic_ostream<char>::_ZTv0_n12_NSoD1Ev
+36 (int (*)(...))std::basic_ostream<char>::_ZTv0_n12_NSoD0Ev
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7u entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 12u)
+4 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 12u)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 32u)
+12 ((& std::basic_iostream<char>::_ZTCSd8_So) + 12u)
+16 ((& std::basic_iostream<char>::_ZTCSd8_So) + 32u)
+20 ((& std::basic_iostream<char>::_ZTVSd) + 52u)
+24 ((& std::basic_iostream<char>::_ZTVSd) + 32u)
+
+Construction vtable for std::basic_istream<wchar_t> (0xb52e6078 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10u entries
+0 12u
+4 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+12 (int (*)(...))std::basic_istream<_CharT, _Traits>::~basic_istream [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]
+16 (int (*)(...))std::basic_istream<_CharT, _Traits>::~basic_istream [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]
+20 4294967284u
+24 (int (*)(...))-0x0000000000000000c
+28 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+32 (int (*)(...))std::basic_istream<wchar_t>::_ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev
+36 (int (*)(...))std::basic_istream<wchar_t>::_ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev
+
+Construction vtable for std::basic_ostream<wchar_t> (0xb52e60f0 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE8_St13basic_ostreamIwS1_E: 10u entries
+0 4u
+4 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+12 (int (*)(...))std::basic_ostream<_CharT, _Traits>::~basic_ostream [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]
+16 (int (*)(...))std::basic_ostream<_CharT, _Traits>::~basic_ostream [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]
+20 4294967292u
+24 (int (*)(...))-0x00000000000000004
+28 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+32 (int (*)(...))std::basic_ostream<wchar_t>::_ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev
+36 (int (*)(...))std::basic_ostream<wchar_t>::_ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev
+
+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) + 12u)
+4 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 12u)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 32u)
+12 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE8_St13basic_ostreamIwS1_E) + 12u)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE8_St13basic_ostreamIwS1_E) + 32u)
+20 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 52u)
+24 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 32u)
+
+Class std::__detail::_List_node_base
+ size=8 align=4
+ base size=8 base align=4
+std::__detail::_List_node_base (0xb52e77e0) 0
+
+Class QListData::Data
+ size=20 align=4
+ base size=20 base align=4
+QListData::Data (0xb515b0e0) 0
+
+Class QListData
+ size=4 align=4
+ base size=4 base align=4
+QListData (0xb515b0a8) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0xb51ee3b8) 0 empty
+
+Class QMetaType
+ size=48 align=4
+ base size=48 base align=4
+QMetaType (0xb50216c8) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=8 align=4
+ base size=8 base align=4
+QtPrivate::QSlotObjectBase (0xb4f20a48) 0
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QObjectData)
+8 (int (*)(...))__cxa_pure_virtual
+12 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=28 align=4
+ base size=28 base align=4
+QObjectData (0xb4f429a0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 8u)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0xb4f42c08) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI7QObject)
+8 (int (*)(...))QObject::metaObject
+12 (int (*)(...))QObject::qt_metacast
+16 (int (*)(...))QObject::qt_metacall
+20 (int (*)(...))QObject::~QObject
+24 (int (*)(...))QObject::~QObject
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=8 align=4
+ base size=8 base align=4
+QObject (0xb4f42b28) 0
+ vptr=((& QObject::_ZTV7QObject) + 8u)
+
+Vtable for QObjectUserData
+QObjectUserData::_ZTV15QObjectUserData: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI15QObjectUserData)
+8 (int (*)(...))QObjectUserData::~QObjectUserData
+12 (int (*)(...))QObjectUserData::~QObjectUserData
+
+Class QObjectUserData
+ size=4 align=4
+ base size=4 base align=4
+QObjectUserData (0xb4f84cb0) 0 nearly-empty
+ vptr=((& QObjectUserData::_ZTV15QObjectUserData) + 8u)
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0xb4f84fc0) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI18QAbstractAnimation)
+8 (int (*)(...))QAbstractAnimation::metaObject
+12 (int (*)(...))QAbstractAnimation::qt_metacast
+16 (int (*)(...))QAbstractAnimation::qt_metacall
+20 (int (*)(...))QAbstractAnimation::~QAbstractAnimation
+24 (int (*)(...))QAbstractAnimation::~QAbstractAnimation
+28 (int (*)(...))QAbstractAnimation::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QAbstractAnimation::updateState
+68 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=8 align=4
+ base size=8 base align=4
+QAbstractAnimation (0xb52e6690) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 8u)
+ QObject (0xb4f84ee0) 0
+ primary-for QAbstractAnimation (0xb52e6690)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0xb4fa6e70) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI16QAnimationDriver)
+8 (int (*)(...))QAnimationDriver::metaObject
+12 (int (*)(...))QAnimationDriver::qt_metacast
+16 (int (*)(...))QAnimationDriver::qt_metacall
+20 (int (*)(...))QAnimationDriver::~QAnimationDriver
+24 (int (*)(...))QAnimationDriver::~QAnimationDriver
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QAnimationDriver::advance
+60 (int (*)(...))QAnimationDriver::elapsed
+64 (int (*)(...))QAnimationDriver::start
+68 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=8 align=4
+ base size=8 base align=4
+QAnimationDriver (0xb52e66cc) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 8u)
+ QObject (0xb4fa6d90) 0
+ primary-for QAnimationDriver (0xb52e66cc)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0xb4fb9460) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI15QAnimationGroup)
+8 (int (*)(...))QAnimationGroup::metaObject
+12 (int (*)(...))QAnimationGroup::qt_metacast
+16 (int (*)(...))QAnimationGroup::qt_metacall
+20 (int (*)(...))QAnimationGroup::~QAnimationGroup
+24 (int (*)(...))QAnimationGroup::~QAnimationGroup
+28 (int (*)(...))QAnimationGroup::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QAbstractAnimation::updateState
+68 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=8 align=4
+ base size=8 base align=4
+QAnimationGroup (0xb52e6708) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 8u)
+ QAbstractAnimation (0xb52e6744) 0
+ primary-for QAnimationGroup (0xb52e6708)
+ QObject (0xb4fb9380) 0
+ primary-for QAbstractAnimation (0xb52e6744)
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0xb4fb9f18) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+8 (int (*)(...))QParallelAnimationGroup::metaObject
+12 (int (*)(...))QParallelAnimationGroup::qt_metacast
+16 (int (*)(...))QParallelAnimationGroup::qt_metacall
+20 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+24 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+28 (int (*)(...))QParallelAnimationGroup::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QParallelAnimationGroup::duration
+60 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+64 (int (*)(...))QParallelAnimationGroup::updateState
+68 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=8 align=4
+ base size=8 base align=4
+QParallelAnimationGroup (0xb52e6780) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 8u)
+ QAnimationGroup (0xb52e67bc) 0
+ primary-for QParallelAnimationGroup (0xb52e6780)
+ QAbstractAnimation (0xb52e67f8) 0
+ primary-for QAnimationGroup (0xb52e67bc)
+ QObject (0xb4fb9e38) 0
+ primary-for QAbstractAnimation (0xb52e67f8)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0xb4fca968) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI15QPauseAnimation)
+8 (int (*)(...))QPauseAnimation::metaObject
+12 (int (*)(...))QPauseAnimation::qt_metacast
+16 (int (*)(...))QPauseAnimation::qt_metacall
+20 (int (*)(...))QPauseAnimation::~QPauseAnimation
+24 (int (*)(...))QPauseAnimation::~QPauseAnimation
+28 (int (*)(...))QPauseAnimation::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QPauseAnimation::duration
+60 (int (*)(...))QPauseAnimation::updateCurrentTime
+64 (int (*)(...))QAbstractAnimation::updateState
+68 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=8 align=4
+ base size=8 base align=4
+QPauseAnimation (0xb52e6834) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 8u)
+ QAbstractAnimation (0xb52e6870) 0
+ primary-for QPauseAnimation (0xb52e6834)
+ QObject (0xb4fca888) 0
+ primary-for QAbstractAnimation (0xb52e6870)
+
+Class std::_Bit_reference
+ size=8 align=4
+ base size=8 base align=4
+std::_Bit_reference (0xb4e19620) 0
+
+Class std::_Bit_iterator_base
+ size=8 align=4
+ base size=8 base align=4
+std::_Bit_iterator_base (0xb52e6924) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0xb4e2e4d0) 0 empty
+
+Class std::_Bit_iterator
+ size=8 align=4
+ base size=8 base align=4
+std::_Bit_iterator (0xb52e6a14) 0
+ std::_Bit_iterator_base (0xb52e6a50) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0xb4e35b60) 0 empty
+
+Class std::_Bit_const_iterator
+ size=8 align=4
+ base size=8 base align=4
+std::_Bit_const_iterator (0xb52e6a8c) 0
+ std::_Bit_iterator_base (0xb52e6ac8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0xb4e43540) 0 empty
+
+Class QEasingCurve
+ size=4 align=4
+ base size=4 base align=4
+QEasingCurve (0xb4d22428) 0
+
+Class std::_Rb_tree_node_base
+ size=16 align=4
+ base size=16 base align=4
+std::_Rb_tree_node_base (0xb4d382a0) 0
+
+Class QMapNodeBase
+ size=12 align=4
+ base size=12 base align=4
+QMapNodeBase (0xb4ddec08) 0
+
+Class QMapDataBase
+ size=24 align=4
+ base size=24 base align=4
+QMapDataBase (0xb4e0a4d0) 0
+
+Class QHashData::Node
+ size=8 align=4
+ base size=8 base align=4
+QHashData::Node (0xb4c83f18) 0
+
+Class QHashData
+ size=36 align=4
+ base size=36 base align=4
+QHashData (0xb4c83ee0) 0
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0xb4caf348) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=4
+ base size=8 base align=4
+QVariant::PrivateShared (0xb4b41af0) 0
+
+Class QVariant::Private::Data
+ size=8 align=4
+ base size=8 base align=4
+QVariant::Private::Data (0xb4b41cb0) 0
+
+Class QVariant::Private
+ size=12 align=4
+ base size=12 base align=4
+QVariant::Private (0xb4b41b60) 0
+
+Class QVariant::Handler
+ size=36 align=4
+ base size=36 base align=4
+QVariant::Handler (0xb4b4f2a0) 0
+
+Class QVariant
+ size=12 align=4
+ base size=12 base align=4
+QVariant (0xb4b1f770) 0
+
+Class QVariantComparisonHelper
+ size=4 align=4
+ base size=4 base align=4
+QVariantComparisonHelper (0xb4b7e7a8) 0
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0xb4bb4038) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI17QVariantAnimation)
+8 (int (*)(...))QVariantAnimation::metaObject
+12 (int (*)(...))QVariantAnimation::qt_metacast
+16 (int (*)(...))QVariantAnimation::qt_metacall
+20 (int (*)(...))QVariantAnimation::~QVariantAnimation
+24 (int (*)(...))QVariantAnimation::~QVariantAnimation
+28 (int (*)(...))QVariantAnimation::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QVariantAnimation::duration
+60 (int (*)(...))QVariantAnimation::updateCurrentTime
+64 (int (*)(...))QVariantAnimation::updateState
+68 (int (*)(...))QAbstractAnimation::updateDirection
+72 (int (*)(...))QVariantAnimation::updateCurrentValue
+76 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=8 align=4
+ base size=8 base align=4
+QVariantAnimation (0xb52e6f3c) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 8u)
+ QAbstractAnimation (0xb52e6f78) 0
+ primary-for QVariantAnimation (0xb52e6f3c)
+ QObject (0xb4b7ef50) 0
+ primary-for QAbstractAnimation (0xb52e6f78)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0xb4bb4d20) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI18QPropertyAnimation)
+8 (int (*)(...))QPropertyAnimation::metaObject
+12 (int (*)(...))QPropertyAnimation::qt_metacast
+16 (int (*)(...))QPropertyAnimation::qt_metacall
+20 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+24 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+28 (int (*)(...))QPropertyAnimation::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QVariantAnimation::duration
+60 (int (*)(...))QVariantAnimation::updateCurrentTime
+64 (int (*)(...))QPropertyAnimation::updateState
+68 (int (*)(...))QAbstractAnimation::updateDirection
+72 (int (*)(...))QPropertyAnimation::updateCurrentValue
+76 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=8 align=4
+ base size=8 base align=4
+QPropertyAnimation (0xb52e6fb4) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 8u)
+ QVariantAnimation (0xb4bc3000) 0
+ primary-for QPropertyAnimation (0xb52e6fb4)
+ QAbstractAnimation (0xb4bc303c) 0
+ primary-for QVariantAnimation (0xb4bc3000)
+ QObject (0xb4bb4c40) 0
+ primary-for QAbstractAnimation (0xb4bc303c)
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0xb4bc8818) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+8 (int (*)(...))QSequentialAnimationGroup::metaObject
+12 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+16 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+20 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+24 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+28 (int (*)(...))QSequentialAnimationGroup::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QSequentialAnimationGroup::duration
+60 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+64 (int (*)(...))QSequentialAnimationGroup::updateState
+68 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=8 align=4
+ base size=8 base align=4
+QSequentialAnimationGroup (0xb4bc3078) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 8u)
+ QAnimationGroup (0xb4bc30b4) 0
+ primary-for QSequentialAnimationGroup (0xb4bc3078)
+ QAbstractAnimation (0xb4bc30f0) 0
+ primary-for QAnimationGroup (0xb4bc30b4)
+ QObject (0xb4bc8738) 0
+ primary-for QAbstractAnimation (0xb4bc30f0)
+
+Class QTextCodec::ConverterState
+ size=28 align=4
+ base size=28 base align=4
+QTextCodec::ConverterState (0xb4bd7c08) 0
+
+Vtable for QTextCodec
+QTextCodec::_ZTV10QTextCodec: 9u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI10QTextCodec)
+8 (int (*)(...))__cxa_pure_virtual
+12 (int (*)(...))QTextCodec::aliases
+16 (int (*)(...))__cxa_pure_virtual
+20 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+28 (int (*)(...))QTextCodec::~QTextCodec
+32 (int (*)(...))QTextCodec::~QTextCodec
+
+Class QTextCodec
+ size=4 align=4
+ base size=4 base align=4
+QTextCodec (0xb4bd7230) 0 nearly-empty
+ vptr=((& QTextCodec::_ZTV10QTextCodec) + 8u)
+
+Class QTextEncoder
+ size=32 align=4
+ base size=32 base align=4
+QTextEncoder (0xb4bec7a8) 0
+
+Class QTextDecoder
+ size=32 align=4
+ base size=32 base align=4
+QTextDecoder (0xb4becce8) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0xb4bfef18) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0xb4a3d1f8) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=12 align=4
+ base size=12 base align=4
+QtSharedPointer::ExternalRefCountData (0xb4a3d2d8) 0
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0xb4a84a80) 0 empty
+
+Class QDate
+ size=8 align=4
+ base size=8 base align=4
+QDate (0xb4ae8d90) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0xb4b019a0) 0
+
+Class QDateTime
+ size=4 align=4
+ base size=4 base align=4
+QDateTime (0xb48ebdc8) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0xb490a578) 0 empty
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0xb490a700) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 30u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI9QIODevice)
+8 (int (*)(...))QIODevice::metaObject
+12 (int (*)(...))QIODevice::qt_metacast
+16 (int (*)(...))QIODevice::qt_metacall
+20 (int (*)(...))QIODevice::~QIODevice
+24 (int (*)(...))QIODevice::~QIODevice
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QIODevice::isSequential
+60 (int (*)(...))QIODevice::open
+64 (int (*)(...))QIODevice::close
+68 (int (*)(...))QIODevice::pos
+72 (int (*)(...))QIODevice::size
+76 (int (*)(...))QIODevice::seek
+80 (int (*)(...))QIODevice::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QIODevice::bytesAvailable
+92 (int (*)(...))QIODevice::bytesToWrite
+96 (int (*)(...))QIODevice::canReadLine
+100 (int (*)(...))QIODevice::waitForReadyRead
+104 (int (*)(...))QIODevice::waitForBytesWritten
+108 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))QIODevice::readLineData
+116 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=8 align=4
+ base size=8 base align=4
+QIODevice (0xb4bc321c) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 8u)
+ QObject (0xb490a620) 0
+ primary-for QIODevice (0xb4bc321c)
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0xb493c188) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 30u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI7QBuffer)
+8 (int (*)(...))QBuffer::metaObject
+12 (int (*)(...))QBuffer::qt_metacast
+16 (int (*)(...))QBuffer::qt_metacall
+20 (int (*)(...))QBuffer::~QBuffer
+24 (int (*)(...))QBuffer::~QBuffer
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QBuffer::connectNotify
+52 (int (*)(...))QBuffer::disconnectNotify
+56 (int (*)(...))QIODevice::isSequential
+60 (int (*)(...))QBuffer::open
+64 (int (*)(...))QBuffer::close
+68 (int (*)(...))QBuffer::pos
+72 (int (*)(...))QBuffer::size
+76 (int (*)(...))QBuffer::seek
+80 (int (*)(...))QBuffer::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QIODevice::bytesAvailable
+92 (int (*)(...))QIODevice::bytesToWrite
+96 (int (*)(...))QBuffer::canReadLine
+100 (int (*)(...))QIODevice::waitForReadyRead
+104 (int (*)(...))QIODevice::waitForBytesWritten
+108 (int (*)(...))QBuffer::readData
+112 (int (*)(...))QIODevice::readLineData
+116 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=8 align=4
+ base size=8 base align=4
+QBuffer (0xb4bc3294) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 8u)
+ QIODevice (0xb4bc32d0) 0
+ primary-for QBuffer (0xb4bc3294)
+ QObject (0xb493c0a8) 0
+ primary-for QIODevice (0xb4bc32d0)
+
+Class QDataStream
+ size=24 align=4
+ base size=24 base align=4
+QDataStream (0xb493ca10) 0
+
+Class QLocale
+ size=4 align=4
+ base size=4 base align=4
+QLocale (0xb497d0e0) 0
+
+Class _IO_marker
+ size=12 align=4
+ base size=12 base align=4
+_IO_marker (0xb49df0e0) 0
+
+Class _IO_FILE
+ size=148 align=4
+ base size=148 base align=4
+_IO_FILE (0xb49df118) 0
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QTextStream)
+8 (int (*)(...))QTextStream::~QTextStream
+12 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=8 align=4
+ base size=8 base align=4
+QTextStream (0xb49df188) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 8u)
+
+Class QTextStreamManipulator
+ size=24 align=4
+ base size=22 base align=4
+QTextStreamManipulator (0xb4822380) 0
+
+Class QContiguousCacheData
+ size=24 align=4
+ base size=24 base align=4
+QContiguousCacheData (0xb485ce00) 0
+
+Class QDebug::Stream
+ size=44 align=4
+ base size=44 base align=4
+QDebug::Stream (0xb487da48) 0
+
+Class QDebug
+ size=4 align=4
+ base size=4 base align=4
+QDebug (0xb487da10) 0
+
+Class QDebugStateSaver
+ size=4 align=4
+ base size=4 base align=4
+QDebugStateSaver (0xb46e71c0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0xb46e74d0) 0 empty
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0xb4710000) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 34u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QFileDevice)
+8 (int (*)(...))QFileDevice::metaObject
+12 (int (*)(...))QFileDevice::qt_metacast
+16 (int (*)(...))QFileDevice::qt_metacall
+20 (int (*)(...))QFileDevice::~QFileDevice
+24 (int (*)(...))QFileDevice::~QFileDevice
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QFileDevice::isSequential
+60 (int (*)(...))QIODevice::open
+64 (int (*)(...))QFileDevice::close
+68 (int (*)(...))QFileDevice::pos
+72 (int (*)(...))QFileDevice::size
+76 (int (*)(...))QFileDevice::seek
+80 (int (*)(...))QFileDevice::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QIODevice::bytesAvailable
+92 (int (*)(...))QIODevice::bytesToWrite
+96 (int (*)(...))QIODevice::canReadLine
+100 (int (*)(...))QIODevice::waitForReadyRead
+104 (int (*)(...))QIODevice::waitForBytesWritten
+108 (int (*)(...))QFileDevice::readData
+112 (int (*)(...))QFileDevice::readLineData
+116 (int (*)(...))QFileDevice::writeData
+120 (int (*)(...))QFileDevice::fileName
+124 (int (*)(...))QFileDevice::resize
+128 (int (*)(...))QFileDevice::permissions
+132 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=8 align=4
+ base size=8 base align=4
+QFileDevice (0xb4bc3474) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 8u)
+ QIODevice (0xb4bc34b0) 0
+ primary-for QFileDevice (0xb4bc3474)
+ QObject (0xb46e7f18) 0
+ primary-for QIODevice (0xb4bc34b0)
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0xb4727b28) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 34u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI5QFile)
+8 (int (*)(...))QFile::metaObject
+12 (int (*)(...))QFile::qt_metacast
+16 (int (*)(...))QFile::qt_metacall
+20 (int (*)(...))QFile::~QFile
+24 (int (*)(...))QFile::~QFile
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QFileDevice::isSequential
+60 (int (*)(...))QFile::open
+64 (int (*)(...))QFileDevice::close
+68 (int (*)(...))QFileDevice::pos
+72 (int (*)(...))QFile::size
+76 (int (*)(...))QFileDevice::seek
+80 (int (*)(...))QFileDevice::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QIODevice::bytesAvailable
+92 (int (*)(...))QIODevice::bytesToWrite
+96 (int (*)(...))QIODevice::canReadLine
+100 (int (*)(...))QIODevice::waitForReadyRead
+104 (int (*)(...))QIODevice::waitForBytesWritten
+108 (int (*)(...))QFileDevice::readData
+112 (int (*)(...))QFileDevice::readLineData
+116 (int (*)(...))QFileDevice::writeData
+120 (int (*)(...))QFile::fileName
+124 (int (*)(...))QFile::resize
+128 (int (*)(...))QFile::permissions
+132 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=8 align=4
+ base size=8 base align=4
+QFile (0xb4bc3528) 0
+ vptr=((& QFile::_ZTV5QFile) + 8u)
+ QFileDevice (0xb4bc3564) 0
+ primary-for QFile (0xb4bc3528)
+ QIODevice (0xb4bc35a0) 0
+ primary-for QFileDevice (0xb4bc3564)
+ QObject (0xb4727a48) 0
+ primary-for QIODevice (0xb4bc35a0)
+
+Class QFileInfo
+ size=4 align=4
+ base size=4 base align=4
+QFileInfo (0xb473baf0) 0
+
+Class QRegExp
+ size=4 align=4
+ base size=4 base align=4
+QRegExp (0xb475d850) 0
+
+Class QStringMatcher::Data
+ size=264 align=4
+ base size=264 base align=4
+QStringMatcher::Data (0xb4775498) 0
+
+Class QStringMatcher
+ size=1036 align=4
+ base size=1036 base align=4
+QStringMatcher (0xb4775188) 0
+
+Class QStringList
+ size=4 align=4
+ base size=4 base align=4
+QStringList (0xb4bc3654) 0
+ QList<QString> (0xb4775738) 0
+
+Class QDir
+ size=4 align=4
+ base size=4 base align=4
+QDir (0xb47b22d8) 0
+
+Class QDirIterator
+ size=4 align=4
+ base size=4 base align=4
+QDirIterator (0xb45eff88) 0
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0xb4615690) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+8 (int (*)(...))QFileSystemWatcher::metaObject
+12 (int (*)(...))QFileSystemWatcher::qt_metacast
+16 (int (*)(...))QFileSystemWatcher::qt_metacall
+20 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+24 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=8 align=4
+ base size=8 base align=4
+QFileSystemWatcher (0xb4bc37bc) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 8u)
+ QObject (0xb46155b0) 0
+ primary-for QFileSystemWatcher (0xb4bc37bc)
+
+Class QLockFile
+ size=4 align=4
+ base size=4 base align=4
+QLockFile (0xb4615c78) 0
+
+Class QProcessEnvironment
+ size=4 align=4
+ base size=4 base align=4
+QProcessEnvironment (0xb462b230) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0xb462bbd0) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 31u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI8QProcess)
+8 (int (*)(...))QProcess::metaObject
+12 (int (*)(...))QProcess::qt_metacast
+16 (int (*)(...))QProcess::qt_metacall
+20 (int (*)(...))QProcess::~QProcess
+24 (int (*)(...))QProcess::~QProcess
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QProcess::isSequential
+60 (int (*)(...))QProcess::open
+64 (int (*)(...))QProcess::close
+68 (int (*)(...))QIODevice::pos
+72 (int (*)(...))QIODevice::size
+76 (int (*)(...))QIODevice::seek
+80 (int (*)(...))QProcess::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QProcess::bytesAvailable
+92 (int (*)(...))QProcess::bytesToWrite
+96 (int (*)(...))QProcess::canReadLine
+100 (int (*)(...))QProcess::waitForReadyRead
+104 (int (*)(...))QProcess::waitForBytesWritten
+108 (int (*)(...))QProcess::readData
+112 (int (*)(...))QIODevice::readLineData
+116 (int (*)(...))QProcess::writeData
+120 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=8 align=4
+ base size=8 base align=4
+QProcess (0xb4bc37f8) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 8u)
+ QIODevice (0xb4bc3834) 0
+ primary-for QProcess (0xb4bc37f8)
+ QObject (0xb462baf0) 0
+ primary-for QIODevice (0xb4bc3834)
+
+Class QResource
+ size=4 align=4
+ base size=4 base align=4
+QResource (0xb46562a0) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0xb4656930) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 34u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI9QSaveFile)
+8 (int (*)(...))QSaveFile::metaObject
+12 (int (*)(...))QSaveFile::qt_metacast
+16 (int (*)(...))QSaveFile::qt_metacall
+20 (int (*)(...))QSaveFile::~QSaveFile
+24 (int (*)(...))QSaveFile::~QSaveFile
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QFileDevice::isSequential
+60 (int (*)(...))QSaveFile::open
+64 (int (*)(...))QSaveFile::close
+68 (int (*)(...))QFileDevice::pos
+72 (int (*)(...))QFileDevice::size
+76 (int (*)(...))QFileDevice::seek
+80 (int (*)(...))QFileDevice::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QIODevice::bytesAvailable
+92 (int (*)(...))QIODevice::bytesToWrite
+96 (int (*)(...))QIODevice::canReadLine
+100 (int (*)(...))QIODevice::waitForReadyRead
+104 (int (*)(...))QIODevice::waitForBytesWritten
+108 (int (*)(...))QFileDevice::readData
+112 (int (*)(...))QFileDevice::readLineData
+116 (int (*)(...))QSaveFile::writeData
+120 (int (*)(...))QSaveFile::fileName
+124 (int (*)(...))QFileDevice::resize
+128 (int (*)(...))QFileDevice::permissions
+132 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=8 align=4
+ base size=8 base align=4
+QSaveFile (0xb4bc3870) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 8u)
+ QFileDevice (0xb4bc38ac) 0
+ primary-for QSaveFile (0xb4bc3870)
+ QIODevice (0xb4bc38e8) 0
+ primary-for QFileDevice (0xb4bc38ac)
+ QObject (0xb4656850) 0
+ primary-for QIODevice (0xb4bc38e8)
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0xb466e1c0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI9QSettings)
+8 (int (*)(...))QSettings::metaObject
+12 (int (*)(...))QSettings::qt_metacast
+16 (int (*)(...))QSettings::qt_metacall
+20 (int (*)(...))QSettings::~QSettings
+24 (int (*)(...))QSettings::~QSettings
+28 (int (*)(...))QSettings::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=8 align=4
+ base size=8 base align=4
+QSettings (0xb4bc3924) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 8u)
+ QObject (0xb466e0e0) 0
+ primary-for QSettings (0xb4bc3924)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0xb46851c0) 0 empty
+
+Class QTemporaryDir
+ size=4 align=4
+ base size=4 base align=4
+QTemporaryDir (0xb4685770) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0xb4685b98) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 34u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI14QTemporaryFile)
+8 (int (*)(...))QTemporaryFile::metaObject
+12 (int (*)(...))QTemporaryFile::qt_metacast
+16 (int (*)(...))QTemporaryFile::qt_metacall
+20 (int (*)(...))QTemporaryFile::~QTemporaryFile
+24 (int (*)(...))QTemporaryFile::~QTemporaryFile
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QFileDevice::isSequential
+60 (int (*)(...))QTemporaryFile::open
+64 (int (*)(...))QFileDevice::close
+68 (int (*)(...))QFileDevice::pos
+72 (int (*)(...))QFile::size
+76 (int (*)(...))QFileDevice::seek
+80 (int (*)(...))QFileDevice::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QIODevice::bytesAvailable
+92 (int (*)(...))QIODevice::bytesToWrite
+96 (int (*)(...))QIODevice::canReadLine
+100 (int (*)(...))QIODevice::waitForReadyRead
+104 (int (*)(...))QIODevice::waitForBytesWritten
+108 (int (*)(...))QFileDevice::readData
+112 (int (*)(...))QFileDevice::readLineData
+116 (int (*)(...))QFileDevice::writeData
+120 (int (*)(...))QTemporaryFile::fileName
+124 (int (*)(...))QFile::resize
+128 (int (*)(...))QFile::permissions
+132 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=8 align=4
+ base size=8 base align=4
+QTemporaryFile (0xb4bc399c) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 8u)
+ QFile (0xb4bc39d8) 0
+ primary-for QTemporaryFile (0xb4bc399c)
+ QFileDevice (0xb4bc3a14) 0
+ primary-for QFile (0xb4bc39d8)
+ QIODevice (0xb4bc3a50) 0
+ primary-for QFileDevice (0xb4bc3a14)
+ QObject (0xb4685ab8) 0
+ primary-for QIODevice (0xb4bc3a50)
+
+Class QUrl
+ size=4 align=4
+ base size=4 base align=4
+QUrl (0xb46b2188) 0
+
+Class QUrlQuery
+ size=4 align=4
+ base size=4 base align=4
+QUrlQuery (0xb45183b8) 0
+
+Class QModelIndex
+ size=16 align=4
+ base size=16 base align=4
+QModelIndex (0xb4537268) 0
+
+Class QPersistentModelIndex
+ size=4 align=4
+ base size=4 base align=4
+QPersistentModelIndex (0xb4547498) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0xb455f000) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 48u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI18QAbstractItemModel)
+8 (int (*)(...))QAbstractItemModel::metaObject
+12 (int (*)(...))QAbstractItemModel::qt_metacast
+16 (int (*)(...))QAbstractItemModel::qt_metacall
+20 (int (*)(...))QAbstractItemModel::~QAbstractItemModel
+24 (int (*)(...))QAbstractItemModel::~QAbstractItemModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QAbstractItemModel::sibling
+68 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+76 (int (*)(...))QAbstractItemModel::hasChildren
+80 (int (*)(...))__cxa_pure_virtual
+84 (int (*)(...))QAbstractItemModel::setData
+88 (int (*)(...))QAbstractItemModel::headerData
+92 (int (*)(...))QAbstractItemModel::setHeaderData
+96 (int (*)(...))QAbstractItemModel::itemData
+100 (int (*)(...))QAbstractItemModel::setItemData
+104 (int (*)(...))QAbstractItemModel::mimeTypes
+108 (int (*)(...))QAbstractItemModel::mimeData
+112 (int (*)(...))QAbstractItemModel::canDropMimeData
+116 (int (*)(...))QAbstractItemModel::dropMimeData
+120 (int (*)(...))QAbstractItemModel::supportedDropActions
+124 (int (*)(...))QAbstractItemModel::supportedDragActions
+128 (int (*)(...))QAbstractItemModel::insertRows
+132 (int (*)(...))QAbstractItemModel::insertColumns
+136 (int (*)(...))QAbstractItemModel::removeRows
+140 (int (*)(...))QAbstractItemModel::removeColumns
+144 (int (*)(...))QAbstractItemModel::moveRows
+148 (int (*)(...))QAbstractItemModel::moveColumns
+152 (int (*)(...))QAbstractItemModel::fetchMore
+156 (int (*)(...))QAbstractItemModel::canFetchMore
+160 (int (*)(...))QAbstractItemModel::flags
+164 (int (*)(...))QAbstractItemModel::sort
+168 (int (*)(...))QAbstractItemModel::buddy
+172 (int (*)(...))QAbstractItemModel::match
+176 (int (*)(...))QAbstractItemModel::span
+180 (int (*)(...))QAbstractItemModel::roleNames
+184 (int (*)(...))QAbstractItemModel::submit
+188 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractItemModel
+ size=8 align=4
+ base size=8 base align=4
+QAbstractItemModel (0xb4bc3b40) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 8u)
+ QObject (0xb4547f88) 0
+ primary-for QAbstractItemModel (0xb4bc3b40)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0xb45a7c78) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 48u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI19QAbstractTableModel)
+8 (int (*)(...))QAbstractTableModel::metaObject
+12 (int (*)(...))QAbstractTableModel::qt_metacast
+16 (int (*)(...))QAbstractTableModel::qt_metacall
+20 (int (*)(...))QAbstractTableModel::~QAbstractTableModel
+24 (int (*)(...))QAbstractTableModel::~QAbstractTableModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QAbstractTableModel::index
+60 (int (*)(...))QAbstractTableModel::parent
+64 (int (*)(...))QAbstractItemModel::sibling
+68 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+76 (int (*)(...))QAbstractTableModel::hasChildren
+80 (int (*)(...))__cxa_pure_virtual
+84 (int (*)(...))QAbstractItemModel::setData
+88 (int (*)(...))QAbstractItemModel::headerData
+92 (int (*)(...))QAbstractItemModel::setHeaderData
+96 (int (*)(...))QAbstractItemModel::itemData
+100 (int (*)(...))QAbstractItemModel::setItemData
+104 (int (*)(...))QAbstractItemModel::mimeTypes
+108 (int (*)(...))QAbstractItemModel::mimeData
+112 (int (*)(...))QAbstractItemModel::canDropMimeData
+116 (int (*)(...))QAbstractTableModel::dropMimeData
+120 (int (*)(...))QAbstractItemModel::supportedDropActions
+124 (int (*)(...))QAbstractItemModel::supportedDragActions
+128 (int (*)(...))QAbstractItemModel::insertRows
+132 (int (*)(...))QAbstractItemModel::insertColumns
+136 (int (*)(...))QAbstractItemModel::removeRows
+140 (int (*)(...))QAbstractItemModel::removeColumns
+144 (int (*)(...))QAbstractItemModel::moveRows
+148 (int (*)(...))QAbstractItemModel::moveColumns
+152 (int (*)(...))QAbstractItemModel::fetchMore
+156 (int (*)(...))QAbstractItemModel::canFetchMore
+160 (int (*)(...))QAbstractTableModel::flags
+164 (int (*)(...))QAbstractItemModel::sort
+168 (int (*)(...))QAbstractItemModel::buddy
+172 (int (*)(...))QAbstractItemModel::match
+176 (int (*)(...))QAbstractItemModel::span
+180 (int (*)(...))QAbstractItemModel::roleNames
+184 (int (*)(...))QAbstractItemModel::submit
+188 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractTableModel
+ size=8 align=4
+ base size=8 base align=4
+QAbstractTableModel (0xb4bc3c6c) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 8u)
+ QAbstractItemModel (0xb4bc3ca8) 0
+ primary-for QAbstractTableModel (0xb4bc3c6c)
+ QObject (0xb45a7b98) 0
+ primary-for QAbstractItemModel (0xb4bc3ca8)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0xb45b6380) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 48u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI18QAbstractListModel)
+8 (int (*)(...))QAbstractListModel::metaObject
+12 (int (*)(...))QAbstractListModel::qt_metacast
+16 (int (*)(...))QAbstractListModel::qt_metacall
+20 (int (*)(...))QAbstractListModel::~QAbstractListModel
+24 (int (*)(...))QAbstractListModel::~QAbstractListModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QAbstractListModel::index
+60 (int (*)(...))QAbstractListModel::parent
+64 (int (*)(...))QAbstractItemModel::sibling
+68 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QAbstractListModel::columnCount
+76 (int (*)(...))QAbstractListModel::hasChildren
+80 (int (*)(...))__cxa_pure_virtual
+84 (int (*)(...))QAbstractItemModel::setData
+88 (int (*)(...))QAbstractItemModel::headerData
+92 (int (*)(...))QAbstractItemModel::setHeaderData
+96 (int (*)(...))QAbstractItemModel::itemData
+100 (int (*)(...))QAbstractItemModel::setItemData
+104 (int (*)(...))QAbstractItemModel::mimeTypes
+108 (int (*)(...))QAbstractItemModel::mimeData
+112 (int (*)(...))QAbstractItemModel::canDropMimeData
+116 (int (*)(...))QAbstractListModel::dropMimeData
+120 (int (*)(...))QAbstractItemModel::supportedDropActions
+124 (int (*)(...))QAbstractItemModel::supportedDragActions
+128 (int (*)(...))QAbstractItemModel::insertRows
+132 (int (*)(...))QAbstractItemModel::insertColumns
+136 (int (*)(...))QAbstractItemModel::removeRows
+140 (int (*)(...))QAbstractItemModel::removeColumns
+144 (int (*)(...))QAbstractItemModel::moveRows
+148 (int (*)(...))QAbstractItemModel::moveColumns
+152 (int (*)(...))QAbstractItemModel::fetchMore
+156 (int (*)(...))QAbstractItemModel::canFetchMore
+160 (int (*)(...))QAbstractListModel::flags
+164 (int (*)(...))QAbstractItemModel::sort
+168 (int (*)(...))QAbstractItemModel::buddy
+172 (int (*)(...))QAbstractItemModel::match
+176 (int (*)(...))QAbstractItemModel::span
+180 (int (*)(...))QAbstractItemModel::roleNames
+184 (int (*)(...))QAbstractItemModel::submit
+188 (int (*)(...))QAbstractItemModel::revert
+
+Class QAbstractListModel
+ size=8 align=4
+ base size=8 base align=4
+QAbstractListModel (0xb4bc3ce4) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 8u)
+ QAbstractItemModel (0xb4bc3d20) 0
+ primary-for QAbstractListModel (0xb4bc3ce4)
+ QObject (0xb45b62a0) 0
+ primary-for QAbstractItemModel (0xb4bc3d20)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0xb45c74d0) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 53u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+8 (int (*)(...))QAbstractProxyModel::metaObject
+12 (int (*)(...))QAbstractProxyModel::qt_metacast
+16 (int (*)(...))QAbstractProxyModel::qt_metacall
+20 (int (*)(...))QAbstractProxyModel::~QAbstractProxyModel
+24 (int (*)(...))QAbstractProxyModel::~QAbstractProxyModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))QAbstractProxyModel::sibling
+68 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+76 (int (*)(...))QAbstractProxyModel::hasChildren
+80 (int (*)(...))QAbstractProxyModel::data
+84 (int (*)(...))QAbstractProxyModel::setData
+88 (int (*)(...))QAbstractProxyModel::headerData
+92 (int (*)(...))QAbstractProxyModel::setHeaderData
+96 (int (*)(...))QAbstractProxyModel::itemData
+100 (int (*)(...))QAbstractProxyModel::setItemData
+104 (int (*)(...))QAbstractProxyModel::mimeTypes
+108 (int (*)(...))QAbstractProxyModel::mimeData
+112 (int (*)(...))QAbstractItemModel::canDropMimeData
+116 (int (*)(...))QAbstractItemModel::dropMimeData
+120 (int (*)(...))QAbstractProxyModel::supportedDropActions
+124 (int (*)(...))QAbstractItemModel::supportedDragActions
+128 (int (*)(...))QAbstractItemModel::insertRows
+132 (int (*)(...))QAbstractItemModel::insertColumns
+136 (int (*)(...))QAbstractItemModel::removeRows
+140 (int (*)(...))QAbstractItemModel::removeColumns
+144 (int (*)(...))QAbstractItemModel::moveRows
+148 (int (*)(...))QAbstractItemModel::moveColumns
+152 (int (*)(...))QAbstractProxyModel::fetchMore
+156 (int (*)(...))QAbstractProxyModel::canFetchMore
+160 (int (*)(...))QAbstractProxyModel::flags
+164 (int (*)(...))QAbstractProxyModel::sort
+168 (int (*)(...))QAbstractProxyModel::buddy
+172 (int (*)(...))QAbstractItemModel::match
+176 (int (*)(...))QAbstractProxyModel::span
+180 (int (*)(...))QAbstractItemModel::roleNames
+184 (int (*)(...))QAbstractProxyModel::submit
+188 (int (*)(...))QAbstractProxyModel::revert
+192 (int (*)(...))QAbstractProxyModel::setSourceModel
+196 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+204 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+208 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=8 align=4
+ base size=8 base align=4
+QAbstractProxyModel (0xb4bc3d5c) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 8u)
+ QAbstractItemModel (0xb4bc3d98) 0
+ primary-for QAbstractProxyModel (0xb4bc3d5c)
+ QObject (0xb45c73f0) 0
+ primary-for QAbstractItemModel (0xb4bc3d98)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0xb45c7ea8) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 53u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+8 (int (*)(...))QIdentityProxyModel::metaObject
+12 (int (*)(...))QIdentityProxyModel::qt_metacast
+16 (int (*)(...))QIdentityProxyModel::qt_metacall
+20 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+24 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QIdentityProxyModel::index
+60 (int (*)(...))QIdentityProxyModel::parent
+64 (int (*)(...))QIdentityProxyModel::sibling
+68 (int (*)(...))QIdentityProxyModel::rowCount
+72 (int (*)(...))QIdentityProxyModel::columnCount
+76 (int (*)(...))QAbstractProxyModel::hasChildren
+80 (int (*)(...))QAbstractProxyModel::data
+84 (int (*)(...))QAbstractProxyModel::setData
+88 (int (*)(...))QIdentityProxyModel::headerData
+92 (int (*)(...))QAbstractProxyModel::setHeaderData
+96 (int (*)(...))QAbstractProxyModel::itemData
+100 (int (*)(...))QAbstractProxyModel::setItemData
+104 (int (*)(...))QAbstractProxyModel::mimeTypes
+108 (int (*)(...))QAbstractProxyModel::mimeData
+112 (int (*)(...))QAbstractItemModel::canDropMimeData
+116 (int (*)(...))QIdentityProxyModel::dropMimeData
+120 (int (*)(...))QAbstractProxyModel::supportedDropActions
+124 (int (*)(...))QAbstractItemModel::supportedDragActions
+128 (int (*)(...))QIdentityProxyModel::insertRows
+132 (int (*)(...))QIdentityProxyModel::insertColumns
+136 (int (*)(...))QIdentityProxyModel::removeRows
+140 (int (*)(...))QIdentityProxyModel::removeColumns
+144 (int (*)(...))QAbstractItemModel::moveRows
+148 (int (*)(...))QAbstractItemModel::moveColumns
+152 (int (*)(...))QAbstractProxyModel::fetchMore
+156 (int (*)(...))QAbstractProxyModel::canFetchMore
+160 (int (*)(...))QAbstractProxyModel::flags
+164 (int (*)(...))QAbstractProxyModel::sort
+168 (int (*)(...))QAbstractProxyModel::buddy
+172 (int (*)(...))QIdentityProxyModel::match
+176 (int (*)(...))QAbstractProxyModel::span
+180 (int (*)(...))QAbstractItemModel::roleNames
+184 (int (*)(...))QAbstractProxyModel::submit
+188 (int (*)(...))QAbstractProxyModel::revert
+192 (int (*)(...))QIdentityProxyModel::setSourceModel
+196 (int (*)(...))QIdentityProxyModel::mapToSource
+200 (int (*)(...))QIdentityProxyModel::mapFromSource
+204 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+208 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=8 align=4
+ base size=8 base align=4
+QIdentityProxyModel (0xb4bc3dd4) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 8u)
+ QAbstractProxyModel (0xb4bc3e10) 0
+ primary-for QIdentityProxyModel (0xb4bc3dd4)
+ QAbstractItemModel (0xb4bc3e4c) 0
+ primary-for QAbstractProxyModel (0xb4bc3e10)
+ QObject (0xb45c7dc8) 0
+ primary-for QAbstractItemModel (0xb4bc3e4c)
+
+Class QItemSelectionRange
+ size=8 align=4
+ base size=8 base align=4
+QItemSelectionRange (0xb43e1818) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0xb44044d0) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI19QItemSelectionModel)
+8 (int (*)(...))QItemSelectionModel::metaObject
+12 (int (*)(...))QItemSelectionModel::qt_metacast
+16 (int (*)(...))QItemSelectionModel::qt_metacall
+20 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+24 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QItemSelectionModel::setCurrentIndex
+60 (int (*)(...))QItemSelectionModel::select
+64 (int (*)(...))QItemSelectionModel::select
+68 (int (*)(...))QItemSelectionModel::clear
+72 (int (*)(...))QItemSelectionModel::reset
+76 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=8 align=4
+ base size=8 base align=4
+QItemSelectionModel (0xb4bc3e88) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 8u)
+ QObject (0xb44043f0) 0
+ primary-for QItemSelectionModel (0xb4bc3e88)
+
+Class QItemSelection
+ size=4 align=4
+ base size=4 base align=4
+QItemSelection (0xb4bc3f00) 0
+ QList<QItemSelectionRange> (0xb442c0e0) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0xb442c498) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 56u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+8 (int (*)(...))QSortFilterProxyModel::metaObject
+12 (int (*)(...))QSortFilterProxyModel::qt_metacast
+16 (int (*)(...))QSortFilterProxyModel::qt_metacall
+20 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+24 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QSortFilterProxyModel::index
+60 (int (*)(...))QSortFilterProxyModel::parent
+64 (int (*)(...))QSortFilterProxyModel::sibling
+68 (int (*)(...))QSortFilterProxyModel::rowCount
+72 (int (*)(...))QSortFilterProxyModel::columnCount
+76 (int (*)(...))QSortFilterProxyModel::hasChildren
+80 (int (*)(...))QSortFilterProxyModel::data
+84 (int (*)(...))QSortFilterProxyModel::setData
+88 (int (*)(...))QSortFilterProxyModel::headerData
+92 (int (*)(...))QSortFilterProxyModel::setHeaderData
+96 (int (*)(...))QAbstractProxyModel::itemData
+100 (int (*)(...))QAbstractProxyModel::setItemData
+104 (int (*)(...))QSortFilterProxyModel::mimeTypes
+108 (int (*)(...))QSortFilterProxyModel::mimeData
+112 (int (*)(...))QAbstractItemModel::canDropMimeData
+116 (int (*)(...))QSortFilterProxyModel::dropMimeData
+120 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+124 (int (*)(...))QAbstractItemModel::supportedDragActions
+128 (int (*)(...))QSortFilterProxyModel::insertRows
+132 (int (*)(...))QSortFilterProxyModel::insertColumns
+136 (int (*)(...))QSortFilterProxyModel::removeRows
+140 (int (*)(...))QSortFilterProxyModel::removeColumns
+144 (int (*)(...))QAbstractItemModel::moveRows
+148 (int (*)(...))QAbstractItemModel::moveColumns
+152 (int (*)(...))QSortFilterProxyModel::fetchMore
+156 (int (*)(...))QSortFilterProxyModel::canFetchMore
+160 (int (*)(...))QSortFilterProxyModel::flags
+164 (int (*)(...))QSortFilterProxyModel::sort
+168 (int (*)(...))QSortFilterProxyModel::buddy
+172 (int (*)(...))QSortFilterProxyModel::match
+176 (int (*)(...))QSortFilterProxyModel::span
+180 (int (*)(...))QAbstractItemModel::roleNames
+184 (int (*)(...))QAbstractProxyModel::submit
+188 (int (*)(...))QAbstractProxyModel::revert
+192 (int (*)(...))QSortFilterProxyModel::setSourceModel
+196 (int (*)(...))QSortFilterProxyModel::mapToSource
+200 (int (*)(...))QSortFilterProxyModel::mapFromSource
+204 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+208 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+212 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+216 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+220 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=8 align=4
+ base size=8 base align=4
+QSortFilterProxyModel (0xb4bc3f3c) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 8u)
+ QAbstractProxyModel (0xb4bc3f78) 0
+ primary-for QSortFilterProxyModel (0xb4bc3f3c)
+ QAbstractItemModel (0xb4bc3fb4) 0
+ primary-for QAbstractProxyModel (0xb4bc3f78)
+ QObject (0xb442c3b8) 0
+ primary-for QAbstractItemModel (0xb4bc3fb4)
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0xb442cf50) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 48u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI16QStringListModel)
+8 (int (*)(...))QStringListModel::metaObject
+12 (int (*)(...))QStringListModel::qt_metacast
+16 (int (*)(...))QStringListModel::qt_metacall
+20 (int (*)(...))QStringListModel::~QStringListModel
+24 (int (*)(...))QStringListModel::~QStringListModel
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QAbstractListModel::index
+60 (int (*)(...))QAbstractListModel::parent
+64 (int (*)(...))QStringListModel::sibling
+68 (int (*)(...))QStringListModel::rowCount
+72 (int (*)(...))QAbstractListModel::columnCount
+76 (int (*)(...))QAbstractListModel::hasChildren
+80 (int (*)(...))QStringListModel::data
+84 (int (*)(...))QStringListModel::setData
+88 (int (*)(...))QAbstractItemModel::headerData
+92 (int (*)(...))QAbstractItemModel::setHeaderData
+96 (int (*)(...))QAbstractItemModel::itemData
+100 (int (*)(...))QAbstractItemModel::setItemData
+104 (int (*)(...))QAbstractItemModel::mimeTypes
+108 (int (*)(...))QAbstractItemModel::mimeData
+112 (int (*)(...))QAbstractItemModel::canDropMimeData
+116 (int (*)(...))QAbstractListModel::dropMimeData
+120 (int (*)(...))QStringListModel::supportedDropActions
+124 (int (*)(...))QAbstractItemModel::supportedDragActions
+128 (int (*)(...))QStringListModel::insertRows
+132 (int (*)(...))QAbstractItemModel::insertColumns
+136 (int (*)(...))QStringListModel::removeRows
+140 (int (*)(...))QAbstractItemModel::removeColumns
+144 (int (*)(...))QAbstractItemModel::moveRows
+148 (int (*)(...))QAbstractItemModel::moveColumns
+152 (int (*)(...))QAbstractItemModel::fetchMore
+156 (int (*)(...))QAbstractItemModel::canFetchMore
+160 (int (*)(...))QStringListModel::flags
+164 (int (*)(...))QStringListModel::sort
+168 (int (*)(...))QAbstractItemModel::buddy
+172 (int (*)(...))QAbstractItemModel::match
+176 (int (*)(...))QAbstractItemModel::span
+180 (int (*)(...))QAbstractItemModel::roleNames
+184 (int (*)(...))QAbstractItemModel::submit
+188 (int (*)(...))QAbstractItemModel::revert
+
+Class QStringListModel
+ size=12 align=4
+ base size=12 base align=4
+QStringListModel (0xb445f000) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 8u)
+ QAbstractListModel (0xb445f03c) 0
+ primary-for QStringListModel (0xb445f000)
+ QAbstractItemModel (0xb445f078) 0
+ primary-for QAbstractListModel (0xb445f03c)
+ QObject (0xb442ce70) 0
+ primary-for QAbstractItemModel (0xb445f078)
+
+Class QJsonValue
+ size=16 align=4
+ base size=16 base align=4
+QJsonValue (0xb4462578) 0
+
+Class QJsonValueRef
+ size=8 align=4
+ base size=8 base align=4
+QJsonValueRef (0xb44798f8) 0
+
+Class QJsonArray::iterator
+ size=8 align=4
+ base size=8 base align=4
+QJsonArray::iterator (0xb44944d0) 0
+
+Class QJsonArray::const_iterator
+ size=8 align=4
+ base size=8 base align=4
+QJsonArray::const_iterator (0xb449d3b8) 0
+
+Class QJsonArray
+ size=8 align=4
+ base size=8 base align=4
+QJsonArray (0xb4484fc0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0xb44c8770) 0
+
+Class QJsonDocument
+ size=4 align=4
+ base size=4 base align=4
+QJsonDocument (0xb44c8850) 0
+
+Class QJsonObject::iterator
+ size=8 align=4
+ base size=8 base align=4
+QJsonObject::iterator (0xb44d1620) 0
+
+Class QJsonObject::const_iterator
+ size=8 align=4
+ base size=8 base align=4
+QJsonObject::const_iterator (0xb44de000) 0
+
+Class QJsonObject
+ size=8 align=4
+ base size=8 base align=4
+QJsonObject (0xb44d11c0) 0
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0xb4300ab8) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI10QEventLoop)
+8 (int (*)(...))QEventLoop::metaObject
+12 (int (*)(...))QEventLoop::qt_metacast
+16 (int (*)(...))QEventLoop::qt_metacall
+20 (int (*)(...))QEventLoop::~QEventLoop
+24 (int (*)(...))QEventLoop::~QEventLoop
+28 (int (*)(...))QEventLoop::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=8 align=4
+ base size=8 base align=4
+QEventLoop (0xb445f0b4) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 8u)
+ QObject (0xb43009d8) 0
+ primary-for QEventLoop (0xb445f0b4)
+
+Class QEventLoopLocker
+ size=4 align=4
+ base size=4 base align=4
+QEventLoopLocker (0xb4320038) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0xb4320428) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0xb4320460) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 28u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+8 (int (*)(...))QAbstractEventDispatcher::metaObject
+12 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+16 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+20 (int (*)(...))QAbstractEventDispatcher::~QAbstractEventDispatcher
+24 (int (*)(...))QAbstractEventDispatcher::~QAbstractEventDispatcher
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+68 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+76 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+84 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+92 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+100 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QAbstractEventDispatcher::startingUp
+108 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=8 align=4
+ base size=8 base align=4
+QAbstractEventDispatcher (0xb445f168) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 8u)
+ QObject (0xb4320348) 0
+ primary-for QAbstractEventDispatcher (0xb445f168)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+8 (int (*)(...))QAbstractNativeEventFilter::~QAbstractNativeEventFilter
+12 (int (*)(...))QAbstractNativeEventFilter::~QAbstractNativeEventFilter
+16 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=8 align=4
+ base size=8 base align=4
+QAbstractNativeEventFilter (0xb4320fc0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 8u)
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0xb4333268) 0
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI6QEvent)
+8 (int (*)(...))QEvent::~QEvent
+12 (int (*)(...))QEvent::~QEvent
+
+Class QEvent
+ size=12 align=4
+ base size=12 base align=4
+QEvent (0xb4333a10) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 8u)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QTimerEvent)
+8 (int (*)(...))QTimerEvent::~QTimerEvent
+12 (int (*)(...))QTimerEvent::~QTimerEvent
+
+Class QTimerEvent
+ size=16 align=4
+ base size=16 base align=4
+QTimerEvent (0xb445f258) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 8u)
+ QEvent (0xb434d578) 0
+ primary-for QTimerEvent (0xb445f258)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QChildEvent)
+8 (int (*)(...))QChildEvent::~QChildEvent
+12 (int (*)(...))QChildEvent::~QChildEvent
+
+Class QChildEvent
+ size=16 align=4
+ base size=16 base align=4
+QChildEvent (0xb445f294) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 8u)
+ QEvent (0xb434d738) 0
+ primary-for QChildEvent (0xb445f294)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+8 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+12 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+
+Class QDynamicPropertyChangeEvent
+ size=16 align=4
+ base size=16 base align=4
+QDynamicPropertyChangeEvent (0xb445f2d0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 8u)
+ QEvent (0xb434dd58) 0
+ primary-for QDynamicPropertyChangeEvent (0xb445f2d0)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+8 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+12 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+
+Class QDeferredDeleteEvent
+ size=16 align=4
+ base size=16 base align=4
+QDeferredDeleteEvent (0xb445f30c) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 8u)
+ QEvent (0xb434df18) 0
+ primary-for QDeferredDeleteEvent (0xb445f30c)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0xb43580e0) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI16QCoreApplication)
+8 (int (*)(...))QCoreApplication::metaObject
+12 (int (*)(...))QCoreApplication::qt_metacast
+16 (int (*)(...))QCoreApplication::qt_metacall
+20 (int (*)(...))QCoreApplication::~QCoreApplication
+24 (int (*)(...))QCoreApplication::~QCoreApplication
+28 (int (*)(...))QCoreApplication::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QCoreApplication::notify
+60 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=8 align=4
+ base size=8 base align=4
+QCoreApplication (0xb445f348) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 8u)
+ QObject (0xb4358000) 0
+ primary-for QCoreApplication (0xb445f348)
+
+Class __exception
+ size=32 align=4
+ base size=32 base align=4
+__exception (0xb4369150) 0
+
+Class QMetaMethod
+ size=8 align=4
+ base size=8 base align=4
+QMetaMethod (0xb4369a48) 0
+
+Class QMetaEnum
+ size=8 align=4
+ base size=8 base align=4
+QMetaEnum (0xb43b2e38) 0
+
+Class QMetaProperty
+ size=20 align=4
+ base size=20 base align=4
+QMetaProperty (0xb43be2d8) 0
+
+Class QMetaClassInfo
+ size=8 align=4
+ base size=8 base align=4
+QMetaClassInfo (0xb43be578) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0xb43bea10) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI9QMimeData)
+8 (int (*)(...))QMimeData::metaObject
+12 (int (*)(...))QMimeData::qt_metacast
+16 (int (*)(...))QMimeData::qt_metacall
+20 (int (*)(...))QMimeData::~QMimeData
+24 (int (*)(...))QMimeData::~QMimeData
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QMimeData::hasFormat
+60 (int (*)(...))QMimeData::formats
+64 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=8 align=4
+ base size=8 base align=4
+QMimeData (0xb445f384) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 8u)
+ QObject (0xb43be930) 0
+ primary-for QMimeData (0xb445f384)
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0xb43d61c0) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+8 (int (*)(...))QObjectCleanupHandler::metaObject
+12 (int (*)(...))QObjectCleanupHandler::qt_metacast
+16 (int (*)(...))QObjectCleanupHandler::qt_metacall
+20 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+24 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=12 align=4
+ base size=12 base align=4
+QObjectCleanupHandler (0xb445f3c0) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 8u)
+ QObject (0xb43d60e0) 0
+ primary-for QObjectCleanupHandler (0xb445f3c0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0xb43d6cb0) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI13QSharedMemory)
+8 (int (*)(...))QSharedMemory::metaObject
+12 (int (*)(...))QSharedMemory::qt_metacast
+16 (int (*)(...))QSharedMemory::qt_metacall
+20 (int (*)(...))QSharedMemory::~QSharedMemory
+24 (int (*)(...))QSharedMemory::~QSharedMemory
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=8 align=4
+ base size=8 base align=4
+QSharedMemory (0xb445f3fc) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 8u)
+ QObject (0xb43d6bd0) 0
+ primary-for QSharedMemory (0xb445f3fc)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0xb41f7700) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI13QSignalMapper)
+8 (int (*)(...))QSignalMapper::metaObject
+12 (int (*)(...))QSignalMapper::qt_metacast
+16 (int (*)(...))QSignalMapper::qt_metacall
+20 (int (*)(...))QSignalMapper::~QSignalMapper
+24 (int (*)(...))QSignalMapper::~QSignalMapper
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=8 align=4
+ base size=8 base align=4
+QSignalMapper (0xb445f438) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 8u)
+ QObject (0xb41f7620) 0
+ primary-for QSignalMapper (0xb445f438)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0xb4203380) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI15QSocketNotifier)
+8 (int (*)(...))QSocketNotifier::metaObject
+12 (int (*)(...))QSocketNotifier::qt_metacast
+16 (int (*)(...))QSocketNotifier::qt_metacall
+20 (int (*)(...))QSocketNotifier::~QSocketNotifier
+24 (int (*)(...))QSocketNotifier::~QSocketNotifier
+28 (int (*)(...))QSocketNotifier::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=8 align=4
+ base size=8 base align=4
+QSocketNotifier (0xb445f474) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 8u)
+ QObject (0xb42032a0) 0
+ primary-for QSocketNotifier (0xb445f474)
+
+Class QSystemSemaphore
+ size=4 align=4
+ base size=4 base align=4
+QSystemSemaphore (0xb4203b98) 0
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0xb421a118) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI6QTimer)
+8 (int (*)(...))QTimer::metaObject
+12 (int (*)(...))QTimer::qt_metacast
+16 (int (*)(...))QTimer::qt_metacall
+20 (int (*)(...))QTimer::~QTimer
+24 (int (*)(...))QTimer::~QTimer
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QTimer::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=24 align=4
+ base size=21 base align=4
+QTimer (0xb445f4ec) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 8u)
+ QObject (0xb421a038) 0
+ primary-for QTimer (0xb445f4ec)
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0xb421afc0) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QTranslator)
+8 (int (*)(...))QTranslator::metaObject
+12 (int (*)(...))QTranslator::qt_metacast
+16 (int (*)(...))QTranslator::qt_metacall
+20 (int (*)(...))QTranslator::~QTranslator
+24 (int (*)(...))QTranslator::~QTranslator
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QTranslator::translate
+60 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=8 align=4
+ base size=8 base align=4
+QTranslator (0xb445f528) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 8u)
+ QObject (0xb421aee0) 0
+ primary-for QTranslator (0xb445f528)
+
+Class QMimeType
+ size=4 align=4
+ base size=4 base align=4
+QMimeType (0xb422e850) 0
+
+Class QMimeDatabase
+ size=4 align=4
+ base size=4 base align=4
+QMimeDatabase (0xb422ec40) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI17QFactoryInterface)
+8 (int (*)(...))QFactoryInterface::~QFactoryInterface
+12 (int (*)(...))QFactoryInterface::~QFactoryInterface
+16 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=4 align=4
+ base size=4 base align=4
+QFactoryInterface (0xb42453b8) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 8u)
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0xb4245888) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI8QLibrary)
+8 (int (*)(...))QLibrary::metaObject
+12 (int (*)(...))QLibrary::qt_metacast
+16 (int (*)(...))QLibrary::qt_metacall
+20 (int (*)(...))QLibrary::~QLibrary
+24 (int (*)(...))QLibrary::~QLibrary
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=16 align=4
+ base size=13 base align=4
+QLibrary (0xb445f618) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 8u)
+ QObject (0xb42457a8) 0
+ primary-for QLibrary (0xb445f618)
+
+Class QStaticPlugin
+ size=8 align=4
+ base size=8 base align=4
+QStaticPlugin (0xb425bf18) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0xb4273000) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI13QPluginLoader)
+8 (int (*)(...))QPluginLoader::metaObject
+12 (int (*)(...))QPluginLoader::qt_metacast
+16 (int (*)(...))QPluginLoader::qt_metacall
+20 (int (*)(...))QPluginLoader::~QPluginLoader
+24 (int (*)(...))QPluginLoader::~QPluginLoader
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=16 align=4
+ base size=13 base align=4
+QPluginLoader (0xb445f690) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 8u)
+ QObject (0xb425bf50) 0
+ primary-for QPluginLoader (0xb445f690)
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0xb4273738) 0
+
+Class QAbstractState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractState::QPrivateSignal (0xb4287b98) 0 empty
+
+Vtable for QAbstractState
+QAbstractState::_ZTV14QAbstractState: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI14QAbstractState)
+8 (int (*)(...))QAbstractState::metaObject
+12 (int (*)(...))QAbstractState::qt_metacast
+16 (int (*)(...))QAbstractState::qt_metacall
+20 (int (*)(...))QAbstractState::~QAbstractState
+24 (int (*)(...))QAbstractState::~QAbstractState
+28 (int (*)(...))QAbstractState::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractState
+ size=8 align=4
+ base size=8 base align=4
+QAbstractState (0xb445f6cc) 0
+ vptr=((& QAbstractState::_ZTV14QAbstractState) + 8u)
+ QObject (0xb4287ab8) 0
+ primary-for QAbstractState (0xb445f6cc)
+
+Class QAbstractTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTransition::QPrivateSignal (0xb42983b8) 0 empty
+
+Vtable for QAbstractTransition
+QAbstractTransition::_ZTV19QAbstractTransition: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI19QAbstractTransition)
+8 (int (*)(...))QAbstractTransition::metaObject
+12 (int (*)(...))QAbstractTransition::qt_metacast
+16 (int (*)(...))QAbstractTransition::qt_metacall
+20 (int (*)(...))QAbstractTransition::~QAbstractTransition
+24 (int (*)(...))QAbstractTransition::~QAbstractTransition
+28 (int (*)(...))QAbstractTransition::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractTransition
+ size=8 align=4
+ base size=8 base align=4
+QAbstractTransition (0xb445f708) 0
+ vptr=((& QAbstractTransition::_ZTV19QAbstractTransition) + 8u)
+ QObject (0xb42982d8) 0
+ primary-for QAbstractTransition (0xb445f708)
+
+Class QEventTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventTransition::QPrivateSignal (0xb4298bd0) 0 empty
+
+Vtable for QEventTransition
+QEventTransition::_ZTV16QEventTransition: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI16QEventTransition)
+8 (int (*)(...))QEventTransition::metaObject
+12 (int (*)(...))QEventTransition::qt_metacast
+16 (int (*)(...))QEventTransition::qt_metacall
+20 (int (*)(...))QEventTransition::~QEventTransition
+24 (int (*)(...))QEventTransition::~QEventTransition
+28 (int (*)(...))QEventTransition::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QEventTransition::eventTest
+60 (int (*)(...))QEventTransition::onTransition
+
+Class QEventTransition
+ size=8 align=4
+ base size=8 base align=4
+QEventTransition (0xb445f744) 0
+ vptr=((& QEventTransition::_ZTV16QEventTransition) + 8u)
+ QAbstractTransition (0xb445f780) 0
+ primary-for QEventTransition (0xb445f744)
+ QObject (0xb4298af0) 0
+ primary-for QAbstractTransition (0xb445f780)
+
+Class QFinalState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFinalState::QPrivateSignal (0xb42ad690) 0 empty
+
+Vtable for QFinalState
+QFinalState::_ZTV11QFinalState: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QFinalState)
+8 (int (*)(...))QFinalState::metaObject
+12 (int (*)(...))QFinalState::qt_metacast
+16 (int (*)(...))QFinalState::qt_metacall
+20 (int (*)(...))QFinalState::~QFinalState
+24 (int (*)(...))QFinalState::~QFinalState
+28 (int (*)(...))QFinalState::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QFinalState::onEntry
+60 (int (*)(...))QFinalState::onExit
+
+Class QFinalState
+ size=8 align=4
+ base size=8 base align=4
+QFinalState (0xb445f7bc) 0
+ vptr=((& QFinalState::_ZTV11QFinalState) + 8u)
+ QAbstractState (0xb445f7f8) 0
+ primary-for QFinalState (0xb445f7bc)
+ QObject (0xb42ad5b0) 0
+ primary-for QAbstractState (0xb445f7f8)
+
+Class QHistoryState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHistoryState::QPrivateSignal (0xb42ade38) 0 empty
+
+Vtable for QHistoryState
+QHistoryState::_ZTV13QHistoryState: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI13QHistoryState)
+8 (int (*)(...))QHistoryState::metaObject
+12 (int (*)(...))QHistoryState::qt_metacast
+16 (int (*)(...))QHistoryState::qt_metacall
+20 (int (*)(...))QHistoryState::~QHistoryState
+24 (int (*)(...))QHistoryState::~QHistoryState
+28 (int (*)(...))QHistoryState::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QHistoryState::onEntry
+60 (int (*)(...))QHistoryState::onExit
+
+Class QHistoryState
+ size=8 align=4
+ base size=8 base align=4
+QHistoryState (0xb445f834) 0
+ vptr=((& QHistoryState::_ZTV13QHistoryState) + 8u)
+ QAbstractState (0xb445f870) 0
+ primary-for QHistoryState (0xb445f834)
+ QObject (0xb42add58) 0
+ primary-for QAbstractState (0xb445f870)
+
+Class QSignalTransition::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalTransition::QPrivateSignal (0xb42be7e0) 0 empty
+
+Vtable for QSignalTransition
+QSignalTransition::_ZTV17QSignalTransition: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI17QSignalTransition)
+8 (int (*)(...))QSignalTransition::metaObject
+12 (int (*)(...))QSignalTransition::qt_metacast
+16 (int (*)(...))QSignalTransition::qt_metacall
+20 (int (*)(...))QSignalTransition::~QSignalTransition
+24 (int (*)(...))QSignalTransition::~QSignalTransition
+28 (int (*)(...))QSignalTransition::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QSignalTransition::eventTest
+60 (int (*)(...))QSignalTransition::onTransition
+
+Class QSignalTransition
+ size=8 align=4
+ base size=8 base align=4
+QSignalTransition (0xb445f8ac) 0
+ vptr=((& QSignalTransition::_ZTV17QSignalTransition) + 8u)
+ QAbstractTransition (0xb445f8e8) 0
+ primary-for QSignalTransition (0xb445f8ac)
+ QObject (0xb42be700) 0
+ primary-for QAbstractTransition (0xb445f8e8)
+
+Class QState::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QState::QPrivateSignal (0xb42cd0e0) 0 empty
+
+Vtable for QState
+QState::_ZTV6QState: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI6QState)
+8 (int (*)(...))QState::metaObject
+12 (int (*)(...))QState::qt_metacast
+16 (int (*)(...))QState::qt_metacall
+20 (int (*)(...))QState::~QState
+24 (int (*)(...))QState::~QState
+28 (int (*)(...))QState::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QState::onEntry
+60 (int (*)(...))QState::onExit
+
+Class QState
+ size=8 align=4
+ base size=8 base align=4
+QState (0xb445f924) 0
+ vptr=((& QState::_ZTV6QState) + 8u)
+ QAbstractState (0xb445f960) 0
+ primary-for QState (0xb445f924)
+ QObject (0xb42cd000) 0
+ primary-for QAbstractState (0xb445f960)
+
+Class QStateMachine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStateMachine::QPrivateSignal (0xb42cdee0) 0 empty
+
+Vtable for QStateMachine::SignalEvent
+QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTIN13QStateMachine11SignalEventE)
+8 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+12 (int (*)(...))QStateMachine::SignalEvent::~SignalEvent
+
+Class QStateMachine::SignalEvent
+ size=24 align=4
+ base size=24 base align=4
+QStateMachine::SignalEvent (0xb445fa50) 0
+ vptr=((& QStateMachine::SignalEvent::_ZTVN13QStateMachine11SignalEventE) + 8u)
+ QEvent (0xb42cdf18) 0
+ primary-for QStateMachine::SignalEvent (0xb445fa50)
+
+Vtable for QStateMachine::WrappedEvent
+QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTIN13QStateMachine12WrappedEventE)
+8 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+12 (int (*)(...))QStateMachine::WrappedEvent::~WrappedEvent
+
+Class QStateMachine::WrappedEvent
+ size=20 align=4
+ base size=20 base align=4
+QStateMachine::WrappedEvent (0xb445fa8c) 0
+ vptr=((& QStateMachine::WrappedEvent::_ZTVN13QStateMachine12WrappedEventE) + 8u)
+ QEvent (0xb42e0188) 0
+ primary-for QStateMachine::WrappedEvent (0xb445fa8c)
+
+Vtable for QStateMachine
+QStateMachine::_ZTV13QStateMachine: 20u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI13QStateMachine)
+8 (int (*)(...))QStateMachine::metaObject
+12 (int (*)(...))QStateMachine::qt_metacast
+16 (int (*)(...))QStateMachine::qt_metacall
+20 (int (*)(...))QStateMachine::~QStateMachine
+24 (int (*)(...))QStateMachine::~QStateMachine
+28 (int (*)(...))QStateMachine::event
+32 (int (*)(...))QStateMachine::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QStateMachine::onEntry
+60 (int (*)(...))QStateMachine::onExit
+64 (int (*)(...))QStateMachine::beginSelectTransitions
+68 (int (*)(...))QStateMachine::endSelectTransitions
+72 (int (*)(...))QStateMachine::beginMicrostep
+76 (int (*)(...))QStateMachine::endMicrostep
+
+Class QStateMachine
+ size=8 align=4
+ base size=8 base align=4
+QStateMachine (0xb445f99c) 0
+ vptr=((& QStateMachine::_ZTV13QStateMachine) + 8u)
+ QState (0xb445f9d8) 0
+ primary-for QStateMachine (0xb445f99c)
+ QAbstractState (0xb445fa14) 0
+ primary-for QState (0xb445f9d8)
+ QObject (0xb42cde00) 0
+ primary-for QAbstractState (0xb445fa14)
+
+Vtable for QException
+QException::_ZTV10QException: 7u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI10QException)
+8 (int (*)(...))QException::~QException
+12 (int (*)(...))QException::~QException
+16 (int (*)(...))std::exception::what
+20 (int (*)(...))QException::raise
+24 (int (*)(...))QException::clone
+
+Class QException
+ size=4 align=4
+ base size=4 base align=4
+QException (0xb445fac8) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 8u)
+ std::exception (0xb40eda10) 0 nearly-empty
+ primary-for QException (0xb445fac8)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI19QUnhandledException)
+8 (int (*)(...))QUnhandledException::~QUnhandledException
+12 (int (*)(...))QUnhandledException::~QUnhandledException
+16 (int (*)(...))std::exception::what
+20 (int (*)(...))QUnhandledException::raise
+24 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=4 align=4
+ base size=4 base align=4
+QUnhandledException (0xb445fb04) 0 nearly-empty
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 8u)
+ QException (0xb445fb40) 0 nearly-empty
+ primary-for QUnhandledException (0xb445fb04)
+ std::exception (0xb40edb28) 0 nearly-empty
+ primary-for QException (0xb445fb40)
+
+Class QtPrivate::ExceptionHolder
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::ExceptionHolder (0xb40edc40) 0
+
+Class QtPrivate::ExceptionStore
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::ExceptionStore (0xb40ede70) 0
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI9QRunnable)
+8 (int (*)(...))__cxa_pure_virtual
+12 (int (*)(...))QRunnable::~QRunnable
+16 (int (*)(...))QRunnable::~QRunnable
+
+Class QRunnable
+ size=8 align=4
+ base size=8 base align=4
+QRunnable (0xb40edea8) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 8u)
+
+Class QBasicMutex
+ size=4 align=4
+ base size=4 base align=4
+QBasicMutex (0xb4108428) 0
+
+Class QMutex
+ size=4 align=4
+ base size=4 base align=4
+QMutex (0xb445fbf4) 0
+ QBasicMutex (0xb4108d58) 0
+
+Class QMutexLocker
+ size=4 align=4
+ base size=4 base align=4
+QMutexLocker (0xb4113150) 0
+
+Class QtPrivate::ResultItem
+ size=8 align=4
+ base size=8 base align=4
+QtPrivate::ResultItem (0xb411d1f8) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=8 align=4
+ base size=8 base align=4
+QtPrivate::ResultIteratorBase (0xb411dc08) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+8 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+12 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=28 align=4
+ base size=28 base align=4
+QtPrivate::ResultStoreBase (0xb4139118) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 8u)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+8 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+12 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=8 align=4
+ base size=8 base align=4
+QFutureInterfaceBase (0xb4139850) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 8u)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0xb41ae1f8) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+8 (int (*)(...))QFutureWatcherBase::metaObject
+12 (int (*)(...))QFutureWatcherBase::qt_metacast
+16 (int (*)(...))QFutureWatcherBase::qt_metacall
+20 (int (*)(...))QFutureWatcherBase::~QFutureWatcherBase
+24 (int (*)(...))QFutureWatcherBase::~QFutureWatcherBase
+28 (int (*)(...))QFutureWatcherBase::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QFutureWatcherBase::connectNotify
+52 (int (*)(...))QFutureWatcherBase::disconnectNotify
+56 (int (*)(...))__cxa_pure_virtual
+60 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=8 align=4
+ base size=8 base align=4
+QFutureWatcherBase (0xb445fdd4) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 8u)
+ QObject (0xb41ae118) 0
+ primary-for QFutureWatcherBase (0xb445fdd4)
+
+Class QReadWriteLock
+ size=4 align=4
+ base size=4 base align=4
+QReadWriteLock (0xb41c9690) 0
+
+Class QReadLocker
+ size=4 align=4
+ base size=4 base align=4
+QReadLocker (0xb41c9a10) 0
+
+Class QWriteLocker
+ size=4 align=4
+ base size=4 base align=4
+QWriteLocker (0xb41d2c40) 0
+
+Class QSemaphore
+ size=4 align=4
+ base size=4 base align=4
+QSemaphore (0xb41d8e70) 0
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0xb3fdd1f8) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI7QThread)
+8 (int (*)(...))QThread::metaObject
+12 (int (*)(...))QThread::qt_metacast
+16 (int (*)(...))QThread::qt_metacall
+20 (int (*)(...))QThread::~QThread
+24 (int (*)(...))QThread::~QThread
+28 (int (*)(...))QThread::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QThread::run
+
+Class QThread
+ size=8 align=4
+ base size=8 base align=4
+QThread (0xb445ff78) 0
+ vptr=((& QThread::_ZTV7QThread) + 8u)
+ QObject (0xb3fdd118) 0
+ primary-for QThread (0xb445ff78)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0xb3fddaf0) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QThreadPool)
+8 (int (*)(...))QThreadPool::metaObject
+12 (int (*)(...))QThreadPool::qt_metacast
+16 (int (*)(...))QThreadPool::qt_metacall
+20 (int (*)(...))QThreadPool::~QThreadPool
+24 (int (*)(...))QThreadPool::~QThreadPool
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=8 align=4
+ base size=8 base align=4
+QThreadPool (0xb3feb000) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 8u)
+ QObject (0xb3fdda10) 0
+ primary-for QThreadPool (0xb3feb000)
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0xb3ff5038) 0
+
+Class QWaitCondition
+ size=4 align=4
+ base size=4 base align=4
+QWaitCondition (0xb3ff5460) 0
+
+Class QBitArray
+ size=4 align=4
+ base size=4 base align=4
+QBitArray (0xb402e428) 0
+
+Class QBitRef
+ size=8 align=4
+ base size=8 base align=4
+QBitRef (0xb404cf88) 0
+
+Class QByteArrayMatcher::Data
+ size=264 align=4
+ base size=264 base align=4
+QByteArrayMatcher::Data (0xb4068000) 0
+
+Class QByteArrayMatcher
+ size=1032 align=4
+ base size=1032 base align=4
+QByteArrayMatcher (0xb405ace8) 0
+
+Class QCryptographicHash
+ size=4 align=4
+ base size=4 base align=4
+QCryptographicHash (0xb40688f8) 0
+
+Class QElapsedTimer
+ size=16 align=4
+ base size=16 base align=4
+QElapsedTimer (0xb4068c40) 0
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0xb4088150) 0
+
+Class QPointF
+ size=16 align=4
+ base size=16 base align=4
+QPointF (0xb40a1c78) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0xb40c1b60) 0
+
+Class QLineF
+ size=32 align=4
+ base size=32 base align=4
+QLineF (0xb40dbce8) 0
+
+Class QLinkedListData
+ size=20 align=4
+ base size=20 base align=4
+QLinkedListData (0xb3f071f8) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0xb3f600e0) 0
+
+Class QSizeF
+ size=16 align=4
+ base size=16 base align=4
+QSizeF (0xb3f7bb98) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0xb3fa27e0) 0
+
+Class QRectF
+ size=32 align=4
+ base size=32 base align=4
+QRectF (0xb3de7070) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0xb3e2b0e0) 0
+
+Class QMessageAuthenticationCode
+ size=4 align=4
+ base size=4 base align=4
+QMessageAuthenticationCode (0xb3e45f18) 0
+
+Class QRegularExpression
+ size=4 align=4
+ base size=4 base align=4
+QRegularExpression (0xb3e57268) 0
+
+Class QRegularExpressionMatch
+ size=4 align=4
+ base size=4 base align=4
+QRegularExpressionMatch (0xb3e8ed90) 0
+
+Class QRegularExpressionMatchIterator
+ size=4 align=4
+ base size=4 base align=4
+QRegularExpressionMatchIterator (0xb3ea14d0) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0xb3ea1f18) 0 empty
+
+Class QTextBoundaryFinder
+ size=28 align=4
+ base size=28 base align=4
+QTextBoundaryFinder (0xb3cfb9a0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0xb3d2c150) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI9QTimeLine)
+8 (int (*)(...))QTimeLine::metaObject
+12 (int (*)(...))QTimeLine::qt_metacast
+16 (int (*)(...))QTimeLine::qt_metacall
+20 (int (*)(...))QTimeLine::~QTimeLine
+24 (int (*)(...))QTimeLine::~QTimeLine
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QTimeLine::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=8 align=4
+ base size=8 base align=4
+QTimeLine (0xb3feb8e8) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 8u)
+ QObject (0xb3d2c070) 0
+ primary-for QTimeLine (0xb3feb8e8)
+
+Class QXmlStreamStringRef
+ size=12 align=4
+ base size=12 base align=4
+QXmlStreamStringRef (0xb3d2cc40) 0
+
+Class QXmlStreamAttribute
+ size=56 align=4
+ base size=53 base align=4
+QXmlStreamAttribute (0xb3d44b98) 0
+
+Class QXmlStreamAttributes
+ size=4 align=4
+ base size=4 base align=4
+QXmlStreamAttributes (0xb3feb960) 0
+ QVector<QXmlStreamAttribute> (0xb3d4ce70) 0
+
+Class QXmlStreamNamespaceDeclaration
+ size=28 align=4
+ base size=28 base align=4
+QXmlStreamNamespaceDeclaration (0xb3d75150) 0
+
+Class QXmlStreamNotationDeclaration
+ size=40 align=4
+ base size=40 base align=4
+QXmlStreamNotationDeclaration (0xb3d75ab8) 0
+
+Class QXmlStreamEntityDeclaration
+ size=64 align=4
+ base size=64 base align=4
+QXmlStreamEntityDeclaration (0xb3d82508) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+8 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+12 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+16 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+20 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=4 align=4
+ base size=4 base align=4
+QXmlStreamEntityResolver (0xb3d981c0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 8u)
+
+Class QXmlStreamReader
+ size=4 align=4
+ base size=4 base align=4
+QXmlStreamReader (0xb3d98268) 0
+
+Class QXmlStreamWriter
+ size=4 align=4
+ base size=4 base align=4
+QXmlStreamWriter (0xb3db7850) 0
+
+Class QSerialPort::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSerialPort::QPrivateSignal (0xb3db7fc0) 0 empty
+
+Vtable for QSerialPort
+QSerialPort::_ZTV11QSerialPort: 30u entries
+0 (int (*)(...))0
+4 (int (*)(...))(& _ZTI11QSerialPort)
+8 (int (*)(...))QSerialPort::metaObject
+12 (int (*)(...))QSerialPort::qt_metacast
+16 (int (*)(...))QSerialPort::qt_metacall
+20 (int (*)(...))QSerialPort::~QSerialPort
+24 (int (*)(...))QSerialPort::~QSerialPort
+28 (int (*)(...))QObject::event
+32 (int (*)(...))QObject::eventFilter
+36 (int (*)(...))QObject::timerEvent
+40 (int (*)(...))QObject::childEvent
+44 (int (*)(...))QObject::customEvent
+48 (int (*)(...))QObject::connectNotify
+52 (int (*)(...))QObject::disconnectNotify
+56 (int (*)(...))QSerialPort::isSequential
+60 (int (*)(...))QSerialPort::open
+64 (int (*)(...))QSerialPort::close
+68 (int (*)(...))QIODevice::pos
+72 (int (*)(...))QIODevice::size
+76 (int (*)(...))QIODevice::seek
+80 (int (*)(...))QSerialPort::atEnd
+84 (int (*)(...))QIODevice::reset
+88 (int (*)(...))QSerialPort::bytesAvailable
+92 (int (*)(...))QSerialPort::bytesToWrite
+96 (int (*)(...))QSerialPort::canReadLine
+100 (int (*)(...))QSerialPort::waitForReadyRead
+104 (int (*)(...))QSerialPort::waitForBytesWritten
+108 (int (*)(...))QSerialPort::readData
+112 (int (*)(...))QSerialPort::readLineData
+116 (int (*)(...))QSerialPort::writeData
+
+Class QSerialPort
+ size=12 align=4
+ base size=12 base align=4
+QSerialPort (0xb3feb9d8) 0
+ vptr=((& QSerialPort::_ZTV11QSerialPort) + 8u)
+ QIODevice (0xb3feba14) 0
+ primary-for QSerialPort (0xb3feb9d8)
+ QObject (0xb3db7ee0) 0
+ primary-for QIODevice (0xb3feba14)
+
+Class QSerialPortInfo
+ size=4 align=4
+ base size=4 base align=4
+QSerialPortInfo (0xb3c12460) 0
+
diff --git a/tests/global/.gitignore b/tests/global/.gitignore
new file mode 100644
index 0000000..1e49c60
--- /dev/null
+++ b/tests/global/.gitignore
@@ -0,0 +1,2 @@
+Makefile
+global.pro
diff --git a/tests/global/global.cfg b/tests/global/global.cfg
new file mode 100644
index 0000000..8276a02
--- /dev/null
+++ b/tests/global/global.cfg
@@ -0,0 +1,5 @@
+<config>
+<modules>
+<module name="QtSerialPort" qtname="serialport"/>
+</modules>
+</config>