Merge "Merge remote-tracking branch 'origin/5.4' into 5.5" into refs/staging/5.5.0

This commit is contained in:
Jani Heikkinen 2015-06-02 04:20:54 +00:00 committed by The Qt Project
commit 7bc9310a22
26 changed files with 405 additions and 241 deletions

17
dist/changes-5.4.2 vendored
View File

@ -34,6 +34,23 @@ information about a particular change.
common EXIF-format (big-endian) was not working until 5.4.1. 5.4.2 restores the
behavior of 5.4.0 and earlier for most EXIF-tagged JPEGs.
EXIF orientation will be an opt-in starting with Qt 5.5.
- On x86 and x86-64 systems with ELF binaries (especially Linux), due to
a new optimization in GCC 5.x in combination with a recent version of
GNU binutils, compiling Qt applications with -fPIE is no longer
enough with GCC 5.x. Applications now need to be compiled with
the -fPIC option if Qt's option "reduce relocations" is active. For
backward compatibility only, Qt accepts the use of -fPIE for GCC 4.x
versions.
Note that Clang is known to generate incompatible code even with -fPIC if
the -flto option is active.
Applications using qmake or cmake >= 2.8.12 as their build system will
adapt automatically. Applications using an older release of cmake in
combination with GCC 5.x need to change their CMakeLists.txt to add
Qt5Core_EXECUTABLE_COMPILE_FLAGS to CMAKE_CXX_FLAGS. In particular,
applications using cmake >= 2.8.9 and < 2.8.11 will continue to build
with the -fPIE option and invoke the special compatibility mode if using
GCC 4.x.
****************************************************************************
* Library *

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -30,8 +30,7 @@
\title Plug & Paint Example
\ingroup examples-widgets-tools
\brief The Plug & Paint example demonstrates how to write Qt
applications that can be extended through plugins.
\brief Demonstrates how to extend Qt applications using plugins.
\image plugandpaint.png Screenshot of the Plug & Paint example
@ -314,6 +313,9 @@
/*!
\example tools/plugandpaintplugins/basictools
\title Plug & Paint Basic Tools Example
\brief A plugin providing the basic tools for painting functionality.
\image plugandpaint.png Screenshot of the Plug & Paint example
The Basic Tools example is a static plugin for the
\l{tools/plugandpaint}{Plug & Paint} example. It provides a set
@ -499,6 +501,9 @@
/*!
\example tools/plugandpaintplugins/extrafilters
\title Plug & Paint Extra Filters Example
\brief A plugin providing the extra filters.
\image plugandpaint.png Screenshot of the Plug & Paint example
The Extra Filters example is a plugin for the
\l{tools/plugandpaint}{Plug & Paint} example. It provides a set

View File

@ -28,10 +28,13 @@
/*!
\example gestures/imagegestures
\title Image Gestures Example
\brief Demonstrates the use of simple gestures in a widget
This example shows how to enable gestures for a widget and use gesture input
to perform actions.
\image imagegestures-example.jpg
We use two classes to create the user interface for the application: \c MainWidget
and \c ImageWidget. The \c MainWidget class is simply used as a container for the
\c ImageWidget class, which we will configure to accept gesture input. Since we

View File

@ -918,7 +918,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
if(!path.isEmpty() && !libdirs.contains(path))
libdirs += path;
}
library = fileFixify(library, FileFixifyFromOutdir);
library = fileFixify(library, FileFixifyFromOutdir | FileFixifyAbsolute);
QString key = keyFor(library);
if (!project->values("QMAKE_PBX_LIBRARIES").contains(key)) {
bool is_frmwrk = (library.endsWith(".framework"));

View File

@ -70,8 +70,14 @@ set(_qt5_corelib_extra_includes)
# Qt5_POSITION_INDEPENDENT_CODE variable is used in the # qt5_use_module
# macro to add it.
set(Qt5_POSITION_INDEPENDENT_CODE True)
set_property(TARGET Qt5::Core PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE \"ON\")
set(Qt5Core_EXECUTABLE_COMPILE_FLAGS \"-fPIC\")
if (CMAKE_VERSION VERSION_LESS 2.8.12
AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0))
set_property(TARGET Qt5::Core APPEND PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE \"ON\")
else()
set_property(TARGET Qt5::Core APPEND PROPERTY INTERFACE_COMPILE_OPTIONS $$QMAKE_CXXFLAGS_APP)
endif()
!!IF !isEmpty(QT_NAMESPACE)
list(APPEND Qt5Core_DEFINITIONS -DQT_NAMESPACE=$$QT_NAMESPACE)

View File

@ -333,8 +333,10 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.9)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_DEBUG)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG)
if (Qt5_POSITION_INDEPENDENT_CODE)
if (Qt5_POSITION_INDEPENDENT_CODE
AND (CMAKE_VERSION VERSION_LESS 2.8.12
AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)))
set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
endif()
endforeach()

View File

@ -43,5 +43,8 @@ imagedirs += images
excludedirs += snippets
excludefiles += ../../../examples/widgets/tools/customcompleter/doc/src/customcompleter.qdoc \
../../../examples/widgets/tools/codecs/doc/src/codecs.qdoc
navigation.landingpage = "Qt Core"
navigation.cppclassespage = "Qt Core C++ Classes"

View File

@ -51,8 +51,9 @@ sem.release(2); // resources available == 3
//! [1]
QSystemSemaphore sem("market", 5, QSystemSemaphore::Create);
sem.acquire(5); // acquire all 5 resources
sem.release(5); // release the 5 resources
for (int i = 0; i < 5; ++i) // acquire all 5 resources
sem.acquire();
sem.release(5); // release the 5 resources
//! [1]

View File

@ -63,7 +63,7 @@
used to effectively embed the elements and semantics of statecharts in Qt
applications. The framework integrates tightly with Qt's meta-object system;
for example, transitions between states can be triggered by signals, and
states can be configured to set properties and invoke methods on QObjects.
states can be configured to set properties and invoke methods on {QObject}s.
Qt's event system is used to drive the state machines.
The state graph in the State Machine framework is hierarchical. States can be nested inside of
@ -126,9 +126,9 @@
The QState::entered() signal is emitted when the state is entered, and the
QState::exited() signal is emitted when the state is exited. In the
following snippet, the button's showMaximized() slot will be called when
state \c s3 is entered, and the button's showMinimized() slot will be called
when \c s3 is exited:
following snippet, the button's \l {QPushButton::}{showMaximized()} slot
will be called when state \c s3 is entered, and the button's \l {QPushButton::}{showMinimized()}
slot will be called when \c s3 is exited:
\snippet statemachine/main.cpp 5
@ -151,7 +151,7 @@
Assume we wanted the user to be able to quit the application at any time by
clicking a Quit button. In order to achieve this, we need to create a final
state and make it the target of a transition associated with the Quit
button's clicked() signal. We could add a transition from each of \c s1, \c
button's \l{QPushButton::}{clicked()} signal. We could add a transition from each of \c s1, \c
s2 and \c s3; however, this seems redundant, and one would also have to
remember to add such a transition from every new state that is added in the
future.
@ -184,8 +184,8 @@
\snippet statemachine/main2.cpp 1
In this case we want the application to quit when the state machine is
finished, so the machine's finished() signal is connected to the
application's quit() slot.
finished, so the machine's \l {QStateMachine::}{finished()} signal is connected to the
application's \l {QCoreApplication::}{quit()} slot.
A child state can override an inherited transition. For example, the
following code adds a transition that effectively causes the Quit button to
@ -290,7 +290,7 @@
\endomit
When \c s1 's final state is entered, \c s1 will automatically emit
finished(). We use a signal transition to cause this event to trigger a
\l {QState::}{finished()}. We use a signal transition to cause this event to trigger a
state change:
\snippet statemachine/main3.cpp 1
@ -302,7 +302,7 @@
encapsulation mechanism when building complex (deeply nested) state
machines. (In the above example, you could of course create a transition
directly from \c s1 's \c done state rather than relying on \c s1 's
finished() signal, but with the consequence that implementation details of
\l {QState::}{finished()} signal, but with the consequence that implementation details of
\c s1 are exposed and depended on).
For parallel state groups, the QState::finished() signal is emitted when \e
@ -365,8 +365,8 @@
\snippet statemachine/main4.cpp 1
In the eventTest() reimplementation, we first check if the event type is the
desired one; if so, we cast the event to a StringEvent and perform the
In the \l {QAbstractTransition::}{eventTest()} reimplementation, we first check if the event type is the
desired one; if so, we cast the event to a \c StringEvent and perform the
string comparison.
The following is a statechart that uses the custom event and transition:
@ -486,7 +486,7 @@
message box will pop up before the geometry of the button has actually been set.
To ensure that the message box does not pop up until the geometry actually reaches its final
value, we can use the state's propertiesAssigned() signal. The propertiesAssigned() signal will be
value, we can use the state's \l {QState::}{propertiesAssigned()} signal. The \l {QState::}{propertiesAssigned()} signal will be
emitted when the property is assigned its final value, whether this is done immediately or
after the animation has finished playing.
@ -503,14 +503,14 @@
has been assigned the defined value.
If the global restore policy is set to QStateMachine::RestoreProperties, the state will not emit
the propertiesAssigned() signal until these have been executed as well.
the \l {QState::}{propertiesAssigned()} signal until these have been executed as well.
\section1 What Happens If A State Is Exited Before The Animation Has Finished
If a state has property assignments, and the transition into the state has animations for the
properties, the state can potentially be exited before the properties have been assigned to the
values defines by the state. This is true in particular when there are transitions out from the
state that do not depend on the propertiesAssigned signal, as described in the previous section.
state that do not depend on the \l {QState::}{propertiesAssigned()} signal, as described in the previous section.
The State Machine API guarantees that a property assigned by the state machine either:
\list
@ -563,13 +563,13 @@
The parent state machine treats the child machine as an \e atomic state in the state machine
algorithm. The child state machine is self-contained; it maintains its own event queue and
configuration. In particular, note that the \l{QStateMachine::configuration()}{configuration}
configuration. In particular, note that the \l{QStateMachine::}{configuration()}
of the child machine is not part of the parent machine's configuration (only the child machine
itself is).
States of the child state machine cannot be specified as targets of transitions in the parent
state machine; only the child state machine itself can. Conversely, states of the parent state
machine cannot be specified as targets of transitions in the child state machine. The child
state machine's \l{QState::finished()}{finished}() signal can be used to trigger a transition
state machine's \l{QState::}{finished}() signal can be used to trigger a transition
in the parent machine.
*/

View File

@ -1062,9 +1062,10 @@ Q_CORE_EXPORT int qrand();
#define QT_MODULE(x)
#if !defined(QT_BOOTSTRAPPED) && defined(QT_REDUCE_RELOCATIONS) && defined(__ELF__) && !defined(__PIC__)
#if !defined(QT_BOOTSTRAPPED) && defined(QT_REDUCE_RELOCATIONS) && defined(__ELF__) && \
(!defined(__PIC__) || (defined(__PIE__) && defined(Q_CC_GNU) && Q_CC_GNU >= 500))
# error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\
"Compile your code with -fPIC."
"Compile your code with -fPIC (-fPIE is not enough)."
#endif
namespace QtPrivate {

View File

@ -132,7 +132,7 @@ bool QLockFilePrivate::isApparentlyStale() const
// processes due to sandboxing
#ifndef Q_OS_WINRT
if (getLockInfo(&pid, &hostname, &appname)) {
if (hostname == QString::fromLocal8Bit(localHostName())) {
if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) {
HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
if (!procHandle)
return true;

File diff suppressed because it is too large Load Diff

View File

@ -74,6 +74,7 @@ public:
jobject m_jobject;
jclass m_jclass;
bool m_own_jclass;
QByteArray m_className;
};
class Q_CORE_EXPORT QJNIObjectPrivate

View File

@ -676,16 +676,9 @@ QImage::Format QPngHandlerPrivate::readImageFormat()
&& num_palette <= 256)
{
// 1-bit and 8-bit color
if (bit_depth != 1)
png_set_packing(png_ptr);
png_read_update_info(png_ptr, info_ptr);
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, 0, 0, 0);
format = bit_depth == 1 ? QImage::Format_Mono : QImage::Format_Indexed8;
} else {
// 32-bit
if (bit_depth == 16)
png_set_strip_16(png_ptr);
format = QImage::Format_ARGB32;
// Only add filler if no alpha, or we can get 5 channel data.
if (!(color_type & PNG_COLOR_MASK_ALPHA)

View File

@ -131,6 +131,10 @@ bool QPlatformOpenGLContext::parseOpenGLVersion(const QByteArray &versionString,
if (versionParts.size() >= 2) {
major = versionParts.at(0).toInt(&majorOk);
minor = versionParts.at(1).toInt(&minorOk);
// Nexus 6 has "OpenGL ES 3.0V@95.0 (GIT@I86da836d38)"
if (!minorOk)
if (int idx = versionParts.at(1).indexOf('V'))
minor = versionParts.at(1).left(idx).toInt(&minorOk);
} else {
qWarning("Unrecognized OpenGL ES version");
}

View File

@ -985,6 +985,27 @@ QNetworkAccessManager::NetworkAccessibility QNetworkAccessManager::networkAccess
}
}
/*!
\internal
Returns the network session currently in use.
This can be changed at any time, ownership remains with the QNetworkAccessManager
*/
const QWeakPointer<const QNetworkSession> QNetworkAccessManagerPrivate::getNetworkSession(const QNetworkAccessManager *q)
{
return q->d_func()->networkSessionWeakRef;
}
QSharedPointer<QNetworkSession> QNetworkAccessManagerPrivate::getNetworkSession() const
{
if (networkSessionStrongRef)
return networkSessionStrongRef;
return networkSessionWeakRef.toStrongRef();
}
#endif // QT_NO_BEARERMANAGEMENT
#ifndef QT_NO_SSL
/*!
\since 5.2
@ -1045,26 +1066,6 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
get(request);
}
/*!
\internal
Returns the network session currently in use.
This can be changed at any time, ownership remains with the QNetworkAccessManager
*/
const QWeakPointer<const QNetworkSession> QNetworkAccessManagerPrivate::getNetworkSession(const QNetworkAccessManager *q)
{
return q->d_func()->networkSessionWeakRef;
}
QSharedPointer<QNetworkSession> QNetworkAccessManagerPrivate::getNetworkSession() const
{
if (networkSessionStrongRef)
return networkSessionStrongRef;
return networkSessionWeakRef.toStrongRef();
}
#endif // QT_NO_BEARERMANAGEMENT
/*!
\since 4.7

View File

@ -75,6 +75,7 @@ QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate()
QMutexLocker locker(&mutex);
qDeleteAll(sessionEngines);
sessionEngines.clear();
if (bearerThread)
bearerThread->quit();
}

View File

@ -637,7 +637,10 @@ long QSslSocketPrivate::sslLibraryBuildVersionNumber()
QString QSslSocketPrivate::sslLibraryBuildVersionString()
{
return QLatin1String(OPENSSL_VERSION_TEXT);
// Using QStringLiteral to store the version string as unicode and
// avoid false positives from Google searching the playstore for old
// SSL versions. See QTBUG-46265
return QStringLiteral(OPENSSL_VERSION_TEXT);
}
/*!

View File

@ -44,6 +44,7 @@
#include <QtCore/qdebug.h>
#include <QDir>
#ifndef QT_NO_BEARERMANAGEMENT
extern "C" { // Otherwise it won't find CWKeychain* symbols at link time
#import <CoreWLAN/CoreWLAN.h>
@ -890,3 +891,5 @@ quint64 QCoreWlanEngine::getBytes(const QString &interfaceName, bool b)
}
QT_END_NAMESPACE
#endif

View File

@ -1764,7 +1764,7 @@ QRectF QPrinter::paperRect(Unit unit) const
}
/*!
\obsolete Use pageLayout().paintRect() instead.
\obsolete Use pageLayout().paintRectPixels(resolution()) instead.
Returns the page's rectangle; this is usually smaller than the
paperRect() since the page normally has margins between its
@ -1781,7 +1781,7 @@ QRect QPrinter::pageRect() const
}
/*!
\obsolete Use pageLayout().fullPageRect() instead.
\obsolete Use pageLayout().fullRectPixels(resolution()) instead.
Returns the paper's rectangle; this is usually larger than the
pageRect().

View File

@ -335,8 +335,8 @@ void QPrintPreviewWidgetPrivate::populateScene()
pages.clear();
int numPages = pictures.count();
QSize paperSize = printer->paperRect().size();
QRect pageRect = printer->pageRect();
QSize paperSize = printer->pageLayout().fullRectPixels(printer->resolution()).size();
QRect pageRect = printer->pageLayout().paintRectPixels(printer->resolution());
for (int i = 0; i < numPages; i++) {
PageItem* item = new PageItem(i+1, pictures.at(i), paperSize, pageRect);

View File

@ -40,5 +40,8 @@ excludedirs += ../../../examples/widgets/doc
imagedirs += images
# Add a thumbnail for examples that do not have images
manifestmeta.thumbnail.names = "QtTestLib/Chapter *"
navigation.landingpage = "Qt Test"
navigation.cppclassespage = "Qt Test C++ Classes"

View File

@ -182,7 +182,9 @@ int QStackedWidget::insertWidget(int index, QWidget *widget)
not deleted but simply removed from the stacked layout, causing it
to be hidden.
\b{Note:} Ownership of \a widget reverts to the application.
\note Parent object and parent widget of \a widget will remain the
QStackedWidget. If the application wants to reuse the removed
\a widget, then it is recommended to re-parent it.
\sa addWidget(), insertWidget(), currentWidget()
*/

View File

@ -111,7 +111,7 @@ extern "C" int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR /*cmdParamarg*/, int
argv[argc] = Q_NULLPTR;
LocalFree(argvW);
const int exitCode = main(argc, argv);
for (int i = 0; i < argc; ++i)
for (int i = 0; i < argc && argv[i]; ++i)
delete [] argv[i];
delete [] argv;
return exitCode;

View File

@ -40,3 +40,6 @@ imagedirs += images \
navigation.landingpage = "Qt XML"
navigation.cppclassespage = "Qt XML C++ Classes"
# Add a thumbnail for examples that do not have images
manifestmeta.thumbnail.names = "QtXml/XML Stream Lint Example"