Merge remote-tracking branch 'origin/5.15' into dev

Change-Id: Ic2cea85917751b89c34768fd80d8b11f5706dd62
This commit is contained in:
Qt Forward Merge Bot 2020-01-21 01:00:14 +01:00
commit 9aceff567c
17 changed files with 338 additions and 115 deletions

View File

@ -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

View File

@ -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");
}
}

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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.

View File

@ -323,6 +323,7 @@ public:
bool inRequest : 1;
bool runDelayedRemoveTransition : 1;
bool delegateValidated : 1;
bool isClearing : 1;
protected:
virtual Qt::Orientation layoutOrientation() const = 0;

View File

@ -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

View File

@ -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 *);

View File

@ -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();

View File

@ -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
{

View File

@ -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
{

View File

@ -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()
}
}
}

View File

@ -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"

View File

@ -4,3 +4,7 @@ windows gcc developer-build
# QTBUG-74517
[buttonOnFlickable]
windows gcc developer-build
# QTBUG-74517
[touchButtonOnFlickable]
windows gcc developer-build

View File

@ -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);