Merge remote-tracking branch 'origin/5.7.0' into 5.7

Conflicts:
	src/corelib/tools/qsimd_p.h

Change-Id: I7c6bfc5873d97ad7f51a540dd9c18b9359dde59f
This commit is contained in:
Liang Qi 2016-06-16 07:30:02 +02:00
commit c4e472ea10
27 changed files with 571 additions and 168 deletions

9
configure vendored
View File

@ -115,13 +115,6 @@ shellEscape()
echo "$@" | sed 's/ /\ /g'
}
shellQuoteLines()
{
# The call of the outer echo makes the shell word-split the output of
# the nested pipe, thus effectively converting newlines to spaces.
echo `echo "$1" | sed 's,^[^ ]* .*$,"&",'`
}
makeabs()
{
local FILE="$1"
@ -7154,8 +7147,6 @@ host_build {
QT_TARGET_ARCH = $CFG_ARCH
} else {
QT_ARCH = $CFG_ARCH
QMAKE_DEFAULT_LIBDIRS = `shellQuoteLines "$DEFAULT_LIBDIRS"`
QMAKE_DEFAULT_INCDIRS = `shellQuoteLines "$DEFAULT_INCDIRS"`
}
QT_CONFIG += $QT_CONFIG

395
dist/changes-5.7.0 vendored Normal file
View File

@ -0,0 +1,395 @@
Qt 5.7 introduces many new features and improvements along with bug fixes
over the 5.6.x series. Also, there is a change in the licensing terms.
For more details, refer to the online documentation included in this
distribution. The documentation is also available online:
http://doc.qt.io/qt-5.7
The Qt version 5.7 series is binary compatible with the 5.6.x series.
Applications compiled for 5.6 will continue to run with 5.7.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
http://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
This release contains all fixes included in the Qt 5.6.1 release.
****************************************************************************
* Important License Changes *
****************************************************************************
- Qt is no longer available under LGPLv2.1. The libraries in this package
are now available under the following licenses:
* Commercial License
* GNU General Public License v2.0 (LICENSE.GPL2) and later
* GNU Lesser General Public License v3.0 (LICENSE.LGPL3)
Note that a few Qt Libraries (currently Qt Charts and Qt Data
Visualization) are available only under the Commercial License and GPL
version 3.
- Qt Tools are now available under the following licenses:
* Commercial License
* GNU General Public License 3.0 (LICENSE.GPL3) with exceptions
described in the Qt Company GPL Exception 1.0 (LICENSE.GPL3-EXCEPT)
****************************************************************************
* Important Behavior Changes *
****************************************************************************
- Starting with Qt 5.7, Qt requires a C++11 compiler with support for
C++11 atomics. This affects user code too: Qt headers no longer compile
with a C++98 compiler. The minimum compiler versions for this release
are:
* GCC 4.7
* Clang 3.4 (found in XCode 5.1)
* Microsoft Visual Studio 2013
- Support for the following platforms was removed in this version:
* Apple OS X 10.7 (Lion)
* Microsoft Windows XP
* Microsoft Windows Vista
* Microsoft Windows Embedded Compact 7
* Microsoft Windows Embedded Compact 2013
- Support for DirectFB is no longer enabled by default, due to lack of
development in upstream. To re-enable the platform plugin, pass the
-directfb option to configure. If there is no renewed interest in this
platform, the support will be removed in Qt 5.8.
- Qt no longer ships any fonts.
- QtGui:
* [QTBUG-51962] When line height is specified in pixels, this is now
interpreted as the minimum line height rather than an absolute line
height to avoid overlaps. To get the old behavior, use the
-qt-line-height-type property in CSS and set it to "fixed".
* [QTBUG-46054] QFont::exactMatch() now returns false when the provided
typeface is an alias.
- QtWidgets:
* [QTBUG-21217] QLineEdit will now accept certain shortcut override
events even if it is read-only.
- configure & build system:
* Except on OS X, -system-harfbuzz is now the default.
* A few obsolete options with no effect are not recognized any more.
****************************************************************************
* Deprecation Notice *
****************************************************************************
- The following platforms or toolchains are deprecated and will be
removed as of Qt 5.8:
* Apple OS X 10.8 (Mountain Lion)
Deprecated platforms and toolchains continue to work until removed.
****************************************************************************
* Library *
****************************************************************************
QtCore
------
- [QTBUG-50548] Added qAsConst().
- Added qOverload() to select overloaded functions.
- Added qHash(std::pair), defined in <QHashFunctions>.
- Added qUtf16Printable().
- QLocale data updated to CLDR v29
- QDataStream:
* [QTBUG-44418] Added startTransaction(), commitTransaction(),
rollbackTransaction(), abortTransaction() functions to support read
transactions.
- QDebug:
* QDebug can now output std::vector, std::list, std::map, and
std::multimap.
- QFlags:
* [QTBUG-27100] Added setFlag method to set or unset a flag
- QHash/QSet:
* Added QHash::equal_range().
* Added erase(const_iterator).
- QIODevice:
* Added support for devices with multiple streams.
* [QTBUG-44418] Added startTransaction(), commitTransaction(),
rollbackTransaction(), isTransactionStarted() functions to support
read transactions.
- QJsonObject:
* Added value(), op[] const, find(), constFind(), contains() overloads
taking QLatin1String.
- QLocale:
* Added special value for double conversion precision to get shortest
accurate representation.
* Added additional flags in QLocale::NumberOption that allow generating
and parsing doubles in EcmaScript compliant format.
* [QTBUG-46595] Added an overload for toCurrencyString() that allows the
decimal precision to be specified.
- QMutex:
* Made the isRecursive() method be a const function so that it can be
called in const QMutex objects too.
- QObject:
* [QTBUG-52542] If the compiler supports variadic templates, functors
connected to signals will not be copied any more each time the signal is
emitted. This is the behavior that was exhibited with C++98 compilers.
- QReadWriteLock:
* Optimized QReadWriteLock to be faster and take less memory.
- QRect:
* Fixed integer overflow in center(). This fixes the result for some
corner-cases like a 1x1 rectangle at (INT_MIN, INT_MIN), for which the
previous implementation could return anything (due to invoking
undefined behavior), but commonly returned (0, 0).
- QRect/QRectF:
* Added transposed().
- QSharedPointer:
* Added support for debug printing via QDebug.
- QStorageInfo:
* [QTBUG-49498] Fixed a bug that caused QStorageInfo to report
information for the wrong filesystem if there is a mounted filesystem
at a path that is a prefix of the requested path (e.g., it would
report "/usr" filesystem for "/usrfoo").
- QString:
* Added resize(int, QChar) overload.
- QStringRef:
* Added subscript operator.
* Fixed relational operators against (const char*) to return the correct
result.
* Added reverse iterators, rbegin(), rend(), crbegin(), crend().
- QUuid:
* Added Objective-C NSUUID/CFUUIDRef converters.
- QVariant:
* [QTBUG-53384] Fixed QVariant::canConvert and conversion from integer
types to enumeration types.
- QVector:
* clear() now preserves capacity. To shed capacity, call squeeze() or
swap with a default-constructed QVector object, see the documentation
for an example.
- State Machine:
* Added constructor overload that takes a pointer-to-member for the
QSignalTransition.
QtDBus
------
- QDBusArgument:
* [QTBUG-53376] Deprecated relying on a streamable Base to stream a
Derived without providing operator<</>>() for Derived. No diagnostic
provided. Support will be removed in Qt 5.8.
QtGui
-----
- QWheelEvent::phase() now returns NoScrollPhase with non-phase-aware mice.
This is most mice and input devices except, for now, Apple's trackpads
and Magic Mouse. It is no longer necessary to set the
QT_ENABLE_MOUSE_WHEEL_TRACKING environment variable to enable the fix for
QTBUG-50199.
- [QTBUG-35972] Added QWheelEvent::inverted() to enable detection of the
"natural scrolling" system setting. This feature currently only works on
OS X, though support for other operating systems is planned.
- Image:
* [QTBUG-50745] Fixed possible crash in QImage::pixel() for mono or
indexed images.
- QIcon:
* Split fromTheme() in two different overloads, one of which will only
lazily lookup the icons, in order to speed up startup of applications
that initialize many icons that are not necessarily visible.
* fromTheme gained the ability to use the GTK icon cache to speed up
lookups.
- QPixmapCache:
* Added QPixmapCache::Key::isValid().
- QRawFont:
* Fixed kerning on advances in QRawFont for OS X and Windows.
- Tablet support:
* [QTBUG-47007][QTBUG-51618] A synthetic mouse event will no longer be
sent after every QTabletEvent, only after those which are not accepted
(as documented).
- Text:
* [QTBUG-35156] Added support for color font rendering with Freetype.
* [QTBUG-52048] Added QTextOption::ShowDocumentTerminator flag.
QtNetwork
---------
- QAuthenticator:
* [QTBUG-53338] Fixed crash when comparing a initialized QAuthenticator
with an uninitialized QAuthenticator.
QtWidgets
---------
- Moved QGtkStyle to the qtstyleplugins repository.
- [QTBUG-37580] Added the Qt::AA_UseStyleSheetPropagationInWidgetStyles
attribute which enables font and palette propagation for Qt Style
Sheets.
- [QTBUG-48138] QPinchGesture on OS X now behaves like on other platforms:
totalScaleFactor is the magnitude of the pinch and scaleFactor is the
delta for the current event.
- Item Views:
* [QTBUG-50102] Item views scroll per pixel on OS X now.
* [QTBUG-50102] QAbstractItemView::verticalScrollMode and
QAbstractItemView::horizontalScrollMode are now resettable.
- QAbstractItemView:
* [QTBUG-7232] In ItemViews when scrollMode is set to scrollPerPixel, it
is now possible to change the single step. Qt will automatically adjust
the single step until setSingleStep is called. When setSingleStep is
called it will however respect that and stop doing automatic changes
of the value. Calling setSingleStep(-1) will switch mode back to
automatic adjusting.
- QAbstractScrollArea, QTextEdit, QPlainTextEdit:
* [QTBUG-52559] Changed focus to Qt::StrongFocus. That respects
platforms' native guidelines.
- QHeaderView:
* [QTBUG-39010] Fixed some issues with restoring of section size after a
section is no longer the last visible section (in stretchLastSection
mode).
* [QTBUG-50171] Fixed a repainting issue when items had been reordered.
- QListWidget:
* [QTBUG-15741] Fixed a bug that caused the default drop action to be
ignored when using icon mode.
- QTableView:
* [QTBUG-50171] Fixed a selection bug when rows or columns were hidden.
- Styles:
* [QTBUG-50102] Added SH_ItemView_ScrollMode style hint.
- Dialogs:
* [QTBUG-51148] Fixed requesting a font from font dialog with a
non-existent family name and/or pixel size when using GTK2 platform
theme.
QTest
-----
- Added a new logging mode that allow test-results to be parsed on-the-fly
when using Jetbrains TeamCity as CI-server. This mode is enabled by
using the -teamcity option on the command-line.
****************************************************************************
* Platform-specific Changes *
****************************************************************************
- The Gtk+ platform theme has been ported to Gtk+ 3.
- Dropped support for Windows CE.
- Added support for INTEGRITY RTOS.
Android
-------
- Support for Android API < 16 was removed.
- [QTBUG-37221] Qt can now be used to easily create Android Services.
- Allow the user to choose how much from the Android theme is extracted.
iOS
---
- [QTBUG-35271] QBackingStore now uses the raster paint engine instead of
the OpenGL paint engine, enabling improved antialiased drawing. In case
of performance regressions, the old code path can be enabled by setting
the window's surface type to QSurface::OpenGLSurface.
OS X
----
- Support for OS X < 10.8 was removed.
- [QTBUG-7000] QMacPrintEngine now really sets the printer resolution.
- [QTBUG-32898] OS X now accepts trusted certificates from the login and
system keychains.
- [QTBUG-48953] Pasting text from Qt applications to Apple Mail now works.
- [QTBUG-48953] "text/vcard" is now required as the mime type when
placing vCards on the clipboard.
- [QTBUG-50262] QStandardPaths now returns the correct display name for
the download folder.
Windows
-------
- [QTBUG-390][QTBUG-6917][QTBUG-9350][QTBUG-24619] Added method
QProcess::setCreateProcessArgumentsModifier() to enable users to
intercept and modify CreateProcess parameters.
- Added support for color fonts (color emojis) when DirectWrite 2 is
available.
- Text:
* [QTBUG-47141] Made it possible to disable antialiasing for text when
drawing into images.
* [QTBUG-18711] Fixed disabling hinting for application fonts, e.g. when
automatic scaling by device pixel ratio is in effect.
XCB / X11
---------
- [QTBUG-44964] It's now possible to unset AA_CompressHighFrequencyEvents
to disable the new X event compression feature that was added in 5.6.0.
This is a replacement for the WA_NoX11EventCompression flag in Qt 4.
- [QTBUG-49071] Fixed failure to deliver focusIn event on hide/show with XCB
- QMenuBar now uses the unified D-Bus AppMenu menubar when the desktop
environment supports it.
****************************************************************************
* Tools *
****************************************************************************
moc
---
- [QTBUG-53441] Fixed crash when processing files ending with \\\r.
configure & build system
------------------------
- [QTBUG-35754] Static builds now embed QML resources into the libraries
to make them self-contained.
- [QTBUG-35886][Unix] Made it explicit that -fontconfig implies
-system-freetype.
- [QTBUG-43784][Unix] Fixed GLX not being enabled with -qt-xcb.
- [QTBUG-45291][GCC] Enabled use of Qt with -Wzero-as-null-pointer-constant.
- [Android@Windows] Fixed configure tests outside QtBase.
- [Unix] Fixed config.log corruption with option -v.
- [Unix] Fixed the MySQL configure test on RHEL 6.6.
- [Android] Enabled building with newer SDKs than the minimal supported one.
- QNX and Android builds on Windows use -system-zlib now.
- Added support for "Canadian Cross Builds"; options -external-hostbindir
and -host-option.
- Added makespecs for DRIVE CX (Tegra X1), NVIDIA Jetson TK1, and i.MX7
boards.
- Qt now makes use of AVX512 instructions on Intel platforms.
qmake
-----
- Specifying directories in RESOURCES now actually works.
- Added -qtconf option to make it possible to use the same qmake binary
with several builds of Qt.

View File

@ -24,3 +24,44 @@ contains(QT_CONFIG, c++11):lessThan(QT_COMPILER_STDCXX, 201103): CONFIG += c++11
}
unset(today)
}
isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
#
# Get default include and library paths from compiler
#
gcc {
equals(QMAKE_DIR_SEP, /) {
cmd_prefix = "LC_ALL=C"
cmd_suffix = "</dev/null >/dev/null"
} else {
cmd_prefix = "set LC_ALL=C&"
cmd_suffix = "<NUL >NUL"
}
output = $$system("$$cmd_prefix $$QMAKE_CXX $$QMAKE_CXXFLAGS -xc++ -E -v - 2>&1 $$cmd_suffix", lines)
add_includes = false
for (line, output) {
line ~= s/^ *// # remove leading spaces
contains(line, "LIBRARY_PATH=.*") {
line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH=
paths = $$split(line, $$QMAKE_DIRLIST_SEP)
for (path, paths): \
QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path)
} else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here:
add_includes = true
} else: contains(line, "End of search list.*") {
add_includes = false
} else {
$$add_includes: QMAKE_DEFAULT_INCDIRS += $$clean_path($$line)
}
}
QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS)
}
unix {
isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include
isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib
}
!isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash)
!isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash)
}

View File

@ -63,50 +63,8 @@
<!-- extract android style -->
</activity>
<!--service android:process=":qt" android:name="org.qtproject.qt5.android.bindings.QtService"-->
<!-- android:process=":qt" is needed to force the service to run on a separate process than the Activity -->
<!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
<!-- Application arguments -->
<!-- meta-data android:name="android.app.arguments" android:value="-service"/ -->
<!-- Application arguments -->
<!-- If you're using the same application (.so file) for activity and also for service, then you
need to use *android.app.arguments* to pass some arguments to your service in order to know which
one is which
-->
<!-- Ministro -->
<!-- meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/ -->
<!-- Ministro -->
<!-- Deploy Qt libs as part of package -->
<!-- meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/ -->
<!-- Deploy Qt libs as part of package -->
<!-- Run with local libs -->
<!-- meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/ -->
<!-- Run with local libs -->
<!-- Messages maps -->
<!-- meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/ -->
<!-- Messages maps -->
<!-- Background running -->
<!-- meta-data android:name="android.app.background_running" android:value="true"/ -->
<!-- Background running -->
<!--/service -->
</application>
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/>

View File

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<array name="qt_sources">
<item>https://download.qt.io/ministro/android/qt5/qt-5.6</item>
<item>https://download.qt.io/ministro/android/qt5/qt-5.7</item>
</array>
<!-- The following is handled automatically by the deployment tool. It should

View File

@ -58,25 +58,26 @@ QT_BEGIN_NAMESPACE
/*
* ENDIAN FUNCTIONS
*/
inline void qbswap_helper(const uchar *src, uchar *dest, int size)
inline void qbswap_helper(const void *src, void *dest, int size)
{
for (int i = 0; i < size ; ++i) dest[i] = src[size - 1 - i];
for (int i = 0; i < size ; ++i)
static_cast<uchar *>(dest)[i] = static_cast<const uchar *>(src)[size - 1 - i];
}
/*
* qbswap(const T src, const uchar *dest);
* qbswap(const T src, const void *dest);
* Changes the byte order of \a src from big endian to little endian or vice versa
* and stores the result in \a dest.
* There is no alignment requirements for \a dest.
*/
template <typename T> inline void qbswap(const T src, uchar *dest)
template <typename T> inline void qbswap(const T src, void *dest)
{
qbswap_helper(reinterpret_cast<const uchar *>(&src), dest, sizeof(T));
qbswap_helper(&src, dest, sizeof(T));
}
// Used to implement a type-safe and alignment-safe copy operation
// If you want to avoid the memcpy, you must write specializations for these functions
template <typename T> Q_ALWAYS_INLINE void qToUnaligned(const T src, uchar *dest)
template <typename T> Q_ALWAYS_INLINE void qToUnaligned(const T src, void *dest)
{
// Using sizeof(T) inside memcpy function produces internal compiler error with
// MSVC2008/ARM in tst_endian -> use extra indirection to resolve size of T.
@ -89,7 +90,7 @@ template <typename T> Q_ALWAYS_INLINE void qToUnaligned(const T src, uchar *dest
(dest, &src, size);
}
template <typename T> Q_ALWAYS_INLINE T qFromUnaligned(const uchar *src)
template <typename T> Q_ALWAYS_INLINE T qFromUnaligned(const void *src)
{
T dest;
const size_t size = sizeof(T);
@ -122,11 +123,11 @@ template <> inline quint32 qbswap<quint32>(quint32 source)
return __builtin_bswap32(source);
}
template <> inline void qbswap<quint64>(quint64 source, uchar *dest)
template <> inline void qbswap<quint64>(quint64 source, void *dest)
{
qToUnaligned<quint64>(__builtin_bswap64(source), dest);
}
template <> inline void qbswap<quint32>(quint32 source, uchar *dest)
template <> inline void qbswap<quint32>(quint32 source, void *dest)
{
qToUnaligned<quint32>(__builtin_bswap32(source), dest);
}
@ -158,7 +159,7 @@ template <> inline quint16 qbswap<quint16>(quint16 source)
{
return __builtin_bswap16(source);
}
template <> inline void qbswap<quint16>(quint16 source, uchar *dest)
template <> inline void qbswap<quint16>(quint16 source, void *dest)
{
qToUnaligned<quint16>(__builtin_bswap16(source), dest);
}
@ -187,17 +188,17 @@ template <> inline qint16 qbswap<qint16>(qint16 source)
return qbswap<quint16>(quint16(source));
}
template <> inline void qbswap<qint64>(qint64 source, uchar *dest)
template <> inline void qbswap<qint64>(qint64 source, void *dest)
{
qbswap<quint64>(quint64(source), dest);
}
template <> inline void qbswap<qint32>(qint32 source, uchar *dest)
template <> inline void qbswap<qint32>(qint32 source, void *dest)
{
qbswap<quint32>(quint32(source), dest);
}
template <> inline void qbswap<qint16>(qint16 source, uchar *dest)
template <> inline void qbswap<qint16>(qint16 source, void *dest)
{
qbswap<quint16>(quint16(source), dest);
}
@ -212,9 +213,9 @@ template <typename T> inline T qToLittleEndian(T source)
{ return qbswap<T>(source); }
template <typename T> inline T qFromLittleEndian(T source)
{ return qbswap<T>(source); }
template <typename T> inline void qToBigEndian(T src, uchar *dest)
template <typename T> inline void qToBigEndian(T src, void *dest)
{ qToUnaligned<T>(src, dest); }
template <typename T> inline void qToLittleEndian(T src, uchar *dest)
template <typename T> inline void qToLittleEndian(T src, void *dest)
{ qbswap<T>(src, dest); }
#else // Q_LITTLE_ENDIAN
@ -226,9 +227,9 @@ template <typename T> inline T qToLittleEndian(T source)
{ return source; }
template <typename T> inline T qFromLittleEndian(T source)
{ return source; }
template <typename T> inline void qToBigEndian(T src, uchar *dest)
template <typename T> inline void qToBigEndian(T src, void *dest)
{ qbswap<T>(src, dest); }
template <typename T> inline void qToLittleEndian(T src, uchar *dest)
template <typename T> inline void qToLittleEndian(T src, void *dest)
{ qToUnaligned<T>(src, dest); }
#endif // Q_BYTE_ORDER == Q_BIG_ENDIAN
@ -243,34 +244,34 @@ template <> inline qint8 qbswap<qint8>(qint8 source)
return source;
}
/* T qFromLittleEndian(const uchar *src)
/* T qFromLittleEndian(const void *src)
* This function will read a little-endian encoded value from \a src
* and return the value in host-endian encoding.
* There is no requirement that \a src must be aligned.
*/
template <typename T> inline T qFromLittleEndian(const uchar *src)
template <typename T> inline T qFromLittleEndian(const void *src)
{
return qFromLittleEndian(qFromUnaligned<T>(src));
}
template <> inline quint8 qFromLittleEndian<quint8>(const uchar *src)
{ return static_cast<quint8>(src[0]); }
template <> inline qint8 qFromLittleEndian<qint8>(const uchar *src)
{ return static_cast<qint8>(src[0]); }
template <> inline quint8 qFromLittleEndian<quint8>(const void *src)
{ return static_cast<const quint8 *>(src)[0]; }
template <> inline qint8 qFromLittleEndian<qint8>(const void *src)
{ return static_cast<const qint8 *>(src)[0]; }
/* This function will read a big-endian (also known as network order) encoded value from \a src
* and return the value in host-endian encoding.
* There is no requirement that \a src must be aligned.
*/
template <class T> inline T qFromBigEndian(const uchar *src)
template <class T> inline T qFromBigEndian(const void *src)
{
return qFromBigEndian(qFromUnaligned<T>(src));
}
template <> inline quint8 qFromBigEndian<quint8>(const uchar *src)
{ return static_cast<quint8>(src[0]); }
template <> inline qint8 qFromBigEndian<qint8>(const uchar *src)
{ return static_cast<qint8>(src[0]); }
template <> inline quint8 qFromBigEndian<quint8>(const void *src)
{ return static_cast<const quint8 *>(src)[0]; }
template <> inline qint8 qFromBigEndian<qint8>(const void *src)
{ return static_cast<const qint8 *>(src)[0]; }
QT_END_NAMESPACE

View File

@ -35,7 +35,7 @@
/*!
\internal
\fn T qFromUnaligned(const uchar *ptr)
\fn T qFromUnaligned(const void *ptr)
\since 5.5
Loads a \c{T} from address \a ptr, which may be misaligned.
@ -46,7 +46,7 @@
/*!
\internal
\fn void qToUnaligned(T t, uchar *ptr)
\fn void qToUnaligned(T t, void *ptr)
\since 4.5
Stores \a t to address \a ptr, which may be misaligned.
@ -57,7 +57,7 @@
/*!
\fn T qFromBigEndian(const uchar *src)
\fn T qFromBigEndian(const void *src)
\since 4.3
\relates <QtEndian>
@ -69,6 +69,8 @@
\note Template type \c{T} can either be a qint16, qint32 or qint64. Other types of
integers, e.g., qlong, are not applicable.
\note Since Qt 5.7, the type of the \a src parameter is a void pointer.
There are no data alignment constraints for \a src.
\sa qFromLittleEndian()
@ -88,7 +90,7 @@
unmodified.
*/
/*!
\fn T qFromLittleEndian(const uchar *src)
\fn T qFromLittleEndian(const void *src)
\since 4.3
\relates <QtEndian>
@ -100,6 +102,8 @@
\note Template type \c{T} can either be a qint16, qint32 or qint64. Other types of
integers, e.g., qlong, are not applicable.
\note Since Qt 5.7, the type of the \a src parameter is a void pointer.
There are no data alignment constraints for \a src.
\sa qFromBigEndian()
@ -119,7 +123,7 @@
unmodified.
*/
/*!
\fn void qToBigEndian(T src, uchar *dest)
\fn void qToBigEndian(T src, void *dest)
\since 4.3
\relates <QtEndian>
@ -130,6 +134,8 @@
There are no data alignment constraints for \a dest.
\note Since Qt 5.7, the type of the \a dest parameter is a void pointer.
\sa qFromBigEndian()
\sa qFromLittleEndian()
\sa qToLittleEndian()
@ -147,7 +153,7 @@
unmodified.
*/
/*!
\fn void qToLittleEndian(T src, uchar *dest)
\fn void qToLittleEndian(T src, void *dest)
\since 4.3
\relates <QtEndian>
@ -158,6 +164,8 @@
There are no data alignment constraints for \a dest.
\note Since Qt 5.7, the type of the \a dest parameter is a void pointer.
\sa qFromBigEndian()
\sa qFromLittleEndian()
\sa qToBigEndian()

View File

@ -1080,9 +1080,9 @@ struct QOverload : QConstOverload<Args...>, QNonConstOverload<Args...>
};
#if defined(__cpp_variable_templates) && __cpp_variable_templates >= 201304 // C++14
template <typename... Args> Q_CONSTEXPR QOverload<Args...> qOverload Q_DECL_UNUSED = {};
template <typename... Args> Q_CONSTEXPR QConstOverload<Args...> qConstOverload Q_DECL_UNUSED = {};
template <typename... Args> Q_CONSTEXPR QNonConstOverload<Args...> qNonConstOverload Q_DECL_UNUSED = {};
template <typename... Args> Q_CONSTEXPR Q_DECL_UNUSED QOverload<Args...> qOverload = {};
template <typename... Args> Q_CONSTEXPR Q_DECL_UNUSED QConstOverload<Args...> qConstOverload = {};
template <typename... Args> Q_CONSTEXPR Q_DECL_UNUSED QNonConstOverload<Args...> qNonConstOverload = {};
#endif
#endif

View File

@ -435,7 +435,7 @@ void Value::copyData(const QJsonValue &v, char *dest, bool compressed)
switch (v.t) {
case QJsonValue::Double:
if (!compressed) {
qToLittleEndian(v.ui, (uchar *)dest);
qToLittleEndian(v.ui, dest);
}
break;
case QJsonValue::String: {

View File

@ -738,7 +738,7 @@ bool Parser::parseNumber(QJsonPrivate::Value *val, int baseOffset)
}
int pos = reserveSpace(sizeof(double));
qToLittleEndian(ui, reinterpret_cast<uchar *>(data + pos));
qToLittleEndian(ui, data + pos);
if (current - baseOffset >= Value::MaxSize) {
lastError = QJsonParseError::DocumentTooLarge;
return false;

View File

@ -163,7 +163,7 @@ bool QMimeMagicRule::matchNumber(const QByteArray &data) const
const char *p = data.constData() + m_startPos;
const char *e = data.constData() + qMin(data.size() - int(sizeof(T)), m_endPos + 1);
for ( ; p <= e; ++p) {
if ((qFromUnaligned<T>(reinterpret_cast<const uchar *>(p)) & mask) == (value & mask))
if ((qFromUnaligned<T>(p) & mask) == (value & mask))
return true;
}

View File

@ -89,9 +89,9 @@ public:
T read(const char *s)
{
if (m_endian == ElfBigEndian)
return qFromBigEndian<T>(reinterpret_cast<const uchar *>(s));
return qFromBigEndian<T>(s);
else
return qFromLittleEndian<T>(reinterpret_cast<const uchar *>(s));
return qFromLittleEndian<T>(s);
}
const char *parseSectionHeader(const char* s, ElfSectionHeader *sh);

View File

@ -92,10 +92,11 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMutexPool, globalMutexPool, (QMutex::Recursive))
QMutexPool is destructed.
*/
QMutexPool::QMutexPool(QMutex::RecursionMode recursionMode, int size)
: count(size),
mutexes(new QAtomicPointer<QMutex>[size]()), // (): zero-initialize
recursionMode(recursionMode)
: mutexes(size), recursionMode(recursionMode)
{
for (int index = 0; index < mutexes.count(); ++index) {
mutexes[index].store(0);
}
}
/*!
@ -104,8 +105,8 @@ QMutexPool::QMutexPool(QMutex::RecursionMode recursionMode, int size)
*/
QMutexPool::~QMutexPool()
{
qDeleteAll(mutexes, mutexes + count);
delete[] mutexes;
for (int index = 0; index < mutexes.count(); ++index)
delete mutexes[index].load();
}
/*!

View File

@ -66,7 +66,7 @@ public:
~QMutexPool();
inline QMutex *get(const void *address) {
int index = uint(quintptr(address)) % count;
int index = uint(quintptr(address)) % mutexes.count();
QMutex *m = mutexes[index].load();
if (m)
return m;
@ -78,8 +78,7 @@ public:
private:
QMutex *createMutex(int index);
int count;
QAtomicPointer<QMutex> *mutexes;
QVarLengthArray<QAtomicPointer<QMutex>, 131> mutexes;
QMutex::RecursionMode recursionMode;
};

View File

@ -285,7 +285,7 @@
#endif
#endif
// AArch64/ARM64
#if defined(Q_PROCESSOR_ARM_V8)
#if defined(Q_PROCESSOR_ARM_V8) && defined(__ARM_FEATURE_CRC32)
#define QT_FUNCTION_TARGET_STRING_CRC32 "+crc"
# include <arm_acle.h>
#endif
@ -527,32 +527,6 @@ unsigned _bit_scan_forward(unsigned val)
#define ALIGNMENT_PROLOGUE_16BYTES(ptr, i, length) \
for (; i < static_cast<int>(qMin(static_cast<quintptr>(length), ((4 - ((reinterpret_cast<quintptr>(ptr) >> 2) & 0x3)) & 0x3))); ++i)
template <typename T>
Q_ALWAYS_INLINE
T qUnalignedLoad(const void *ptr) Q_DECL_NOTHROW
{
T result;
#if QT_HAS_BUILTIN(__builtin_memcpy)
__builtin_memcpy
#else
memcpy
#endif
/*memcpy*/(&result, ptr, sizeof result);
return result;
}
template <typename T>
Q_ALWAYS_INLINE
void qUnalignedStore(void *ptr, T t) Q_DECL_NOTHROW
{
#if QT_HAS_BUILTIN(__builtin_memcpy)
__builtin_memcpy
#else
memcpy
#endif
/*memcpy*/(ptr, &t, sizeof t);
}
QT_END_NAMESPACE
#endif // QSIMD_P_H

View File

@ -261,6 +261,35 @@ inline const QDBusArgument &operator>>(const QDBusArgument &arg, Container<T> &l
return arg;
}
// QList specializations
template<typename T>
inline QDBusArgument &operator<<(QDBusArgument &arg, const QList<T> &list)
{
int id = qMetaTypeId<T>();
arg.beginArray(id);
typename QList<T>::ConstIterator it = list.constBegin();
typename QList<T>::ConstIterator end = list.constEnd();
for ( ; it != end; ++it)
arg << *it;
arg.endArray();
return arg;
}
template<typename T>
inline const QDBusArgument &operator>>(const QDBusArgument &arg, QList<T> &list)
{
arg.beginArray();
list.clear();
while (!arg.atEnd()) {
T item;
arg >> item;
list.push_back(item);
}
arg.endArray();
return arg;
}
inline QDBusArgument &operator<<(QDBusArgument &arg, const QVariantList &list)
{
int id = qMetaTypeId<QDBusVariant>();
@ -273,6 +302,7 @@ inline QDBusArgument &operator<<(QDBusArgument &arg, const QVariantList &list)
return arg;
}
// QMap specializations
template<typename Key, typename T>
inline QDBusArgument &operator<<(QDBusArgument &arg, const QMap<Key, T> &map)
{
@ -321,6 +351,7 @@ inline QDBusArgument &operator<<(QDBusArgument &arg, const QVariantMap &map)
return arg;
}
// QHash specializations
template<typename Key, typename T>
inline QDBusArgument &operator<<(QDBusArgument &arg, const QHash<Key, T> &map)
{

View File

@ -177,7 +177,7 @@ Q_GLOBAL_STATIC(QReadWriteLock, customTypesLock)
\snippet code/src_qdbus_qdbusmetatype.cpp 0
If \c{T} isn't a type derived from one of
If \c{T} isn't one of
Qt's \l{container classes}, the \c{operator<<} and
\c{operator>>} streaming operators between \c{T} and QDBusArgument
must be already declared. See the \l {qdbustypesystem.html}{Qt D-Bus
@ -187,6 +187,14 @@ Q_GLOBAL_STATIC(QReadWriteLock, customTypesLock)
This function returns the Qt meta type id for the type (the same
value that is returned from qRegisterMetaType()).
\note The feature that a \c{T} inheriting a streamable type (including
the containers QList, QHash or QMap) can be streamed without providing
custom \c{operator<<} and \c{operator>>} is deprecated as of Qt 5.7,
because it ignores everything in \c{T} except the base class. There is
no diagnostic. You should always provide these operators for all types
you wish to stream and not rely on Qt-provided stream operators for
base classes.
\sa {qdbustypesystem.html}{Qt D-Bus Type System}, qRegisterMetaType(), QMetaType
*/

View File

@ -533,7 +533,7 @@ void QPF2Generator::writeHeader()
{
const QByteArray head = fe->getSfntTable(MAKE_TAG('h', 'e', 'a', 'd'));
if (head.size() >= 4) {
const quint32 revision = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(head.constData()));
const quint32 revision = qFromBigEndian<quint32>(head.constData());
writeTaggedUInt32(QFontEngineQPF2::Tag_FontRevision, revision);
}
}

View File

@ -1145,7 +1145,7 @@ static QByteArray bindFont(const QVector<QTtfTable>& _tables)
// calculate the fonts checksum and qToBigEndian into 'head's checksum_adjust
quint32 checksum_adjust = 0xB1B0AFBA - checksum(font);
qToBigEndian(checksum_adjust, (uchar *)font.data() + head_offset + 8);
qToBigEndian(checksum_adjust, font.data() + head_offset + 8);
return font;
}

View File

@ -364,43 +364,43 @@ void QSpdyProtocolHandler::_q_readyRead()
static qint16 twoBytesToInt(const char *bytes)
{
return qFromBigEndian<qint16>(reinterpret_cast<const uchar *>(bytes));
return qFromBigEndian<qint16>(bytes);
}
static qint32 threeBytesToInt(const char *bytes)
{
return qFromBigEndian<qint32>(reinterpret_cast<const uchar *>(bytes)) >> 8;
return qFromBigEndian<qint32>(bytes) >> 8;
}
static qint32 fourBytesToInt(const char *bytes)
{
return qFromBigEndian<qint32>(reinterpret_cast<const uchar *>(bytes));
return qFromBigEndian<qint32>(bytes);
}
static void appendIntToThreeBytes(char *output, qint32 number)
{
qToBigEndian<qint16>(number, reinterpret_cast<uchar *>(output + 1));
qToBigEndian<qint8>(number >> 16, reinterpret_cast<uchar *>(output));
qToBigEndian<qint16>(number, output + 1);
qToBigEndian<qint8>(number >> 16, output);
}
static void appendIntToFourBytes(char *output, qint32 number)
{
qToBigEndian<qint32>(number, reinterpret_cast<uchar *>(output));
qToBigEndian<qint32>(number, output);
}
static QByteArray intToFourBytes(qint32 number) // ### try to use appendIntToFourBytes where possible
{
uchar data[4];
char data[4];
qToBigEndian<qint32>(number, data);
QByteArray ret(reinterpret_cast<char *>(data), 4);
QByteArray ret(data, 4);
return ret;
}
static QByteArray intToThreeBytes(qint32 number)
{
uchar data[4];
char data[4];
qToBigEndian<qint32>(number << 8, data);
QByteArray ret(reinterpret_cast<char *>(data), 3);
QByteArray ret(data, 3);
return ret;
}

View File

@ -251,9 +251,9 @@ void QCoreTextFontEngine::init()
QByteArray os2Table = getSfntTable(MAKE_TAG('O', 'S', '/', '2'));
unsigned emSize = CTFontGetUnitsPerEm(ctfont);
if (os2Table.size() >= 10) {
fsType = qFromBigEndian<quint16>(reinterpret_cast<const uchar *>(os2Table.constData() + 8));
fsType = qFromBigEndian<quint16>(os2Table.constData() + 8);
// qAbs is a workaround for weird fonts like Lucida Grande
qint16 width = qAbs(qFromBigEndian<qint16>(reinterpret_cast<const uchar *>(os2Table.constData() + 2)));
qint16 width = qAbs(qFromBigEndian<qint16>(os2Table.constData() + 2));
avgCharWidth = QFixed::fromReal(width * fontDef.pixelSize / emSize);
} else
avgCharWidth = QFontEngine::averageCharWidth();

View File

@ -89,9 +89,9 @@ QOscBundle::QOscBundle(const QByteArray &data)
// (editor's note: one may wonder how a 64bit big-endian number can also be
// two 32bit numbers, without specifying in which order they occur or
// anything, and one may indeed continue to wonder.)
quint32 oscTimeEpoch = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
quint32 oscTimeEpoch = qFromBigEndian<quint32>(data.constData() + parsedBytes);
parsedBytes += sizeof(quint32);
quint32 oscTimePico = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
quint32 oscTimePico = qFromBigEndian<quint32>(data.constData() + parsedBytes);
parsedBytes += sizeof(quint32);
bool isImmediate = false;

View File

@ -95,7 +95,7 @@ QOscMessage::QOscMessage(const QByteArray &data)
if (parsedBytes > (quint32)data.size() || data.size() - parsedBytes < sizeof(quint32))
return;
quint32 anInt = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
quint32 anInt = qFromBigEndian<quint32>(data.constData() + parsedBytes);
parsedBytes += sizeof(quint32);
// TODO: is int32 in OSC signed, or unsigned?
@ -109,7 +109,7 @@ QOscMessage::QOscMessage(const QByteArray &data)
quint32 u;
float f;
} value;
value.u = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
value.u = qFromBigEndian<quint32>(data.constData() + parsedBytes);
parsedBytes += sizeof(quint32);
arguments.append(value.f);
} else {

View File

@ -158,8 +158,8 @@ public:
#define ADJUST_BO(b, t, x) \
((b == LSBFirst) ? \
qFromLittleEndian<t>((const uchar *)(x)) : \
qFromBigEndian<t>((const uchar *)(x)))
qFromLittleEndian<t>(x) : \
qFromBigEndian<t>(x))
#define VALIDATE_LENGTH(x) \
if ((size_t)xSettings.length() < (offset + local_offset + 12 + x)) { \
qWarning("Length %d runs past end of data", x); \

View File

@ -1889,13 +1889,10 @@ void QMessageBox::aboutQt(QWidget *parent, const QString &title)
"<p>Qt licensed under our commercial license agreement is appropriate "
"for development of proprietary/commercial software where you do not "
"want to share any source code with third parties or otherwise cannot "
"comply with the terms of the GNU LGPL version 3 or GNU LGPL version 2.1.</p>"
"comply with the terms of the GNU LGPL version 3.</p>"
"<p>Qt licensed under the GNU LGPL version 3 is appropriate for the "
"development of Qt&nbsp;applications provided you can comply with the terms "
"and conditions of the GNU LGPL version 3.</p>"
"<p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the "
"development of Qt&nbsp;applications provided you can comply with the terms "
"and conditions of the GNU LGPL version 2.1.</p>"
"<p>Please see <a href=\"http://%2/\">%2</a> "
"for an overview of Qt licensing.</p>"
"<p>Copyright (C) %1 The Qt Company Ltd and other "

View File

@ -44,6 +44,7 @@
#include <QtWidgets/QDialog>
#include <QtWidgets/QStyledItemDelegate>
#include <QtWidgets/QStyleFactory>
#include <QtWidgets/QVBoxLayout>
#if defined(Q_OS_WIN) || defined(Q_OS_WINCE)
# include <windows.h>
@ -111,7 +112,7 @@ private slots:
void scrollBarAsNeeded();
void moveItems();
void wordWrap();
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && WINVER >= 0x0500
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
void setCurrentIndexAfterAppendRowCrash();
#endif
void emptyItemSize();
@ -1456,8 +1457,10 @@ class SetCurrentIndexAfterAppendRowCrashDialog : public QDialog
public:
SetCurrentIndexAfterAppendRowCrashDialog()
{
#if WINVER >= 0x0500
listView = new QListView();
setWindowTitle(QTest::currentTestFunction());
listView = new QListView(this);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(listView);
listView->setViewMode(QListView::IconMode);
model = new QStandardItemModel(this);
@ -1466,12 +1469,16 @@ public:
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(buttonClicked()));
timer->start(1000);
}
protected:
void showEvent(QShowEvent *event) override
{
QDialog::showEvent(event);
DWORD lParam = 0xFFFFFFFC/*OBJID_CLIENT*/;
DWORD wParam = 0;
if (const HWND hwnd =getHWNDForWidget(this))
SendMessage(hwnd, WM_GETOBJECT, wParam, lParam);
#endif
}
private slots:
@ -1488,16 +1495,13 @@ private:
QStandardItemModel *model;
QTimer *timer;
};
#endif
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) && WINVER >= 0x0500
// This test only makes sense on windows 2000 and higher.
void tst_QListView::setCurrentIndexAfterAppendRowCrash()
{
SetCurrentIndexAfterAppendRowCrashDialog w;
w.exec();
}
#endif
#endif // Q_OS_WIN && !Q_OS_WINCE && !Q_OS_WINRT
void tst_QListView::emptyItemSize()
{

View File

@ -3508,11 +3508,6 @@ void Configure::generateQConfigPri()
configStream << " QT_TARGET_ARCH = " << dictionary["QT_ARCH"] << endl;
configStream << "} else {" << endl;
configStream << " QT_ARCH = " << dictionary["QT_ARCH"] << endl;
if (dictionary.contains("XQMAKESPEC")) {
// FIXME: add detection
configStream << " QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib" << endl;
configStream << " QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include" << endl;
}
configStream << "}" << endl;
configStream << "QT_CONFIG += " << qtConfig.join(' ') << endl;