Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: Ic2cea85917751b89c34768fd80d8b11f5706dd62
This commit is contained in:
commit
9aceff567c
|
@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE
|
|||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty string QtQml.Models::DelegateChoice::roleValue
|
||||
\qmlproperty variant QtQml.Models::DelegateChoice::roleValue
|
||||
This property holds the value used to match the role data for the role provided by \l DelegateChooser::role.
|
||||
*/
|
||||
QVariant QQmlDelegateChoice::roleValue() const
|
||||
|
@ -75,7 +75,7 @@ void QQmlDelegateChoice::setRoleValue(const QVariant &value)
|
|||
}
|
||||
|
||||
/*!
|
||||
\qmlproperty index QtQml.Models::DelegateChoice::row
|
||||
\qmlproperty int QtQml.Models::DelegateChoice::row
|
||||
This property holds the value used to match the row value of model elements.
|
||||
With models that have only the index property (and thus only one column), this property
|
||||
should be intended as an index, and set to the desired index value.
|
||||
|
@ -87,7 +87,7 @@ void QQmlDelegateChoice::setRoleValue(const QVariant &value)
|
|||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty index QtQml.Models::DelegateChoice::index
|
||||
\qmlproperty int QtQml.Models::DelegateChoice::index
|
||||
This property holds the value used to match the index value of model elements.
|
||||
This is effectively an alias for \l row.
|
||||
|
||||
|
@ -109,7 +109,7 @@ void QQmlDelegateChoice::setRow(int r)
|
|||
}
|
||||
|
||||
/*!
|
||||
\qmlproperty index QtQml.Models::DelegateChoice::column
|
||||
\qmlproperty int QtQml.Models::DelegateChoice::column
|
||||
This property holds the value used to match the column value of model elements.
|
||||
*/
|
||||
int QQmlDelegateChoice::column() const
|
||||
|
|
|
@ -51,7 +51,7 @@ static QVector<QQmlPreviewPosition::ScreenData> initScreensData()
|
|||
QVector<QQmlPreviewPosition::ScreenData> screensData;
|
||||
|
||||
for (QScreen *screen : QGuiApplication::screens()) {
|
||||
QQmlPreviewPosition::ScreenData sd{screen->name(), screen->size()};
|
||||
QQmlPreviewPosition::ScreenData sd{screen->name(), screen->geometry()};
|
||||
screensData.append(sd);
|
||||
}
|
||||
return screensData;
|
||||
|
@ -69,20 +69,20 @@ static QScreen *findScreen(const QString &nameOfScreen)
|
|||
static QDataStream &operator<<(QDataStream &out, const QQmlPreviewPosition::ScreenData &screenData)
|
||||
{
|
||||
out << screenData.name;
|
||||
out << screenData.size;
|
||||
out << screenData.rect;
|
||||
return out;
|
||||
}
|
||||
|
||||
static QDataStream &operator>>(QDataStream &in, QQmlPreviewPosition::ScreenData &screenData)
|
||||
{
|
||||
in >> screenData.name;
|
||||
in >> screenData.size;
|
||||
in >> screenData.rect;
|
||||
return in;
|
||||
}
|
||||
|
||||
bool QQmlPreviewPosition::ScreenData::operator==(const QQmlPreviewPosition::ScreenData &other) const
|
||||
{
|
||||
return other.size == size && other.name == name;
|
||||
return other.rect == rect && other.name == name;
|
||||
}
|
||||
|
||||
QQmlPreviewPosition::QQmlPreviewPosition()
|
||||
|
@ -211,8 +211,13 @@ void QQmlPreviewPosition::setPosition(const QQmlPreviewPosition::Position &posit
|
|||
return;
|
||||
if (QScreen *screen = findScreen(position.screenName)) {
|
||||
window->setScreen(screen);
|
||||
window->setFramePosition(QHighDpiScaling::mapPositionFromNative(position.nativePosition,
|
||||
screen->handle()));
|
||||
const auto point = QHighDpiScaling::mapPositionFromNative(position.nativePosition,
|
||||
screen->handle());
|
||||
const QRect geometry(point, window->size());
|
||||
if (screen->virtualGeometry().contains(geometry))
|
||||
window->setFramePosition(point);
|
||||
else
|
||||
qWarning("preview position is out of screen");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
#include <QtCore/qurl.h>
|
||||
#include <QtCore/qtimer.h>
|
||||
#include <QtCore/qsettings.h>
|
||||
#include <QtCore/qsize.h>
|
||||
#include <QtCore/qrect.h>
|
||||
#include <QtCore/qdatastream.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
@ -70,7 +70,7 @@ public:
|
|||
public:
|
||||
bool operator==(const QQmlPreviewPosition::ScreenData &other) const;
|
||||
QString name;
|
||||
QSize size;
|
||||
QRect rect;
|
||||
};
|
||||
class Position {
|
||||
public:
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 8.1 KiB |
|
@ -0,0 +1,76 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtQuick module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
import QtQuick 2.14
|
||||
|
||||
//![0]
|
||||
Column {
|
||||
TextEdit {
|
||||
font.pointSize: 24
|
||||
textFormat: TextEdit.AutoText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
TextEdit {
|
||||
font.pointSize: 24
|
||||
textFormat: TextEdit.RichText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
TextEdit {
|
||||
font.pointSize: 24
|
||||
textFormat: TextEdit.PlainText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
TextEdit {
|
||||
font.pointSize: 24
|
||||
textFormat: TextEdit.MarkdownText
|
||||
text: "**Hello** *World!*"
|
||||
}
|
||||
}
|
||||
//![0]
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtQuick module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
import QtQuick 2.14
|
||||
|
||||
//![0]
|
||||
Column {
|
||||
Text {
|
||||
font.pointSize: 24
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
Text {
|
||||
font.pointSize: 24
|
||||
textFormat: Text.RichText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
Text {
|
||||
font.pointSize: 24
|
||||
textFormat: Text.PlainText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
Text {
|
||||
font.pointSize: 24
|
||||
textFormat: Text.MarkdownText
|
||||
text: "**Hello** *World!*"
|
||||
}
|
||||
}
|
||||
//![0]
|
||||
|
|
@ -1531,7 +1531,7 @@ QQuickItemViewPrivate::QQuickItemViewPrivate()
|
|||
, inLayout(false), inViewportMoved(false), forceLayout(false), currentIndexCleared(false)
|
||||
, haveHighlightRange(false), autoHighlight(true), highlightRangeStartValid(false), highlightRangeEndValid(false)
|
||||
, fillCacheBuffer(false), inRequest(false)
|
||||
, runDelayedRemoveTransition(false), delegateValidated(false)
|
||||
, runDelayedRemoveTransition(false), delegateValidated(false), isClearing(false)
|
||||
{
|
||||
bufferPause.addAnimationChangeListener(this, QAbstractAnimationJob::Completion);
|
||||
bufferPause.setLoopCount(1);
|
||||
|
@ -1707,6 +1707,10 @@ void QQuickItemViewPrivate::updateCurrent(int modelIndex)
|
|||
void QQuickItemViewPrivate::clear(bool onDestruction)
|
||||
{
|
||||
Q_Q(QQuickItemView);
|
||||
|
||||
isClearing = true;
|
||||
auto cleanup = qScopeGuard([this] { isClearing = false; });
|
||||
|
||||
currentChanges.reset();
|
||||
bufferedChanges.reset();
|
||||
timeline.clear();
|
||||
|
@ -2444,7 +2448,7 @@ bool QQuickItemViewPrivate::releaseItem(FxViewItem *item, QQmlInstanceModel::Reu
|
|||
QQmlInstanceModel::ReleaseFlags flags = {};
|
||||
if (model && item->item) {
|
||||
flags = model->release(item->item, reusableFlag);
|
||||
if (!flags) {
|
||||
if (!flags && !isClearing) {
|
||||
// item was not destroyed, and we no longer reference it.
|
||||
if (item->item->parentItem() == contentItem) {
|
||||
// Only cull the item if its parent item is still our contentItem.
|
||||
|
|
|
@ -323,6 +323,7 @@ public:
|
|||
bool inRequest : 1;
|
||||
bool runDelayedRemoveTransition : 1;
|
||||
bool delegateValidated : 1;
|
||||
bool isClearing : 1;
|
||||
|
||||
protected:
|
||||
virtual Qt::Orientation layoutOrientation() const = 0;
|
||||
|
|
|
@ -2242,6 +2242,21 @@ void QQuickTableViewPrivate::syncDelegate()
|
|||
tableModel->setDelegate(assignedDelegate);
|
||||
}
|
||||
|
||||
QVariant QQuickTableViewPrivate::modelImpl() const
|
||||
{
|
||||
return assignedModel;
|
||||
}
|
||||
|
||||
void QQuickTableViewPrivate::setModelImpl(const QVariant &newModel)
|
||||
{
|
||||
if (newModel == assignedModel)
|
||||
return;
|
||||
|
||||
assignedModel = newModel;
|
||||
scheduleRebuildTable(QQuickTableViewPrivate::RebuildOption::All);
|
||||
emit q_func()->modelChanged();
|
||||
}
|
||||
|
||||
void QQuickTableViewPrivate::syncModel()
|
||||
{
|
||||
if (modelVariant == assignedModel)
|
||||
|
@ -2663,18 +2678,12 @@ void QQuickTableView::setColumnWidthProvider(const QJSValue &provider)
|
|||
|
||||
QVariant QQuickTableView::model() const
|
||||
{
|
||||
return d_func()->assignedModel;
|
||||
return d_func()->modelImpl();
|
||||
}
|
||||
|
||||
void QQuickTableView::setModel(const QVariant &newModel)
|
||||
{
|
||||
Q_D(QQuickTableView);
|
||||
if (newModel == d->assignedModel)
|
||||
return;
|
||||
|
||||
d->assignedModel = newModel;
|
||||
d->scheduleRebuildTable(QQuickTableViewPrivate::RebuildOption::All);
|
||||
emit modelChanged();
|
||||
return d_func()->setModelImpl(newModel);
|
||||
}
|
||||
|
||||
QQmlComponent *QQuickTableView::delegate() const
|
||||
|
|
|
@ -104,8 +104,8 @@ public:
|
|||
QJSValue columnWidthProvider() const;
|
||||
void setColumnWidthProvider(const QJSValue &provider);
|
||||
|
||||
virtual QVariant model() const;
|
||||
virtual void setModel(const QVariant &newModel);
|
||||
QVariant model() const;
|
||||
void setModel(const QVariant &newModel);
|
||||
|
||||
QQmlComponent *delegate() const;
|
||||
void setDelegate(QQmlComponent *);
|
||||
|
|
|
@ -404,11 +404,13 @@ public:
|
|||
void itemReusedCallback(int modelIndex, QObject *object);
|
||||
void modelUpdated(const QQmlChangeSet &changeSet, bool reset);
|
||||
|
||||
inline void syncWithPendingChanges();
|
||||
inline void syncDelegate();
|
||||
inline void syncModel();
|
||||
virtual void syncWithPendingChanges();
|
||||
virtual void syncDelegate();
|
||||
virtual QVariant modelImpl() const;
|
||||
virtual void setModelImpl(const QVariant &newModel);
|
||||
virtual void syncModel();
|
||||
inline void syncRebuildOptions();
|
||||
inline void syncSyncView();
|
||||
virtual void syncSyncView();
|
||||
|
||||
void connectToModel();
|
||||
void disconnectFromModel();
|
||||
|
|
|
@ -1697,6 +1697,9 @@ void QQuickText::itemChange(ItemChange change, const ItemChangeData &value)
|
|||
|
||||
The item will try to automatically determine whether the text should
|
||||
be treated as styled text. This determination is made using Qt::mightBeRichText().
|
||||
However, detection of Markdown is not automatic.
|
||||
|
||||
\sa textFormat
|
||||
*/
|
||||
QString QQuickText::text() const
|
||||
{
|
||||
|
@ -2124,26 +2127,25 @@ void QQuickText::resetMaximumLineCount()
|
|||
/*!
|
||||
\qmlproperty enumeration QtQuick::Text::textFormat
|
||||
|
||||
The way the text property should be displayed.
|
||||
The way the \l text property should be displayed.
|
||||
|
||||
Supported text formats are:
|
||||
|
||||
\list
|
||||
\li Text.AutoText (default)
|
||||
\li Text.PlainText
|
||||
\li Text.StyledText
|
||||
\li Text.RichText
|
||||
\endlist
|
||||
\value Text.AutoText (default) detected via the Qt::mightBeRichText() heuristic
|
||||
\value Text.PlainText all styling tags are treated as plain text
|
||||
\value Text.StyledText optimized basic rich text as in HTML 3.2
|
||||
\value Text.RichText \l {Supported HTML Subset} {a subset of HTML 4}
|
||||
\value Text.MarkdownText \l {https://commonmark.org/help/}{CommonMark} plus the
|
||||
\l {https://guides.github.com/features/mastering-markdown/}{GitHub}
|
||||
extensions for tables and task lists (since 5.14)
|
||||
|
||||
If the text format is \c Text.AutoText the Text item
|
||||
will automatically determine whether the text should be treated as
|
||||
styled text. This determination is made using Qt::mightBeRichText()
|
||||
which uses a fast and therefore simple heuristic. It mainly checks
|
||||
whether there is something that looks like a tag before the first
|
||||
line break. Although the result may be correct for common cases,
|
||||
there is no guarantee.
|
||||
styled text. This determination is made using Qt::mightBeRichText(),
|
||||
which can detect the presence of an HTML tag on the first line of text,
|
||||
but cannot distinguish Markdown from plain text.
|
||||
|
||||
Text.StyledText is an optimized format supporting some basic text
|
||||
\c Text.StyledText is an optimized format supporting some basic text
|
||||
styling markup, in the style of HTML 3.2:
|
||||
|
||||
\code
|
||||
|
@ -2169,30 +2171,21 @@ void QQuickText::resetMaximumLineCount()
|
|||
\table
|
||||
\row
|
||||
\li
|
||||
\qml
|
||||
Column {
|
||||
Text {
|
||||
font.pointSize: 24
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
Text {
|
||||
font.pointSize: 24
|
||||
textFormat: Text.RichText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
Text {
|
||||
font.pointSize: 24
|
||||
textFormat: Text.PlainText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
}
|
||||
\endqml
|
||||
\snippet qml/text/textFormats.qml 0
|
||||
\li \image declarative-textformat.png
|
||||
\endtable
|
||||
|
||||
Text.RichText supports a larger subset of HTML 4, as described on the
|
||||
\l {Supported HTML Subset} page. You should prefer using Text.PlainText
|
||||
or Text.StyledText instead, as they offer better performance.
|
||||
\c Text.RichText supports a larger subset of HTML 4, as described on the
|
||||
\l {Supported HTML Subset} page. You should prefer using \c Text.PlainText,
|
||||
\c Text.StyledText or \c Text.MarkdownText instead, as they offer better performance.
|
||||
|
||||
\note With \c Text.MarkdownText, and with the supported subset of HTML,
|
||||
some decorative elements are not rendered as they would be in a web browser:
|
||||
\list
|
||||
\li code blocks use the \l {QFontDatabase::FixedFont}{default monospace font} but without a surrounding highlight box
|
||||
\li block quotes are indented, but there is no vertical line alongside the quote
|
||||
\li horizontal rules are not rendered
|
||||
\endlist
|
||||
*/
|
||||
QQuickText::TextFormat QQuickText::textFormat() const
|
||||
{
|
||||
|
|
|
@ -395,6 +395,7 @@ QString QQuickTextEdit::text() const
|
|||
The text to display. If the text format is AutoText the text edit will
|
||||
automatically determine whether the text should be treated as
|
||||
rich text. This determination is made using Qt::mightBeRichText().
|
||||
However, detection of Markdown is not automatic.
|
||||
|
||||
The text-property is mostly suitable for setting the initial content and
|
||||
handling modifications to relatively small text content. The append(),
|
||||
|
@ -402,7 +403,7 @@ QString QQuickTextEdit::text() const
|
|||
remarkably better performance for modifying especially large rich text
|
||||
content.
|
||||
|
||||
\sa clear()
|
||||
\sa clear(), textFormat
|
||||
*/
|
||||
void QQuickTextEdit::setText(const QString &text)
|
||||
{
|
||||
|
@ -444,41 +445,43 @@ QString QQuickTextEdit::preeditText() const
|
|||
/*!
|
||||
\qmlproperty enumeration QtQuick::TextEdit::textFormat
|
||||
|
||||
The way the text property should be displayed.
|
||||
The way the \l text property should be displayed.
|
||||
|
||||
\list
|
||||
\li TextEdit.AutoText
|
||||
\li TextEdit.PlainText
|
||||
\li TextEdit.RichText
|
||||
\endlist
|
||||
Supported text formats are:
|
||||
|
||||
The default is TextEdit.PlainText. If the text format is TextEdit.AutoText the text edit
|
||||
will automatically determine whether the text should be treated as
|
||||
rich text. This determination is made using Qt::mightBeRichText().
|
||||
\value TextEdit.PlainText (default) all styling tags are treated as plain text
|
||||
\value TextEdit.AutoText detected via the Qt::mightBeRichText() heuristic
|
||||
\value TextEdit.RichText \l {Supported HTML Subset} {a subset of HTML 4}
|
||||
\value TextEdit.MarkdownText \l {https://commonmark.org/help/}{CommonMark} plus the
|
||||
\l {https://guides.github.com/features/mastering-markdown/}{GitHub}
|
||||
extensions for tables and task lists (since 5.14)
|
||||
|
||||
The default is \c TextEdit.PlainText. If the text format is set to
|
||||
\c TextEdit.AutoText, the text edit will automatically determine whether
|
||||
the text should be treated as rich text. This determination is made using
|
||||
Qt::mightBeRichText(), which can detect the presence of an HTML tag on the
|
||||
first line of text, but cannot distinguish Markdown from plain text.
|
||||
|
||||
\table
|
||||
\row
|
||||
\li
|
||||
\qml
|
||||
Column {
|
||||
TextEdit {
|
||||
font.pointSize: 24
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
TextEdit {
|
||||
font.pointSize: 24
|
||||
textFormat: TextEdit.RichText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
TextEdit {
|
||||
font.pointSize: 24
|
||||
textFormat: TextEdit.PlainText
|
||||
text: "<b>Hello</b> <i>World!</i>"
|
||||
}
|
||||
}
|
||||
\endqml
|
||||
\snippet qml/text/textEditFormats.qml 0
|
||||
\li \image declarative-textformat.png
|
||||
\endtable
|
||||
|
||||
With \c TextEdit.MarkdownText, checkboxes that result from using the
|
||||
\l {https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown}{GitHub checkbox extension}
|
||||
are interactively checkable.
|
||||
|
||||
\note Interactively typing markup or markdown formatting is not supported.
|
||||
|
||||
\note With \c Text.MarkdownText, and with the supported subset of HTML,
|
||||
some decorative elements are not rendered as they would be in a web browser:
|
||||
\list
|
||||
\li code blocks use the \l {QFontDatabase::FixedFont}{default monospace font} but without a surrounding highlight box
|
||||
\li block quotes are indented, but there is no vertical line alongside the quote
|
||||
\li horizontal rules are not rendered
|
||||
\endlist
|
||||
*/
|
||||
QQuickTextEdit::TextFormat QQuickTextEdit::textFormat() const
|
||||
{
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
import QtQuick 2.13
|
||||
import QtQml 2.13
|
||||
import QtQml.Models 2.13
|
||||
|
||||
Rectangle {
|
||||
width: 640
|
||||
height: 480
|
||||
property var model1: null
|
||||
property var model2: null
|
||||
Component {
|
||||
id: m1
|
||||
ObjectModel {
|
||||
Rectangle { height: 30; width: 80; color: "red" }
|
||||
Rectangle { height: 30; width: 80; color: "green" }
|
||||
Rectangle { height: 30; width: 80; color: "blue" }
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: m2
|
||||
ObjectModel {
|
||||
Rectangle { height: 30; width: 80; color: "red" }
|
||||
}
|
||||
}
|
||||
ListView {
|
||||
anchors.fill: parent
|
||||
Component.onCompleted: {
|
||||
model1 = m1.createObject()
|
||||
model = model1
|
||||
model2 = m2.createObject()
|
||||
model = model2
|
||||
model1.destroy()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -289,6 +289,7 @@ private slots:
|
|||
void reuse_reuseIsOffByDefault();
|
||||
void reuse_checkThatItemsAreReused();
|
||||
void moveObjectModelItemToAnotherObjectModel();
|
||||
void changeModelAndDestroyTheOldOne();
|
||||
|
||||
private:
|
||||
template <class T> void items(const QUrl &source);
|
||||
|
@ -9415,6 +9416,21 @@ void tst_QQuickListView::moveObjectModelItemToAnotherObjectModel()
|
|||
QVERIFY(!QQuickItemPrivate::get(redRect)->culled);
|
||||
}
|
||||
|
||||
void tst_QQuickListView::changeModelAndDestroyTheOldOne() // QTBUG-80203
|
||||
{
|
||||
QScopedPointer<QQuickView> window(createView());
|
||||
window->setSource(testFileUrl("changeModelAndDestroyTheOldOne.qml"));
|
||||
window->resize(640, 480);
|
||||
window->show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(window.data()));
|
||||
|
||||
QQuickItem *root = window->rootObject();
|
||||
QVERIFY(root);
|
||||
|
||||
QVERIFY(QQuickTest::qWaitForItemPolished(root));
|
||||
// no crash
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QQuickListView)
|
||||
|
||||
#include "tst_qquicklistview.moc"
|
||||
|
|
|
@ -4,3 +4,7 @@ windows gcc developer-build
|
|||
# QTBUG-74517
|
||||
[buttonOnFlickable]
|
||||
windows gcc developer-build
|
||||
|
||||
# QTBUG-74517
|
||||
[touchButtonOnFlickable]
|
||||
windows gcc developer-build
|
||||
|
|
|
@ -332,26 +332,35 @@ void quietMessageHandler(QtMsgType type, const QMessageLogContext &ctxt, const Q
|
|||
}
|
||||
}
|
||||
|
||||
// Called before application initialization, removes arguments it uses
|
||||
void getAppFlags(int &argc, char **argv)
|
||||
// Called before application initialization
|
||||
static void getAppFlags(int argc, char **argv)
|
||||
{
|
||||
#ifdef QT_GUI_LIB
|
||||
for (int i=0; i<argc; i++) {
|
||||
if (!strcmp(argv[i], "--apptype") || !strcmp(argv[i], "-a") || !strcmp(argv[i], "-apptype")) {
|
||||
applicationType = QmlApplicationTypeUnknown;
|
||||
if (i+1 < argc) {
|
||||
if (!strcmp(argv[i+1], "core"))
|
||||
++i;
|
||||
if (!strcmp(argv[i], "core"))
|
||||
applicationType = QmlApplicationTypeCore;
|
||||
else if (!strcmp(argv[i+1], "gui"))
|
||||
else if (!strcmp(argv[i], "gui"))
|
||||
applicationType = QmlApplicationTypeGui;
|
||||
#ifdef QT_WIDGETS_LIB
|
||||
else if (!strcmp(argv[i+1], "widget"))
|
||||
# ifdef QT_WIDGETS_LIB
|
||||
else if (!strcmp(argv[i], "widget"))
|
||||
applicationType = QmlApplicationTypeWidget;
|
||||
#endif // QT_WIDGETS_LIB
|
||||
# endif // QT_WIDGETS_LIB
|
||||
|
||||
}
|
||||
for (int j=i; j<argc-2; j++)
|
||||
argv[j] = argv[j+2];
|
||||
argc -= 2;
|
||||
} else if (!strcmp(argv[i], "-desktop") || !strcmp(argv[i], "--desktop")) {
|
||||
QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
|
||||
} else if (!strcmp(argv[i], "-gles") || !strcmp(argv[i], "--gles")) {
|
||||
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
|
||||
} else if (!strcmp(argv[i], "-software") || !strcmp(argv[i], "--software")) {
|
||||
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
|
||||
} else if (!strcmp(argv[i], "-scaling") || !strcmp(argv[i], "--scaling")) {
|
||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
} else if (!strcmp(argv[i], "-no-scaling") || !strcmp(argv[i], "--no-scaling")) {
|
||||
QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
@ -466,22 +475,24 @@ int main(int argc, char *argv[])
|
|||
QCommandLineOption dummyDataOption(QStringLiteral("dummy-data"),
|
||||
QCoreApplication::translate("main", "Load QML files from the given directory as context properties."), QStringLiteral("file"));
|
||||
parser.addOption(dummyDataOption);
|
||||
#ifdef QT_GUI_LIB
|
||||
// OpenGL options
|
||||
QCommandLineOption glDesktopOption(QStringLiteral("desktop"),
|
||||
QCoreApplication::translate("main", "Force use of desktop OpenGL (AA_UseDesktopOpenGL)."));
|
||||
parser.addOption(glDesktopOption);
|
||||
parser.addOption(glDesktopOption); // Just for the help text... we've already handled this argument above
|
||||
QCommandLineOption glEsOption(QStringLiteral("gles"),
|
||||
QCoreApplication::translate("main", "Force use of GLES (AA_UseOpenGLES)."));
|
||||
parser.addOption(glEsOption);
|
||||
parser.addOption(glEsOption); // Just for the help text... we've already handled this argument above
|
||||
QCommandLineOption glSoftwareOption(QStringLiteral("software"),
|
||||
QCoreApplication::translate("main", "Force use of software rendering (AA_UseSoftwareOpenGL)."));
|
||||
parser.addOption(glSoftwareOption);
|
||||
parser.addOption(glSoftwareOption); // Just for the help text... we've already handled this argument above
|
||||
QCommandLineOption scalingOption(QStringLiteral("scaling"),
|
||||
QCoreApplication::translate("main", "Enable High DPI scaling (AA_EnableHighDpiScaling)."));
|
||||
parser.addOption(scalingOption);
|
||||
parser.addOption(scalingOption); // Just for the help text... we've already handled this argument above
|
||||
QCommandLineOption noScalingOption(QStringLiteral("no-scaling"),
|
||||
QCoreApplication::translate("main", "Disable High DPI scaling (AA_DisableHighDpiScaling)."));
|
||||
parser.addOption(noScalingOption);
|
||||
parser.addOption(noScalingOption); // Just for the help text... we've already handled this argument above
|
||||
#endif // QT_GUI_LIB
|
||||
// Debugging and verbosity options
|
||||
QCommandLineOption quietOption(QStringLiteral("quiet"),
|
||||
QCoreApplication::translate("main", "Suppress all output."));
|
||||
|
@ -537,16 +548,6 @@ int main(int argc, char *argv[])
|
|||
if (parser.isSet(fixedAnimationsOption))
|
||||
QUnifiedTimer::instance()->setConsistentTiming(true);
|
||||
#endif
|
||||
if (parser.isSet(glEsOption))
|
||||
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
|
||||
if (parser.isSet(glSoftwareOption))
|
||||
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
|
||||
if (parser.isSet(glDesktopOption))
|
||||
QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
|
||||
if (parser.isSet(scalingOption))
|
||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
if (parser.isSet(noScalingOption))
|
||||
QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
|
||||
for (const QString &importPath : parser.values(importOption))
|
||||
e.addImportPath(importPath);
|
||||
files << parser.values(qmlFileOption);
|
||||
|
|
Loading…
Reference in New Issue