Merge remote-tracking branch 'origin/5.4.0' into 5.4
Change-Id: I89bbb2977350a03c156d531f810d08a5560ffbb3
This commit is contained in:
commit
1ba68c8431
|
@ -0,0 +1,144 @@
|
|||
Qt 5.4 introduces many new features and improvements as well as bugfixes
|
||||
over the 5.3.x series. For more details, refer to the online documentation
|
||||
included in this distribution. The documentation is also available online:
|
||||
|
||||
http://qt-project.org/doc/qt-5
|
||||
|
||||
The Qt version 5.4 series is binary compatible with the 5.3.x series.
|
||||
Applications compiled for 5.3 will continue to run with 5.4.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
http://bugreports.qt-project.org/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* General *
|
||||
****************************************************************************
|
||||
|
||||
General Improvements
|
||||
--------------------
|
||||
|
||||
- The Declarative State Machine Framework extends Qt's State Machine
|
||||
Framework (QSM) into QML. This gives you the power of deterministic
|
||||
state machines, but declaratively.
|
||||
|
||||
- Added QML linter tool.
|
||||
|
||||
Third party components
|
||||
----------------------
|
||||
|
||||
****************************************************************************
|
||||
* Important Behavior Changes *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-40431] When a JavaScript object/array is passed to C++ through
|
||||
a QVariant, the engine no longer immediately converts the object
|
||||
recursively into a QVariantMap or QVariantList but instead stores a
|
||||
QJSValue in the QVariant. This prevents a loss of data when the JS
|
||||
object contains non-primitive types such as function objects for
|
||||
example. Code that expects the variant type to be exactly
|
||||
QVariant::Map or QVariant::List may need to be adapted. Registered
|
||||
conversion functions however ensure that code that merely calls
|
||||
toMap() or toList() continues to work.
|
||||
- [QTBUG-39971] Qt 5.3 changed the mapping of "var" parameters in QML
|
||||
declared signals to QJSValue. This was reverted to the behavior of
|
||||
earlier Qt versions to use QVariant. The original issue of not being
|
||||
able to pass function objects through var parameters of QML declared
|
||||
signals is solved by wrapping a QJSValue inside the QVariant.
|
||||
|
||||
|
||||
|
||||
****************************************************************************
|
||||
* Library *
|
||||
****************************************************************************
|
||||
|
||||
QtQml
|
||||
-----
|
||||
|
||||
- qmldir:
|
||||
[QTBUG-41489] added the ability to declare dependencies on other
|
||||
modules in a module definition qmldir file
|
||||
|
||||
|
||||
QtQuick
|
||||
-------
|
||||
|
||||
- Accessibility for Qt Quick is now included in the qtquick library
|
||||
instead of being a separate plugin.
|
||||
- QQuickWindow will compresses touch events and delivers at most one touch
|
||||
event per frame.
|
||||
- [QTBUG-38539] Added property MouseArea.drag.smoothed for toggling
|
||||
whether the drag target is moved to the current mouse position after a
|
||||
drag operation has started.
|
||||
- [QTBUG-37944] Introduced QQuickRenderControl as a public API.
|
||||
- [QTBUG-37589] Added QQuickWidget::grabFramebuffer() for capturing the
|
||||
content into a QImage.
|
||||
- tools and examples consistently use the QtProject organization name
|
||||
- [QTBUG-40130] Add containsPress property to MouseArea
|
||||
- Added QQuickFontMetrics, which provides a subset of QFontMetricsF's API.
|
||||
- Added QQuickTextMetrics, which provides a declarative API for the
|
||||
functions in QFontMetricsF which take arguments.
|
||||
- Introduced OpenGLInfo attached type that provides information about the
|
||||
currently used OpenGL version.
|
||||
- Images exceeding GL_MAX_TEXTURE_SIZE will be downscaled to fit so they
|
||||
will still show.
|
||||
- [QTBUG-42096] Fixed nodes sometimes disappearing when adding many new
|
||||
nodes to the tree.
|
||||
|
||||
- Canvas:
|
||||
* Implement antialiasing on FramebufferObject based render targets
|
||||
through super-sampling (SSAA) when framebuffer multisampling is not
|
||||
available.
|
||||
|
||||
- Important Behavior Changes:
|
||||
* Drag and Drop events now propagate to child items before their
|
||||
parents.
|
||||
* [QTBUG-40329] TextInput::displayText now includes also partial input
|
||||
from an input method and thus matches with the actual displayed text.
|
||||
|
||||
- Item:
|
||||
* Added functions QQuickItem::grabToImage() and Item::grabToImage() to
|
||||
allow grabbing of items into system-memory images.
|
||||
* When Item.opacity is set to a value outside the range of 0 to 1, it
|
||||
will be clamped.
|
||||
|
||||
- ListView:
|
||||
* Introduced headerPositioning and footerPositioning properties to
|
||||
control whether header and footer are positioned inline, as overlays,
|
||||
or so that they slide away and can be pulled back regardless of the
|
||||
content position.
|
||||
|
||||
- QQuickItem:
|
||||
* Added signals sceneGraphInitialized and sceneGraphInvalidated
|
||||
|
||||
- QQuickWindow:
|
||||
* Added QQuickWindow::scheduleRenderJob(), a convenience alternative to
|
||||
the equivalent signals for one-shot tasks.
|
||||
|
||||
- SceneGraph:
|
||||
* There might not be an OpenGL context bound when
|
||||
QQuickWindow::sceneGraphInvalidated() is emitted if an error occurs
|
||||
while cleaning up the scene graph (such as EGL_CONTEXT_LOST). This is
|
||||
according to the documentation, but has never occurred in practice
|
||||
before.
|
||||
|
||||
- TextInput:
|
||||
* Added passwordMaskDelay property
|
||||
* [QTBUG-38934] Added TextInput::ensureVisible(int pos) method to be
|
||||
able to control the scrolling position of a TextInput that has
|
||||
automatic scrolling enabled.
|
||||
|
||||
- Window:
|
||||
* Added Item.Window attached property
|
||||
|
||||
QtQuick.Dialogs
|
||||
---------------
|
||||
|
||||
- [QTBUG-39365] FontDialog: support keyboard navigation
|
||||
- [QTBUG-39231] FileDialog: added sidebarVisible property and button
|
||||
|
||||
|
|
@ -637,8 +637,10 @@ Property *ArrayData::insert(Object *o, uint index, bool isAccessor)
|
|||
o->initSparseArray();
|
||||
SparseArrayData *s = static_cast<SparseArrayData *>(o->arrayData());
|
||||
SparseArrayNode *n = s->sparse()->insert(index);
|
||||
if (n->value == UINT_MAX)
|
||||
if (n->value == UINT_MAX) {
|
||||
n->value = SparseArrayData::allocate(o, isAccessor);
|
||||
s = static_cast<SparseArrayData *>(o->arrayData());
|
||||
}
|
||||
return reinterpret_cast<Property *>(s->arrayData() + n->value);
|
||||
}
|
||||
|
||||
|
|
|
@ -245,7 +245,7 @@ Managed *MemoryManager::allocData(std::size_t size)
|
|||
m_d->availableItems[pos] += uint(increase);
|
||||
m_d->totalItems += int(increase);
|
||||
#ifdef V4_USE_VALGRIND
|
||||
VALGRIND_MAKE_MEM_NOACCESS(allocation.memory, allocation.chunkSize);
|
||||
VALGRIND_MAKE_MEM_NOACCESS(allocation.memory.base(), allocSize);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -491,6 +491,12 @@ The following functions are also on the Qt object.
|
|||
\li \c application.domain
|
||||
\li This is the organization domain set on the QCoreApplication instance. This property can be written
|
||||
to in order to set the organization domain.
|
||||
|
||||
\row
|
||||
\li \c application.supportsMultipleWindows
|
||||
\li This read-only property can be used to determine whether or not the
|
||||
platform supports multiple windows. Some embedded platforms do not support
|
||||
multiple windows, for example.
|
||||
\endtable
|
||||
|
||||
The object also has one signal, aboutToQuit(), which is the same as \l QCoreApplication::aboutToQuit().
|
||||
|
|
|
@ -63,7 +63,8 @@ static const QLatin1Char Backslash('\\');
|
|||
static const QLatin1Char Colon(':');
|
||||
static const QLatin1String Slash_qmldir("/qmldir");
|
||||
static const QLatin1String String_qmldir("qmldir");
|
||||
static const QString dotqml_string(QLatin1String(".qml"));
|
||||
static const QString dotqml_string(QStringLiteral(".qml"));
|
||||
static const QString dotuidotqml_string(QStringLiteral(".ui.qml"));
|
||||
static bool designerSupportRequired = false;
|
||||
|
||||
namespace {
|
||||
|
@ -657,23 +658,28 @@ bool QQmlImportNamespace::Import::resolveType(QQmlTypeLoader *typeLoader,
|
|||
return (*type_return != 0);
|
||||
}
|
||||
} else if (!isLibrary) {
|
||||
QString qmlUrl = url + QString::fromRawData(type.constData(), type.length()) + dotqml_string;
|
||||
|
||||
QString qmlUrl;
|
||||
bool exists = false;
|
||||
|
||||
if (QQmlFile::isBundle(qmlUrl)) {
|
||||
exists = QQmlFile::bundleFileExists(qmlUrl, typeLoader->engine());
|
||||
} else {
|
||||
exists = !typeLoader->absoluteFilePath(QQmlFile::urlToLocalFileOrQrc(qmlUrl)).isEmpty();
|
||||
if (!exists) {
|
||||
QString formUrl = url + QString::fromRawData(type.constData(), type.length()) + QStringLiteral(".ui.qml");
|
||||
if (!typeLoader->absoluteFilePath(QQmlFile::urlToLocalFileOrQrc(formUrl)).isEmpty()) {
|
||||
exists = true;
|
||||
qmlUrl = formUrl;
|
||||
}
|
||||
const QString urlsToTry[2] = {
|
||||
url + QString::fromRawData(type.constData(), type.length()) + dotqml_string, // Type -> Type.qml
|
||||
url + QString::fromRawData(type.constData(), type.length()) + dotuidotqml_string // Type -> Type.ui.qml
|
||||
};
|
||||
for (uint i = 0; i < sizeof(urlsToTry) / sizeof(urlsToTry[0]); ++i) {
|
||||
const QString url = urlsToTry[i];
|
||||
|
||||
if (QQmlFile::isBundle(url)) {
|
||||
exists = QQmlFile::bundleFileExists(url, typeLoader->engine());
|
||||
} else {
|
||||
exists = !typeLoader->absoluteFilePath(QQmlFile::urlToLocalFileOrQrc(url)).isEmpty();
|
||||
if (!exists)
|
||||
exists = QQmlMetaType::findCachedCompilationUnit(QUrl(url));
|
||||
}
|
||||
|
||||
if (exists) {
|
||||
qmlUrl = url;
|
||||
break;
|
||||
}
|
||||
if (!exists)
|
||||
exists = QQmlMetaType::findCachedCompilationUnit(QUrl(qmlUrl));
|
||||
}
|
||||
|
||||
if (exists) {
|
||||
|
|
|
@ -3947,7 +3947,7 @@ void QQuickWindow::runJobsAfterSwap()
|
|||
*
|
||||
* \sa QWindow::devicePixelRatio()
|
||||
*/
|
||||
int QQuickWindow::effectiveDevicePixelRatio() const
|
||||
qreal QQuickWindow::effectiveDevicePixelRatio() const
|
||||
{
|
||||
QWindow *w = QQuickRenderControl::renderWindowFor(const_cast<QQuickWindow *>(this));
|
||||
return w ? w->devicePixelRatio() : devicePixelRatio();
|
||||
|
|
|
@ -142,7 +142,7 @@ public:
|
|||
|
||||
void scheduleRenderJob(QRunnable *job, RenderStage schedule);
|
||||
|
||||
int effectiveDevicePixelRatio() const;
|
||||
qreal effectiveDevicePixelRatio() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void frameSwapped();
|
||||
|
|
|
@ -1209,6 +1209,11 @@ void tst_qquickwindow::headless()
|
|||
QVERIFY(window->openglContext() == 0);
|
||||
}
|
||||
|
||||
if (QGuiApplication::platformName() == QLatin1String("windows")
|
||||
&& QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES) {
|
||||
QSKIP("Crashes on Windows/ANGLE, QTBUG-42967");
|
||||
}
|
||||
|
||||
// Destroy the native windowing system buffers
|
||||
window->destroy();
|
||||
QVERIFY(window->handle() == 0);
|
||||
|
|
Loading…
Reference in New Issue