From e55a61a77f0c87c05661a0335dfdb12673c6a27f Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 18 Nov 2019 15:13:51 +0100 Subject: Fix passing FOO_LIBS variables to configure This amends commit 9864d2c6. Some variables that are set in qtConfLibrary_inline were not exported. Fixes: QTBUG-78873 Change-Id: I10d766c1f41d2baa61967ee931a6631346cac2e9 Reviewed-by: Alexandru Croitor --- mkspecs/features/qt_configure.prf | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 7ed1f7f03a..6537d98c5d 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -666,6 +666,7 @@ defineTest(qtConfLibrary_inline) { vars += $$eval(config.commandline.rev_assignments.$${iv}) defined(config.input.$${iv}, var) { eval($${1}.builds.$${b} = $$eval(config.input.$${iv})) + export($${1}.builds.$${b}) $${1}.builds._KEYS_ *= $${b} any = true } else { @@ -680,11 +681,14 @@ defineTest(qtConfLibrary_inline) { export($${1}.builds._KEYS_) # we also reset the generic libs, to avoid surprises. $${1}.libs = + export($${1}.libs) } # direct libs. overwrites inline libs. - defined(config.input.$${input}.libs, var): \ + defined(config.input.$${input}.libs, var) { eval($${1}.libs = $$eval(config.input.$${input}.libs)) + export($${1}.libs) + } includes = $$eval(config.input.$${input}.incdir) @@ -693,6 +697,7 @@ defineTest(qtConfLibrary_inline) { !isEmpty(prefix) { includes += $$prefix/include $${1}.libs = -L$$prefix/lib $$eval($${1}.libs) + export($${1}.libs) } libdir = $$eval(config.input.$${input}.libdir) -- cgit v1.2.3 From a131d6100ca13b00721ea30e6ef0d5225002867e Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 22 Nov 2019 09:24:55 +0100 Subject: Fix prefix determination for windeployqt'ed applications Qt5Core.dll of windeployqt'ed applications is right next to the executable, and the prefix is considered the directory where the application is located. QLibraryInfo of a relocatable Qt5Core.dll would return a wrong prefix (by default /..), because it determines the prefix with QT_CONFIGURE_LIBLOCATION_TO_PREFIX_PATH (by default ".."). We now detect whether the executable was windeployqt'ed by checking whether Qt5Core.dll is next to the executable. However, we must not do that for applications in QT_HOST_BINS, because they are not windeployqt'ed and must still use the standard prefix. We detect this case by checking whether for Qt5Core.dll exists a corresponding Qt5Core.lib in the libdir below the detected prefix. Fixes: QTBUG-79318 Change-Id: I1c9b971b282c6b9b19a93f1819ba8aee74be5be4 Reviewed-by: Friedemann Kleint --- src/corelib/global/qlibraryinfo.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 276741c9fb..8c3ed184ae 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -562,9 +562,31 @@ static QString getRelocatablePrefix() HMODULE hModule = getWindowsModuleHandle(); const int kBufferSize = 4096; wchar_t buffer[kBufferSize]; - const int pathSize = GetModuleFileName(hModule, buffer, kBufferSize); - if (pathSize > 0) - prefixPath = prefixFromQtCoreLibraryHelper(QString::fromWCharArray(buffer, pathSize)); + DWORD pathSize = GetModuleFileName(hModule, buffer, kBufferSize); + const QString qtCoreFilePath = QString::fromWCharArray(buffer, int(pathSize)); + const QString qtCoreDirPath = QFileInfo(qtCoreFilePath).absolutePath(); + pathSize = GetModuleFileName(NULL, buffer, kBufferSize); + const QString exeDirPath = QFileInfo(QString::fromWCharArray(buffer, int(pathSize))).absolutePath(); + if (QFileInfo(exeDirPath) == QFileInfo(qtCoreDirPath)) { + // QtCore DLL is next to the executable. This is either a windeployqt'ed executable or an + // executable within the QT_HOST_BIN directory. We're detecting the latter case by checking + // whether there's an import library corresponding to our QtCore DLL in PREFIX/lib. + const QString libdir = QString::fromLatin1( + qt_configure_strs + qt_configure_str_offsets[QLibraryInfo::LibrariesPath - 1]); + const QLatin1Char slash('/'); + const QString qtCoreImpLibPath + = qtCoreDirPath + + slash + QLatin1String(QT_CONFIGURE_LIBLOCATION_TO_PREFIX_PATH) + + slash + libdir + + slash + QFileInfo(qtCoreFilePath).completeBaseName() + QLatin1String(".lib"); + if (!QFileInfo::exists(qtCoreImpLibPath)) { + // We did not find a corresponding import library and conclude that this is a + // windeployqt'ed executable. + return exeDirPath; + } + } + if (!qtCoreFilePath.isEmpty()) + prefixPath = prefixFromQtCoreLibraryHelper(qtCoreFilePath); #else #error "The chosen platform / config does not support querying for a dynamic prefix." #endif -- cgit v1.2.3 From c33916a279ef5908e1ebd44644c873933f6a7c77 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 28 Nov 2019 13:38:28 +0100 Subject: Fix prefix determination for windeployqt'ed MinGW applications We hard-coded the assumption the import lib naming scheme is always basename + ".lib" which is wrong for MinGW. This amends commit a131d610. Fixes: QTBUG-80366 Change-Id: Ibefb8a54483cc62743b8783530644b03e720262c Reviewed-by: Ulf Hermann --- src/corelib/global/qlibraryinfo.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 8c3ed184ae..f0f77fe68e 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -574,11 +574,19 @@ static QString getRelocatablePrefix() const QString libdir = QString::fromLatin1( qt_configure_strs + qt_configure_str_offsets[QLibraryInfo::LibrariesPath - 1]); const QLatin1Char slash('/'); - const QString qtCoreImpLibPath - = qtCoreDirPath +#if defined(Q_CC_MINGW) + const QString implibPrefix = QStringLiteral("lib"); + const QString implibSuffix = QStringLiteral(".a"); +#else + const QString implibPrefix; + const QString implibSuffix = QStringLiteral(".lib"); +#endif + const QString qtCoreImpLibFileName = implibPrefix + + QFileInfo(qtCoreFilePath).completeBaseName() + implibSuffix; + const QString qtCoreImpLibPath = qtCoreDirPath + slash + QLatin1String(QT_CONFIGURE_LIBLOCATION_TO_PREFIX_PATH) + slash + libdir - + slash + QFileInfo(qtCoreFilePath).completeBaseName() + QLatin1String(".lib"); + + slash + qtCoreImpLibFileName; if (!QFileInfo::exists(qtCoreImpLibPath)) { // We did not find a corresponding import library and conclude that this is a // windeployqt'ed executable. -- cgit v1.2.3 From 0b2f13924263ad37e1654a856deb26601d09c4b4 Mon Sep 17 00:00:00 2001 From: Jani Heikkinen Date: Mon, 18 Nov 2019 09:24:33 +0200 Subject: Update Qt enterprise license agreement file to version 4.2 Change-Id: I4c42f92bda472aad5b0a0ebb92c6a982f1f64714 Reviewed-by: Akseli Salovaara --- LICENSE.QT-LICENSE-AGREEMENT-4.0 | 913 --------------------------- LICENSE.QT-LICENSE-AGREEMENT-4.2 | 1285 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1285 insertions(+), 913 deletions(-) delete mode 100644 LICENSE.QT-LICENSE-AGREEMENT-4.0 create mode 100644 LICENSE.QT-LICENSE-AGREEMENT-4.2 diff --git a/LICENSE.QT-LICENSE-AGREEMENT-4.0 b/LICENSE.QT-LICENSE-AGREEMENT-4.0 deleted file mode 100644 index 74bd6bb41c..0000000000 --- a/LICENSE.QT-LICENSE-AGREEMENT-4.0 +++ /dev/null @@ -1,913 +0,0 @@ -QT LICENSE AGREEMENT -Agreement version 4.0 - -This License Agreement ("Agreement") is a legal agreement between The Qt -Company (as defined below) and the Licensee (as defined below) for the license -of Licensed Software (as defined below). Capitalized terms used herein are -defined in Section 1. - -WHEREAS: - -(A). Licensee wishes to use the Licensed Software for the purpose of developing -and distributing Applications and/or Devices; and - -(B). The Qt Company is willing to grant the Licensee a right to use Licensed -Software for such purpose pursuant to term and conditions of this Agreement. - -NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: - -1. DEFINITIONS - -"Affiliate" of a Party shall mean an entity (i) which is directly or indirectly -controlling such Party; (ii) which is under the same direct or indirect -ownership or control as such Party; or (iii) which is directly or indirectly -owned or controlled by such Party. For these purposes, an entity shall be -treated as being controlled by another if that other entity has fifty percent -(50 %) or more of the votes in such entity, is able to direct its affairs -and/or to control the composition of its board of directors or equivalent body. - -"Applications" shall mean Licensee's software products created using the -Licensed Software, which may include the Redistributables, or part -thereof. - -"Contractor(s)" shall mean third party consultants, distributors and -contractors performing services to a Party under applicable contractual -arrangement. - -"Customer(s)" shall mean Licensee's end users to whom Licensee, directly or -indirectly, distributes copies of the Redistributables. - -"Deployment Platforms" shall mean operating systems specified in the License -Certificate, in which the Redistributables can be distributed pursuant to the -terms and conditions of this Agreement. - -"Designated User(s)" shall mean the employee(s) of Licensee or Licensee's -Affiliates acting within the scope of their employment or Licensee's -Contractors acting within the scope of their services for Licensee and on -behalf of Licensee. Designated Users shall be named in the License Certificate. - -"Development License" shall mean the license needed by the Licensee for each -Designated User to use the Licensed Software under the license grant described -in Section 3.1 of this Agreement. - -"Development Platforms" shall mean those operating systems specified in the -License Certificate, in which the Licensed Software can be used under the -Development License, but not distributed in any form or used for any other -purpose. - -"Devices" shall mean hardware devices or products that 1) are manufactured -and/or distributed by the Licensee or its Affiliates or Contractors, and -(2)(i) incorporate or integrate the Redistributables or parts thereof; or (ii) -do not incorporate or integrate the Redistributables at the time of -distribution, but where, when used by a Customer, the main user interface or -substantial functionality of such device is provided by Application(s) or -otherwise depends on the Licensed Software. - -"Distribution License(s)" shall mean the license required for distribution of -Redistributables in connection with Devices pursuant to license grant described -in Section 3.3 of this Agreement. - -"Distribution License Packs" shall mean set of prepaid Distribution Licenses -for distribution of Redistributables, as defined in The Qt Company's standard -price list, quote, Purchase Order confirmation or in an appendix hereto, -as the case may be. - -"Intellectual Property Rights" shall mean patents (including utility models), -design patents, and designs (whether or not capable of registration), chip -topography rights and other like protection, copyrights, trademarks, service -marks, trade names, logos or other words or symbols and any other form of -statutory protection of any kind and applications for any of the foregoing as -well as any trade secrets. - -"License Certificate" shall mean a certificate generated by The Qt Company for -each Designated User respectively upon them downloading the licensed Software. -License Certificate will be available under respective Designated User's Qt -Account at account.qt.io and it will specify the Designated User, the -Development Platforms, Deployment Platforms and the License Term. The terms of -the License Certificate are considered part of this Agreement and shall be -updated from time to time to reflect any agreed changes to the foregoing terms -relating to Designated User's rights to the Licensed Software. - -"License Fee" shall mean the fee charged to the Licensee for rights granted -under the terms of this Agreement. - -"License Term" shall mean the agreed validity period of the Development -License of the respective Designated User, during which time the -Designated User is entitled to use the Licensed Software, as set forth in the -respective License Certificate. - -"Licensed Software" shall mean all versions of the - -(i) Qt Toolkit (including Qt Essentials, Qt Add-Ons and Value-Add modules) as -described in http://doc.qt.io/qt-5/qtmodules.html, - -(ii) Qt Creator (including Creator IDE tool) as described in -http://doc.qt.io/qtcreator/index.html, - -(iii) Qt 3D Studio as described in http://doc.qt.io/qt3dstudio/index.html, and - -as well as corresponding online or electronic documentation, associated media -and printed materials, including the source code, example programs and the -documentation, licensed to the Licensee under this Agreement. Licensed Software -does not include Third Party Software (as defined in Section 4), Open Source -Qt, or other software products of The Qt Company (for example Qt Safe Renderer -and Qt for Automation), unless such other software products of The Qt Company -are separately agreed in writing to be included in scope of the Licensed -Software. - -"Licensee" shall mean the individual or legal entity that is party to this -Agreement, as identified on the signature page hereof. - -"Licensee's Records" shall mean books and records that are likely to contain -information bearing on Licensee's compliance with this Agreement or the -payments due to The Qt Company under this Agreement, including, but not limited -to: assembly logs, sales records and distribution records. - -"Modified Software" shall have the meaning as set forth in Section 2.3. - -"Online Services" shall mean any services or access to systems made available -by The Qt Company to the Licensee over the Internet relating to the Licensed -Software or for the purpose of use by the Licensee of the Licensed Software or -Support. Use of any such Online Services is discretionary for the Licensee and -some of them may be subject to additional fees. - -"Open Source Qt" shall mean the non-commercial Qt computer software products, -licensed under the terms of the GNU Lesser General Public License, version -2.1 or later ("LGPL") or the GNU General Public License, version 2.0 or later -("GPL"). For clarity, Open Source Qt shall not be provided nor governed under -this Agreement. - -"Party" or "Parties" shall mean Licensee and/or The Qt Company. - -"Redistributables" shall mean the portions of the Licensed Software set forth -in Appendix 1, Section 1 that may be distributed pursuant to the terms of this -Agreement in object code form only, including any relevant documentation. -Where relevant, any reference to Licensed Software in this Agreement shall -include and refer also to Redistributables. - -"Renewal Term" shall mean an extension of previous License Term as agreed -between the Parties. - -"Submitted Modified Software" shall have the meaning as set forth in -Section 2.3. - -"Support" shall mean standard developer support that is provided by The Qt -Company to assist Designated Users in using the Licensed Software in -accordance with The Qt Company's standard support terms and as further -defined in Section 8 hereunder. - -"Taxes" shall have the meaning set forth in Section 10.5. - -"Term" shall have the meaning set forth in Section 12. - -"The Qt Company" shall mean: - -(i) in the event Licensee is an individual residing in the United States or a -legal entity incorporated in the United States or having its headquarters in -the United States, The Qt Company Inc., a Delaware corporation with its office -at 2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or - -(ii) in the event the Licensee is an individual residing outside of the United -States or a legal entity incorporated outside of the United States or having -its registered office outside of the United States, The Qt Company Ltd., a -Finnish company with its registered office at Bertel Jungin aukio D3A, 02600 -Espoo, Finland. - -"Third Party Software " shall have the meaning set forth in Section 4. - -"Updates" shall mean a release or version of the Licensed Software containing -bug fixes, error corrections and other changes that are generally made -available to users of the Licensed Software that have contracted for Support. -Updates are generally depicted as a change to the digits following the decimal -in the Licensed Software version number. The Qt Company shall make Updates -available to the Licensee under the Support. Updates shall be considered as -part of the Licensed Software hereunder. - -"Upgrades" shall mean a release or version of the Licensed Software containing -enhancements and new features and are generally depicted as a change to the -first digit of the Licensed Software version number. In the event Upgrades are -provided to the Licensee under this Agreement, they shall be considered as -part of the Licensed Software hereunder. - -2. OWNERSHIP - -2.1 Ownership of The Qt Company - -The Licensed Software is protected by copyright laws and international -copyright treaties, as well as other intellectual property laws and treaties. -The Licensed Software is licensed, not sold. - -All The Qt Company's Intellectual Property Rights are and shall remain the -exclusive property of The Qt Company or its licensors respectively. - -2.2 Ownership of Licensee - -All the Licensee's Intellectual Property Rights are and shall remain the -exclusive property of the Licensee or its licensors respectively. - -All Intellectual Property Rights to the Modified Software, Applications and -Devices shall remain with the Licensee and no rights thereto shall be granted -by the Licensee to The Qt Company under this Agreement (except as set forth in -Section 2.3 below). - -2.3 Modified Software - -Licensee may create bug-fixes, error corrections, patches or modifications to -the Licensed Software ("Modified Software"). Such Modified Software may break -the source or binary compatibility with the Licensed Software (including -without limitation through changing the application programming interfaces -("API") or by adding, changing or deleting any variable, method, or class -signature in the Licensed Software and/or any inter-process protocols, services -or standards in the Licensed Software libraries). To the extent that Licensee's -Modified Software so breaks source or binary compatibility with the Licensed -Software, Licensee acknowledges that The Qt Company's ability to provide -Support may be prevented or limited and Licensee's ability to make use of -Updates may be restricted. - -Licensee may, at its sole and absolute discretion, choose to submit Modified -Software to The Qt Company ("Submitted Modified Software") in connection with -Licensee's Support request, service request or otherwise. In the event Licensee -does so, then, Licensee hereby grants The Qt Company a sublicensable, -assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and -fully paid-up license, under all of Licensee's Intellectual Property Rights, to -reproduce, adapt, translate, modify, and prepare derivative works of, publicly -display, publicly perform, sublicense, make available and distribute such -Submitted Modified Software as The Qt Company sees fit at its free and absolute -discretion. - -3. LICENSES GRANTED - -3.1 Development with Licensed Software - -Subject to the terms of this Agreement, The Qt Company grants to Licensee a -personal, worldwide, non-exclusive, non-transferable license, valid for the -License Term, to use, modify and copy the Licensed Software by Designated Users -on the Development Platforms for the sole purposes of designing, developing, -demonstrating and testing Application(s) and/or Devices, and to provide thereto -related support and other related services to end-user Customers. - -Licensee may install copies of the Licensed Software on an unlimited number of -computers provided that (i) only the Designated Users may use the Licensed -Software, and (ii) all Designated Users must have a valid Development License -to use Licensed Software. - -Licensee may at any time designate another Designated User to replace a then- -current Designated User by notifying The Qt Company in writing, provided that -any Designated User may be replaced only once during any six-month period. - -Upon expiry of the initially agreed License Term, the respective License Terms -shall be automatically extended to one or more Renewal Term(s), unless and -until either Party notifies the other Party in writing that it does not wish to -continue the License Term, such notification to be provided to the other Party -no less than ninety (90) days before expiry of the respective License Term. -Unless otherwise agreed between the Parties, Renewal Term shall be of equal -length with the initial Term. - -Any such Renewal Term shall be subject to License Fees agreed between the -Parties or, if no advance agreement exists, subject to The Qt Company's -standard pricing applicable at the commencement date of any such Renewal Term. - -3.2 Distribution of Applications - -Subject to the terms of this Agreement, The Qt Company grants to Licensee a -personal, worldwide, non-exclusive, non-transferable, revocable (for cause -pursuant to this Agreement) right and license, valid for the Term, to - -(i) distribute, by itself or through its Contractors, Redistributables as -installed, incorporated or integrated into Applications for execution on the -Deployment Platforms, and - -(ii) grant sublicenses to Redistributables, as distributed hereunder, for -Customers solely for Customer's internal use and to the extent necessary in -order for the Customers to use the Applications for their respective intended -purposes. - -Right to distribute the Redistributables as part of an Application as provided -herein is not royalty-bearing but is conditional upon the Licensee having paid -the agreed Development Licenses from The Qt Company before distributing any -Redistributables to Customers. - -3.3 Distribution of Devices - -Subject to the terms of this Agreement, The Qt Company grants to Licensee a -personal, worldwide, non-exclusive, non-transferable, revocable (for cause -pursuant to this Agreement) right and license, valid for the Term, to - -(i) distribute, by itself or through one or more tiers of Contractors, -Redistributables as installed, incorporated or integrated, or intended to be -installed, incorporated or integrated into Devices for execution on the -Deployment Platforms, and - -(ii) grant sublicenses to Redistributables, as distributed hereunder, for -Customers solely for Customer's internal use and to the extent necessary in -order for the Customers to use the Devices for their respective intended -purposes. - -Right to distribute the Redistributables with Devices as provided herein is -conditional upon the Licensee having purchased and paid the appropriate amount -of Development and Distribution Licenses from The Qt Company before -distributing any Redistributables to Customers. - -3.4 Further Requirements - -The licenses granted above in this Section 3 by The Qt Company to Licensee are -conditional and subject to Licensee's compliance with the following terms: - -(i) Licensee shall not remove or alter any copyright, trademark or other -proprietary rights notice contained in any portion of the Licensed Software; - -(ii) Applications must add primary and substantial functionality to the -Licensed Software; - -(iii) Applications may not pass on functionality which in any way makes it -possible for others to create software with the Licensed Software; provided -however that Licensee may use the Licensed Software's scripting and QML ("Qt -Quick") functionality solely in order to enable scripting, themes and styles -that augment the functionality and appearance of the Application(s) without -adding primary and substantial functionality to the Application(s); - -(iv) Applications must not compete with the Licensed Software; - -(v) Licensee shall not use The Qt Company's or any of its suppliers' names, -logos, or trademarks to market Applications, except that Licensee may use -"Built with Qt" logo to indicate that Application(s) was developed using the -Licensed Software; - -(vi) Licensee shall not distribute, sublicense or disclose source code of -Licensed Software to any third party (provided however that Licensee may -appoint employee(s) of Contractors as Designated Users to use Licensed -Software pursuant to this Agreement). Such right may be available for the -Licensee subject to a separate software development kit ("SDK") license -agreement to be concluded with The Qt Company; - -(vii) Licensee shall not grant the Customers a right to (i) make copies of the -Redistributables except when and to the extent required to use the Applications -and/or Devices for their intended purpose, (ii) modify the Redistributables or -create derivative works thereof, (iii) decompile, disassemble or otherwise -reverse engineer Redistributables, or (iv) redistribute any copy or portion of -the Redistributables to any third party, except as part of the onward sale of -the Device on which the Redistributables are installed; - -(viii) Licensee shall not and shall cause that its Affiliates or Contractors -shall not a) in any way combine, incorporate or integrate Licensed Software -with, or use Licensed Software for creation of, any software created with or -incorporating Open Source Qt, or b) incorporate or integrate Applications -into a hardware device or product other than a Device, unless Licensee has -received an advance written permission from The Qt Company to do so. Absent -such written permission, any and all distribution by the Licensee during the -Term of a hardware device or product a) which incorporate or integrate any -part of Licensed Software or Open Source Qt; or b) where the main user -interface or substantial functionality is provided by software build with -Licensed Software or Open Source Qt or otherwise depends on the Licensed -Software or Open Source Qt, shall be considered as a Device distribution under -this Agreement and dependent on compliance thereof (including but not limited -to obligation to pay applicable License Fees for such distribution); - -(ix) Licensee shall cause all of its Affiliates and Contractors entitled to -make use of the licenses granted under this Agreement, to be contractually -bound to comply with the relevant terms of this Agreement and not to use the -Licensed Software beyond the terms hereof and for any purposes other than -operating within the scope of their services for Licensee. Licensee shall be -responsible for any and all actions and omissions of its Affiliates and -Contractors relating to the Licensed Software and use thereof (including but -not limited to payment of all applicable License Fees); - -(x) Except when and to the extent explicitly provided in this Section 3, -Licensee shall not transfer, publish, disclose, display or otherwise make -available the Licensed Software; - -; and - -(xi) Licensee shall not attempt or enlist a third party to conduct or attempt -to conduct any of the above. - -Above terms shall not be applicable if and to the extent they conflict with any -mandatory provisions of any applicable laws. - -Any use of Licensed Software beyond the provisions of this Agreement is -strictly prohibited and requires an additional license from The Qt Company. - -4. THIRD PARTY SOFTWARE - -The Licensed Software may provide links to third party libraries or code -(collectively "Third Party Software") to implement various functions. Third -Party Software does not comprise part of the Licensed Software. In some cases, -access to Third Party Software may be included in the Licensed Software. Such -Third Party Software will be listed in the ".../src/3rdparty" source tree -delivered with the Licensed Software or documented in the Licensed Software, as -such may be amended from time to time. Licensee acknowledges that use or -distribution of Third Party Software is in all respects subject to applicable -license terms of applicable third party right holders. - -5. PRE-RELEASE CODE - -The Licensed Software may contain pre-release code and functionality marked or -otherwise stated as "Technology Preview", "Alpha", "Beta" or similar -designation. Such pre-release code may be present in order to provide -experimental support for new platforms or preliminary versions of one or more -new functionalities. The pre-release code may not be at the level of -performance and compatibility of a final, generally available, product -offering of the Licensed Software. The pre-release parts of the Licensed -Software may not operate correctly, may contain errors and may be substantially -modified by The Qt Company prior to the first commercial product release, if -any. The Qt Company is under no obligation to make pre-release code -commercially available, or provide any Support or Updates relating thereto. The -Qt Company assumes no liability whatsoever regarding any pre-release code, but -any use thereof is exclusively at Licensee's own risk and expense. - -6. LIMITED WARRANTY AND WARRANTY DISCLAIMER - -The Qt Company hereby represents and warrants that it has the power and -authority to grant the rights and licenses granted to Licensee under this -Agreement. - -Except as set forth above, the Licensed Software is licensed to Licensee -"as is" and Licensee's exclusive remedy and The Qt Company's entire liability -for errors in the Licensed Software shall be limited, at The Qt Company's -option, to correction of the error, replacement of the Licensed Software or -return of the applicable fees paid for the defective Licensed Software for the -time period during which the License is not able to utilize the Licensed -Software under the terms of this Agreement. - -TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF -ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER -WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON- -INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT -WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR THAT -IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE -UNINTERRUPTED. ALL USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE -RISK OF AND RESPONSIBILITY OF LICENSEE. - -7. INDEMNIFICATION AND LIMITATION OF LIABILITY - -7.1 Limitation of Liability - -EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) -BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO -EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, -LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, -CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, -HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. PARTIES -SPECIFICALLY AGREE THAT LICENSEE'S OBLIGATION TO PAY LICENSE AND OTHER FEES -CORRESPONDING TO ACTUAL USAGE OF LICENSED SOFTWARE HEREUNDER SHALL BE -CONSIDERED AS A DIRECT DAMAGE. - -EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) -BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN -NO EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT -EXCEED THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM -LICENSEE DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE -EVENT RESULTING IN SUCH LIABILITY. - -THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT -BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE -LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. - -7.2 Licensee's Indemnification - -Licensee shall indemnify and hold harmless The Qt Company from and against any -claim, injury, judgment, settlement, loss or expense, including attorneys' fees -related to: (a) Licensee's misrepresentation in connection with The Qt Company -or the Licensed Software or breach of this Agreement, (b) the Application or -Device (except where such cause of liability is solely attributable to the -Licensed Software). - -8. SUPPORT, UPDATES AND ONLINE SERVICES - -Upon due payment of the agreed License Fees the Licensee will be eligible to -receive Support and Updates and to use the Online Services during the License -Term, provided, however, that in the event the License Term is longer than 36 -months, Support is provided only for the first 12 months, unless the Parties -specifically otherwise agree. - -Unless otherwise decided by The Company at its free and absolute discretion, -Upgrades will not be included in the Support but may be available subject to -additional fees. - -From time to time The Qt Company may change the Support terms, provided that -during the respective ongoing License Term the level of Support provided by The -Qt Company may not be reduced without the consent of the Licensee. - -Unless otherwise agreed, The Qt Company shall not be responsible for providing -any service or support to Customers. - -9. CONFIDENTIALITY - -Each Party acknowledges that during the Term of this Agreement each Party may -receive information about the other Party's business, business methods, -business plans, customers, business relations, technology, and other -information, including the terms of this Agreement, that is confidential and -of great value to the other Party, and the value of which would be -significantly reduced if disclosed to third parties ("Confidential -Information"). Accordingly, when a Party (the "Receiving Party") receives -Confidential Information from the other Party (the "Disclosing Party"), the -Receiving Party shall only disclose such information to employees and -Contractors on a need to know basis, and shall cause its employees and -employees of its Affiliates to: (i) maintain any and all Confidential -Information in confidence; (ii) not disclose the Confidential Information to a -third party without the Disclosing Party's prior written approval; and (iii) -not, directly or indirectly, use the Confidential Information for any purpose -other than for exercising its rights and fulfilling its responsibilities -pursuant to this Agreement. Each Party shall take reasonable measures to -protect the Confidential Information of the other Party, which measures shall -not be less than the measures taken by such Party to protect its own -confidential and proprietary information. - -Obligation of confidentiality shall not apply to information that (i) is or -becomes generally known to the public through no act or omission of the -Receiving Party; (ii) was in the Receiving Party's lawful possession prior to -the disclosure hereunder and was not subject to limitations on disclosure or -use; (iii) is developed independently by employees or Contractors of the -Receiving Party or other persons working for the Receiving Party who have not -had access to the Confidential Information of the Disclosing Party, as proven -by the written records of the Receiving Party; (iv) is lawfully disclosed to -the Receiving Party without restrictions, by a third party not under an -obligation of confidentiality; or (v) the Receiving Party is legally compelled -to disclose, in which case the Receiving Party shall notify the Disclosing -Party of such compelled disclosure and assert the privileged and confidential -nature of the information and cooperate fully with the Disclosing Party to -limit the scope of disclosure and the dissemination of disclosed Confidential -Information to the minimum extent necessary. - -The obligations under this Section 9 shall continue to remain in force for a -period of five (5) years after the last disclosure, and, with respect to trade -secrets, for so long as such trade secrets are protected under applicable trade -secret laws. - -10. FEES, DELIVERY AND PAYMENT - -10.1 License Fees - -License Fees are described in The Qt Company's standard price list, quote or -Purchase Order confirmation or in an appendix hereto, as the case may be. - -The License Fees shall not be refunded or claimed as a credit in any event or -for any reason whatsoever. - -10.2 Ordering Licenses - -Licensee may purchase Development Licenses and Distribution Licenses pursuant -to agreed pricing terms or, if no specific pricing terms have been agreed upon, -at The Qt Company's standard pricing terms applicable at the time of purchase. - -Licensee shall submit all purchase orders for Development Licenses and -Distribution Licenses to The Qt Company by email or any other method acceptable -to The Qt Company (each such order is referred to herein as a "Purchase Order") -for confirmation, whereupon the Purchase Order shall become binding between the -Parties. - -10.3 Distribution License Packs - -Unless otherwise agreed, Distribution Licenses shall be purchased by way of -Distribution License Packs. - -Upon due payment of the ordered Distribution License Pack(s), the Licensee will -have an account of Distribution Licenses available for installing, bundling or -integrating (all jointly "installing") the Redistributables with the Devices or -for otherwise distributing the Redistributables in accordance with this -Agreement. - -Each time Licensee "installs" or distributes a copy of Redistributables, then -one Distribution License is used, and Licensee's account of available -Distribution Licenses is decreased accordingly. - -Licensee may "install" copies of the Redistributables so long as Licensee has -Distribution Licenses remaining on its account. - -Redistributables will be deemed to have been "installed" into a Device when one -of the following circumstances shall have occurred: a) the Redistributables -have been loaded onto the Device and used outside of the Licensee's premises or -b) the Device has been fully tested and placed into Licensee's inventory -(or sold) for the first time (i.e., Licensee will not be required to use -(or pay for) more than one Distribution License for each individual Device, -e.g. in a situation where a Device is returned to Licensee's inventory after -delivery to a distributor or sale to a Customer). In addition, if Licensee -includes a back-up copy of the Redistributables on a CD-ROM or other storage -medium along with the product, that backup copy of the Redistributables will -not be deemed to have been "installed" and will not require an additional -Distribution License. - -10.4 Payment Terms - -License Fees and any other charges under this Agreement shall be paid by -Licensee no later than thirty (30) days from the date of the applicable invoice -from The Qt Company. - -The Qt Company will submit an invoice to Licensee after the date of this -Agreement and/or after The Qt Company receives a Purchase Order from -Licensee. - -A late payment charge of the lower of (a) one percent per month; or (b) the -interest rate stipulated by applicable law, shall be charged on any unpaid -balances that remain past due. - -The Qt Company shall have the right to suspend, terminate or withhold grants -of all rights to the Licensed Software hereunder, including but not limited to -the Developer License, Distribution License, and Support, should Licensee fail -to make payment in timely fashion. - -10.5 Taxes - -All License Fees and other charges payable hereunder are gross amounts but -exclusive of any value added tax, use tax, sales tax and other taxes, duties or -tariffs ("Taxes"). Such applicable Taxes shall be paid by Licensee, or, where -applicable, in lieu of payment of such Taxes, Licensee shall provide an -exemption certificate to The Qt Company and any applicable authority. - -11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS - -11.1 Licensee's Record-keeping - -Licensee shall at all times maintain accurate and up-to-date written records of -Licensee's activities related to the use of Licensed Software and distribution -of Redistributables. The records shall be adequate to determine Licensee's -compliance with the provisions of this Agreement and to demonstrate the number -of Designated Users and Redistributables distributed by Licensee. The records -shall conform to good accounting practices reasonably acceptable to The Qt -Company. - -Licensee shall, within thirty (30) days from receiving The Qt Company's request -to that effect, deliver to The Qt Company a report on Licensee's usage of -Licensed Software, such report to copies of Redistributables distributed by -Licensee during that calendar quarter, and also detailing the number of -undistributed copies of Redistributables made by Licensee and remaining in its -account contain information, in sufficient detail, on (i) amount of users -working with Licensed Software, (ii) copies of Redistributables distributed by -Licensee during that calendar quarter, (iii) number of undistributed copies of -Redistributables and corresponding number of unused Distribution Licenses -remaining on Licensee's account, and (iv) any other information as The Qt -Company may reasonably require from time to time. - -11.2. The Qt Company's Audit Rights - -The Qt Company or an independent auditor acting on behalf of The Qt Company's, -may, upon at least five (5) business days' prior written notice and at its -expense, audit Licensee with respect to the use of the Redistributables, but -not more frequently than once during each 6-month period. Such audit may be -conducted by mail, electronic means or through an in-person visit to Licensee's -place of business. Any such in-person audit shall be conducted during regular -business hours at Licensee's facilities and shall not unreasonably interfere -with Licensee's business activities. The Qt Company or the independent auditor -acting on behalf of The Qt Company shall be entitled to inspect Licensee's -Records. All such Licensee's Records and use thereof shall be subject to an -obligation of confidentiality under this Agreement. - -If an audit reveals that Licensee is using the Licensed Software beyond scope -of the licenses Licensee has paid for, Licensee agrees to immediately pay The -Qt Company any amounts owed for such unauthorized use. - -In addition, in the event the audit reveals a material violation of the terms -of this Agreement (underpayment of more than 5% of License Fees shall always be -deemed a material violation for purposes of this section), then the Licensee -shall pay The Qt Company's reasonable cost of conducting such audit. - -12 TERM AND TERMINATION - -12.1 Term - -This Agreement shall enter into force upon due acceptance by both Parties and -remain in force for as long as there is any Development License(s) in force -("Term"), unless and until terminated pursuant to the terms of this Section 12. - -12.2 Termination by The Qt Company - -The Qt Company shall have the right to terminate this Agreement upon thirty -(30) days prior written notice if the Licensee is in material breach of any -obligation of this Agreement and fails to remedy such breach within such notice -period. - -12.3 Mutual Right to Terminate - -Either Party shall have the right to terminate this Agreement immediately upon -written notice in the event that the other Party becomes insolvent, files for -any form of bankruptcy, makes any assignment for the benefit of creditors, has -a receiver, administrative receiver or officer appointed over the whole or a -substantial part of its assets, ceases to conduct business, or an act -equivalent to any of the above occurs under the laws of the jurisdiction of the -other Party. - -12.4 Parties' Rights and Duties upon Termination - -Upon expiry or termination of the Agreement Licensee shall cease and shall -cause all Designated Users (including those of its Affiliates' and -Contractors') to cease using the Licensed Software and distribution of the -Redistributables under this Agreement. - -Notwithstanding the above, in the event the Agreement expires or is terminated: - -(i) as a result of The Qt Company choosing not to renew the Development -License(s) as set forth in Section 3.1, then all valid licenses possessed by -the Licensee at such date shall be extended to be valid in perpetuity under the -terms of this Agreement and Licensee is entitled to purchase additional -licenses as set forth in Section 10.2; or - -(ii) for reason other than by The Qt Company pursuant to item (i) above or -pursuant to Section 12.2, then the Licensee is entitled, for a period of six -(6) months after the effective date of termination, to continue distribution of -Devices under the Distribution Licenses paid but unused at such effective date -of termination. - -Upon any such termination the Licensee shall destroy or return to The Qt -Company all copies of the Licensed Software and all related materials and will -certify the same to The Qt Company upon its request, provided however that -Licensee may retain and exploit such copies of the Licensed Software as it may -reasonably require in providing continued support to Customers. - -Expiry or termination of this Agreement for any reason whatsoever shall not -relieve Licensee of its obligation to pay any License Fees accrued or payable -to The Qt Company prior to the effective date of termination, and Licensee -shall immediately pay to The Qt Company all such fees upon the effective date -of termination. Termination of this Agreement shall not affect any rights of -Customers to continue use of Applications and Devices (and therein incorporated -Redistributables). - -12.5 Extension in case of bankruptcy - -In the event The Qt Company is declared bankrupt under a final, non-cancellable -decision by relevant court of law, and this Agreement is not, at the date of -expiry of the Development License(s) pursuant to Section 3.1, assigned to -party, who has assumed The Qt Company's position as a legitimate licensor of -Licensed Software under this Agreement, then all valid licenses possessed by -the Licensee at such date of expiry, and which the Licensee has not notified -for expiry, shall be extended to be valid in perpetuity under the terms of -this Agreement. - -13. GOVERNING LAW AND LEGAL VENUE - -In the event this Agreement is in the name of The Qt Company Inc., a Delaware -Corporation, then: - -(i) this Agreement shall be construed and interpreted in accordance with the -laws of the State of California, USA, excluding its choice of law provisions; - -(ii) the United Nations Convention on Contracts for the International Sale of -Goods will not apply to this Agreement; and - -(iii) any dispute, claim or controversy arising out of or relating to this -Agreement or the breach, termination, enforcement, interpretation or validity -thereof, including the determination of the scope or applicability of this -Agreement to arbitrate, shall be determined by arbitration in San Francisco, -USA, before one arbitrator. The arbitration shall be administered by JAMS -pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on the -Award may be entered in any court having jurisdiction. This Section shall not -preclude parties from seeking provisional remedies in aid of arbitration from a -court of appropriate jurisdiction. - -In the event this Agreement is in the name of The Qt Company Ltd., a Finnish -Company, then: - -(i) this Agreement shall be construed and interpreted in accordance with the -laws of Finland, excluding its choice of law provisions; - -(ii) the United Nations Convention on Contracts for the International Sale of -Goods will not apply to this Agreement; and - -(iii) any disputes, controversy or claim arising out of or relating to this -Agreement, or the breach, termination or validity thereof shall be shall be -finally settled by arbitration in accordance with the Arbitration Rules of -Finland Chamber of Commerce. The arbitration tribunal shall consist of one (1), -or if either Party so requires, of three (3), arbitrators. The award shall be -final and binding and enforceable in any court of competent jurisdiction. The -arbitration shall be held in Helsinki, Finland and the process shall be -conducted in the English language. This Section shall not preclude parties from -seeking provisional remedies in aid of arbitration from a court of appropriate -jurisdiction. - -14. GENERAL PROVISIONS - -14.1 No Assignment - -Except in the case of a merger or sale of substantially all of its corporate -assets, Licensee shall not be entitled to assign or transfer all or any of its -rights, benefits and obligations under this Agreement without the prior written -consent of The Qt Company, which shall not be unreasonably withheld or delayed. -The Qt Company shall be entitled to freely assign or transfer any of its -rights, benefits or obligations under this Agreement. - -14.2 No Third Party Representations - -Licensee shall make no representations or warranties concerning the Licensed -Software on behalf of The Qt Company. Any representation or warranty Licensee -makes or purports to make on The Qt Company's behalf shall be void as to The -Qt Company. - -14.3 Surviving Sections - -Any terms and conditions that by their nature or otherwise reasonably should -survive termination of this Agreement shall so be deemed to survive. - -14.4 Entire Agreement - -This Agreement, the exhibits hereto, the License Certificate and any applicable -Purchase Order constitute the complete agreement between the Parties and -supersedes all prior or contemporaneous discussions, representations, and -proposals, written or oral, with respect to the subject matters discussed -herein. - -In the event of any conflict or inconsistency between this Agreement and any -Purchase Order, the terms of this Agreement will prevail over the terms of the -Purchase Order with respect to such conflict or inconsistency. - -Parties specifically acknowledge and agree that this Agreement prevails over -any click-to-accept or similar agreements the Designated Users may need to -accept online upon download of the Licensed Software, as may be required by -The Qt Company's applicable processes relating to Licensed Software. - -14.5 Modifications - -No modification of this Agreement shall be effective unless contained in a -writing executed by an authorized representative of each Party. No term or -condition contained in Licensee's Purchase Order shall apply unless expressly -accepted by The Qt Company in writing. - -14.6 Force Majeure - -Except for the payment obligations hereunder, neither Party shall be liable to -the other for any delay or non-performance of its obligations hereunder in the -event and to the extent that such delay or non-performance is due to an event -of act of God, terrorist attack or other similar unforeseeable catastrophic -event that prevents either Party for fulfilling its obligations under this -Agreement and which such Party cannot avoid or circumvent ("Force Majeure -Event"). If the Force Majeure Event results in a delay or non-performance of a -Party for a period of three (3) months or longer, then either Party shall have -the right to terminate this Agreement with immediate effect without any -liability (except for the obligations of payment arising prior to the event of -Force Majeure) towards the other Party. - -14.7 Notices - -Any notice given by one Party to the other shall be deemed properly given and -deemed received if specifically acknowledged by the receiving Party in writing -or when successfully delivered to the recipient by hand, fax, or special -courier during normal business hours on a business day to the addresses -specified for each Party on the signature page. Each communication and document -made or delivered by one Party to the other Party pursuant to this Agreement -shall be in the English language. - -14.8 Export Control - -Licensee acknowledges that the Redistributables may be subject to export -control restrictions under the applicable laws of respective countries. -Licensee shall fully comply with all applicable export license restrictions -and requirements as well as with all laws and regulations relating to the -Redistributables and exercise of licenses hereunder and shall procure all -necessary governmental authorizations, including without limitation, all -necessary licenses, approvals, permissions or consents, where necessary for the -re-exportation of the Redistributables, Applications and/or Devices. - -14.9 No Implied License - -There are no implied licenses or other implied rights granted under this -Agreement, and all rights, save for those expressly granted hereunder, shall -remain with The Qt Company and its licensors. In addition, no licenses or -immunities are granted to the combination of the Licensed Software with any -other software or hardware not delivered by The Qt Company under this Agreement. - -14.10 Attorney Fees - -The prevailing Party in any action to enforce this Agreement shall be entitled -to recover its attorney's fees and costs in connection with such action. - -14.11 Severability - -If any provision of this Agreement shall be adjudged by any court of competent -jurisdiction to be unenforceable or invalid, that provision shall be limited or -eliminated to the minimum extent necessary so that this Agreement shall -otherwise remain in full force and effect and enforceable. - - -IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby, -have caused this Agreement to be executed by Licensee's authorized -representative installing the Licensed Software and accepting the terms -hereof in connection therewith. - - -Appendix 1 - -1. Parts of the Licensed Software that are permitted for distribution in -object code form only ("Redistributables") under this Agreement: - -- The Licensed Software's Qt Essentials and Qt Add-on libraries -- The Licensed Software's configuration tool ("qtconfig") -- The Licensed Software's help tool ("Qt Assistant") -- The Licensed Software's internationalization tools ("Qt Linguist", "lupdate", - "lrelease") -- The Licensed Software's QML ("Qt Quick") launcher tool ("qmlscene" or - "qmlviewer") -- The Licensed Software's installer framework - -2. Parts of the Licensed Software that are not permitted for distribution -include, but are not limited to: - -- The Licensed Software's source code and header files -- The Licensed Software's documentation -- The Licensed Software's documentation generation tool ("qdoc") -- The Licensed Software's tool for writing makefiles ("qmake") -- The Licensed Software's Meta Object Compiler ("moc") -- The Licensed Software's User Interface Compiler ("uic") -- The Licensed Software's Resource Compiler ("rcc") -- The Licensed Software's parts of the IDE tool ("Qt Creator") -- The Licensed Software's parts of the Design tools ("Qt 3D Studio" or - "Qt Quick Designer") -- The Licensed Software's Emulator diff --git a/LICENSE.QT-LICENSE-AGREEMENT-4.2 b/LICENSE.QT-LICENSE-AGREEMENT-4.2 new file mode 100644 index 0000000000..7be8fb5d45 --- /dev/null +++ b/LICENSE.QT-LICENSE-AGREEMENT-4.2 @@ -0,0 +1,1285 @@ +QT LICENSE AGREEMENT Agreement version 4.2 + +This Qt License Agreement (“Agreement”) is a legal agreement for the licensing +of Licensed Software (as defined below) between The Qt Company (as defined +below) and the Licensee who has accepted the terms of this Agreement by +downloading or using the Licensed Software and/or as defined herein: + +Capitalized terms used herein are defined in Section 1. + +WHEREAS: + (A) Licensee wishes to use the Licensed Software for the purpose of + developing and distributing Applications and/or Devices (each as + defined below); and + (B) The Qt Company is willing to grant the Licensee a right to use + Licensed Software for such a purpose pursuant to term and conditions + of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + + +1. DEFINITIONS + +“Affiliate” of a Party shall mean an entity (i) which is directly +or indirectly controlling such Party; (ii) which is under the same direct or +indirect ownership or control as such Party; or (iii) which is directly or +indirectly owned or controlled by such Party. For these purposes, an entity +shall be treated as being controlled by another if that other entity has fifty +percent (50 %) or more of the votes in such entity, is able to direct its +affairs and/or to control the composition of its board of directors or +equivalent body. + +“Add-on Products” shall mean The Qt Company’s specific add-on software products +(for example Qt Safe Renderer, Qt for Automation, Qt Application Manager), which +are not licensed as part of The Qt Company’s standard offering, but shall be +included into the scope of Licensed Software only if so specifically agreed +between the Parties. + +“Applications” shall mean Licensee's software products created using the +Licensed Software, which may include the Redistributables, or part thereof. + +“Contractor(s)” shall mean third party consultants, distributors and contractors +performing services to the Licensee under applicable contractual arrangement. + +“Customer(s)” shall mean Licensee’s end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +“Data Protection Legislation” shall mean the General Data Protection Regulation +(EU 2016/679) (GDPR) and any national implementing laws, regulations and +secondary legislation, as may be amended or updated from time to time, as well +as any other data protection laws or regulations applicable in relevant +territory. + +“Deployment Platforms” shall mean operating systems specified in the License +Certificate, on which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +“Designated User(s)” shall mean the employee(s) of Licensee or Licensee’s +Affiliates acting within the scope of their employment or Licensee's Contractors +acting within the scope of their services for Licensee and on behalf of +Licensee. Designated Users shall be named in the License Certificate. + +“Development License” shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. Development Licenses are available separately +for Qt for Application Development and Qt for Device Creation products, each +product having its designated scope and purpose of use. Distribution Licenses +are always connected to Qt for Device Creation product only. + +“Development Platforms” shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +“Devices” shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors, and (2)(i) +incorporate or integrate the Redistributables or parts thereof; or (ii) where +the main user interface or substantial functionality of such unit , when used by +a Customer, is provided by Application(s) or otherwise depends on the Licensed +Software, regardless of whether the Redistributables are distributed together +with the hardware or not. Devices covered with this Agreement shall be specified +in Appendix 2 or in a quote. + +“Distribution License(s)” shall mean the license required for any kind of sale, +trade, exchange, loan, lease, rental or other distribution by or on behalf of +Licensee to a third party of Redistributables in connection with Devices +pursuant to license grant described in Section 3.3 of this Agreement. + +“Distribution License Packs” shall mean set of prepaid Distribution Licenses for +distribution of Redistributables, as defined in The Qt Company’s standard price +list, quote, Purchase Order confirmation or in an appendix hereto, as the case +may be. + +“Intellectual Property Rights” shall mean patents (including utility models), +design patents, and designs (whether or not capable of registration), chip +topography rights and other like protection, copyrights, trademarks, service +marks, trade names, logos or other words or symbols and any other form of +statutory protection of any kind and applications for any of the foregoing as +well as any trade secrets. + +“License Certificate” shall mean a certificate generated by The Qt Company for +each Designated User respectively upon them downloading the Licensed Software, +which will be available under respective Designated User’s Qt Account at +account.qt.io. License Certificates will specify the Designated User, the +Development Platforms, Deployment Platforms and the License Term. Such terms are +considered part of the licenses granted hereunder and shall be updated from time +to time to reflect any agreed changes to the foregoing terms relating to +Designated User’s rights to the Licensed Software. + +“License Fee” shall mean the fee charged to the Licensee for rights granted +under the terms of this Agreement. + +“License Term” shall mean the agreed validity period of the Development License +of the respective Designated User, during which time the Designated User is +entitled to use the Licensed Software, as set forth in the respective License +Certificate. + +“Licensed Software” shall mean either + (i) Qt for Application Development or + (ii) Qt for Device Creation, and/or + (iii) Qt 3D Studio, and/or + (iv) Qt Design Studio, and/or + (v) selected Add-on Products, if any, + +depending on which product(s) the Licensee has purchased under this Agreement, +as well as corresponding online or electronic documentation, associated media +and printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4) or Open Source +Qt. The Qt Company may, in the course of its development activities, at its free +and absolute discretion and without any obligation to send or publish any +notifications to the Licensee or in general, make changes, additions or +deletions in the components and functionalities of the Licensed Software, +provided that no such changes, additions or deletions will affect the already +released version of the Licensed Software, but only upcoming version(s). + +“Licensee” shall mean the individual or legal entity that is party to this +Agreement, as identified on the signature page hereof. + +“Licensee’s Records” shall mean books and records that are likely to contain +information bearing on Licensee’s compliance with this Agreement, Licensee’s use +of Open Source Qt and/or the payments due to The Qt Company under this +Agreement, including, but not limited to user information, assembly logs, sales +records and distribution records. + +“Modified Software” shall have the meaning as set forth in Section 2.3. + +“Online Services” shall mean any services or access to systems made available by +The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +“Open Source Qt” shall mean the non-commercial Qt computer software products, +licensed under the terms of the GNU Lesser General Public License, version 2.1 +or later (“LGPL”) or the GNU General Public License, version 2.0 or later +(“GPL”). For clarity, Open Source Qt shall not be provided nor governed under +this Agreement. + +”Party” or “Parties” shall mean Licensee and/or The Qt Company. + +“Permitted Combination” shall have the meaning as set forth in Section +3.4(viii). + +“Pre-Release Code” shall have the meaning as set forth in Section 4. + +“Prohibited Combination” shall mean any means to (i) use, combine, incorporate, +link or integrate Licensed Software with any software created with or +incorporating Open Source Qt, (ii) use Licensed Software for creation of any +software created with or incorporating Open Source Qt, or (iii) incorporate or +integrate Applications into a hardware device or product other than a Device. + +“Qt 3D Studio” shall mean all versions of The Qt Company’s Qt 3D Studio, a 3D +user interface design and development environment for rapid designing and +prototyping of animated user interfaces. + +“Qt Design Studio” shall mean all versions of The Qt Company’s Qt Design Studio +tool, a user interface design and development environment for rapid designing +and prototyping of animated user interfaces. + +“Qt for Application Development” shall mean The Qt Company’s productized +offering, which consist of all versions of + (i) Qt Toolkit, and + (ii) Qt Tools/Applications. + +“Qt for Device Creation” shall mean The Qt Company’s productized offering, which +consist of all versions of + (i) Qt for Application Development, and + (ii) Software components specific to embedded software development as set + forth in Appendix 1, Sections 1b and 1d. + +“Qt Toolkit” shall mean the modules defined in Appendix 1, Section 1a. + +“Qt Tools/Applications” shall mean the tools defined in Appendix 1, Section 1c. + +"Redistributables" shall mean the portions of the Licensed Software set forth in +Appendix 1, Section 2 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. Where +relevant, any reference to Licensed Software in this Agreement shall include and +refer also to Redistributables. + +“Renewal Term” shall mean an extension of previous License Term as agreed +between the Parties. + +“Submitted Modified Software” shall have the meaning as set forth in Section +2.3. + +“Support” shall mean standard developer support that is provided by The Qt +Company to assist Designated Users in using the Licensed Software in accordance +with The Qt Company’s standard support terms available at +https://www.qt.io/terms-conditions/ and as further defined in Section 8 +hereunder. + +“Taxes” shall have the meaning set forth in Section 10.5. + +“Term” shall have the meaning set forth in Section 12. + +“The Qt Company” shall mean: + (i) in the event Licensee is an individual residing in the United States + or a legal entity incorporated in the United States or having its + headquarters in the United States, The Qt Company Inc., a + Delaware corporation with its office at 2350 Mission College Blvd., + Suite 1020, Santa Clara, CA 95054, USA.; or + (ii) in the event the Licensee is an individual residing outside of the + United States or a legal entity incorporated outside of the United + States or having its registered office outside of the United States, + The Qt Company Ltd., a Finnish company with its registered office at + Bertel Jungin aukio D3A, 02600 Espoo, Finland. + +"Third Party Software " shall have the meaning set forth in Section 4. + +“Updates” shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made available +to users of the Licensed Software that have contracted for Support. Updates are +generally depicted as a change to the digits following the decimal in the +Licensed Software version number. The Qt Company shall make Updates available to +the Licensee under the Support. Updates shall be considered as part of the +Licensed Software hereunder. + +“Upgrades” shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as part +of the Licensed Software hereunder. + + +2. OWNERSHIP + +2.1 Ownership of The Qt Company +The Licensed Software is protected by copyright laws and international copyright +treaties, as well as other intellectual property laws and treaties. The Licensed +Software is licensed, not sold. All of The Qt Company's Intellectual Property +Rights are and shall remain the exclusive property of The Qt Company or its +licensors respectively. + +2.2 Ownership of Licensee +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. All +Intellectual Property Rights to the Modified Software, Applications and Devices +shall remain with the Licensee and no rights thereto shall be granted by the +Licensee to The Qt Company under this Agreement (except as set forth in Section +2.3 below). + +2.3 Modified Software +Licensee may create bug-fixes, error corrections, patches or modifications to +the Licensed Software (“Modified Software”). Such Modified Software may break +the source or binary compatibility with the Licensed Software (including without +limitation through changing the application programming interfaces ("API") or by +adding, changing or deleting any variable, method, or class signature in the +Licensed Software and/or any inter-process protocols, services or standards in +the Licensed Software libraries). To the extent that Licensee’s Modified +Software so breaks source or binary compatibility with the Licensed Software, +Licensee acknowledges that The Qt Company's ability to provide Support may be +prevented or limited and Licensee's ability to make use of Updates may be +restricted. + +Licensee may, at its sole and absolute discretion, choose to submit Modified +Software to The Qt Company (“Submitted Modified Software”) in connection with +Licensee’s Support request, service request or otherwise. In the event Licensee +does so, then, Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee’s Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. + + +3. LICENSES GRANTED + +3.1 Development with Licensed Software +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non- exclusive, non-transferable license, valid for the License Term, +to use, modify and copy the Licensed Software by Designated Users on the +Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other related services to end-user Customers. + +Licensee may install copies of the Licensed Software on five (5) computers per +Designated User, provided that only the Designated Users who have a valid +Development License may use the Licensed Software. + +Licensee may at any time designate another Designated User to replace a +then-current Designated User by notifying The Qt Company in writing, provided +that any Designated User may be replaced only once during any six-month period. + +Upon expiry of the initially agreed License Term, the respective License Terms +shall be automatically extended to one or more Renewal Term(s), unless and until +either Party notifies the other Party in writing that it does not wish to +continue the License Term, such notification to be provided to the other Party +no less than ninety (90) days before expiry of the respective License Term. +Unless otherwise agreed between the Parties, Renewal Term shall be of equal +length with the initial License Term. + +Any such Renewal Term shall be subject to License Fees agreed between the +Parties or, if no advance agreement exists, subject to The Qt Company’s standard +pricing applicable at the commencement date of any such Renewal Term. + +Any price or other term specified for a Renewal Term shall be valid only for the +specified time. The Qt Company may request the Licensee to place a purchase +order corresponding to a quote by The Qt Company for the relevant Renewal Term. + +In the event Licensee does not prevent auto-renewal pursuant the above, but a +Renewal Term is nevertheless not duly ordered within 30 days from the date of +the respective quote from The Qt Company and/or the respective License Fee paid +by due date specified in The Qt Company’s respective invoice, The Qt Company +shall apply a reinstatement fee equal to ten percent (10 %) of the total value +of the License Fees of the Development Licenses for the expired term to be added +to the License Fee of the respective Renewal Term. + +In the event Licensee chooses not to renew a Development License for a Renewal +Term by notifying The Qt Company thereof no less than ninety (90) days before +expiry of the respective License Term, Licensee may still reinstate such expired +Development Licenses for a Renewal Term subject to applicable renewal Term +License Fees until thirty (30) days from the expiry of the initially agreed +License Term or preceding Renewal Term. After such thirty (30) day period a +Development License shall be subject to applicable License Fees for a new +Development License and not any Renewal Term License Fees. + +3.2 Distribution of Applications +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to +this Agreement) right and license, valid for the Term, to + (i) distribute, by itself or through its Contractors, Redistributables as + installed, incorporated or integrated into Applications for execution + on the Deployment Platforms, and + (ii) grant sublicenses to Redistributables, as distributed hereunder, for + Customers solely for Customer’s internal use and to the extent + necessary in order for the Customers to use the Applications for their + respective intended purposes. + +Right to distribute the Redistributables as part of an Application as provided +herein is not royalty- bearing but is conditional upon the Licensee not having +any unpaid License Fees for Development Licenses owed to The Qt Company at the +time of distribution of any Redistributables to Customers. + +3.3 Distribution of Devices +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to +this Agreement) right and license, valid for the Term, to + (i) distribute, by itself or through one or more tiers of Contractors, + Redistributables as installed, incorporated or integrated, or intended + to be installed, incorporated or integrated into Devices for execution + on the Deployment Platforms, and + (ii) grant sublicenses to Redistributables, as distributed hereunder, for + Customers solely for Customer’s internal use and to the extent + necessary in order for the Customers to use the Devices for their + respective intended purposes. + +Right to distribute the Redistributables with Devices as provided herein is +conditional upon the Licensee (i) not having any unpaid License Fees for +Development Licenses owed to The Qt Company, and (ii) having purchased and paid +corresponding Distribution Licenses at the time of distribution of any +Redistributables to Customers. + +3.4 Further Requirements +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + (i) Licensee shall not remove or alter any copyright, trademark or other + proprietary rights notice(s) contained in any portion of the Licensed + Software; + (ii) Applications must add primary and substantial functionality to the + Licensed Software so as not to compete with the Licensed Software; + (iii) Applications may not pass on functionality which in any way makes it + possible for others to create software with the Licensed Software; + provided however that Licensee may use the Licensed Software's + scripting and QML ("Qt Quick") functionality solely in order to enable + scripting, themes and styles that augment the functionality and + appearance of the Application(s) without adding primary and + substantial functionality to the Application(s); + (iv) Licensee shall not use Licensed Software in any manner or for any + purpose that infringes, misappropriates or otherwise violates any + Intellectual property or right of any third party, or that violates + any applicable law; + (v) Licensee shall not use The Qt Company's or any of its suppliers' + names, logos, or trademarks to market Applications, except that + Licensee may use “Built with Qt” logo to indicate that Application(s) + was developed using the Licensed Software; + (vi) Licensee shall not distribute, sublicense or disclose source code of + Licensed Software to any third party (provided however that Licensee + may appoint employee(s) of Contractors as Designated Users to use + Licensed Software pursuant to this Agreement). Such right may be + available for the Licensee subject to a separate software development + kit (“SDK”) license agreement to be concluded with The Qt Company; + (vii) Licensee shall not grant the Customers a right to (i) make copies of + the Redistributables except when and to the extent required to use the + Applications and/or Devices for their intended purpose, (ii) modify + the Redistributables or create derivative works thereof, (iii) + decompile, disassemble or otherwise reverse engineer Redistributables, + or (iv) redistribute any copy or portion of the Redistributables to + any third party, except as part of the onward sale of the Device on + which the Redistributables are installed; + (viii) Licensee shall not and shall cause that its Affiliates or Contractors + shall not use Licensed Software in any Prohibited Combination, unless + Licensee has received an advance written permission from The Qt + Company to do so. Absent such written permission, any and all + distribution by the Licensee during the Term of a hardware device or + product a) which incorporate or integrate any part of Licensed + Software or Open Source Qt; or b) where the main user interface or + substantial functionality is provided by software built with + Licensed Software or Open Source Qt or otherwise depends on the + Licensed Software or Open Source Qt, shall be considered to be + Device distribution under this Agreement and shall be dependent on + Licensee’s compliance thereof (including but not limited to + obligation to pay applicable License Fees for such distribution). + Notwithstanding what is provided above in this sub-section (viii), + Licensee is entitled to use and combine Qt 3D Studio and/or Qt + Design Studio with Open Source Qt (“Permitted Combination”) for + its internal evaluation purposes, provided that Licensee shall in no + way transfer, publish, disclose, display or otherwise make available + any software or work resulting from such Permitted Combination; + (ix) Licensee shall cause all of its Affiliates and Contractors entitled + to make use of the licenses granted under this Agreement, to be + contractually bound to comply with the relevant terms of this + Agreement and not to use the Licensed Software beyond the terms + hereof and for any purposes other than operating within the scope of + their services for Licensee. Licensee shall be responsible for any + and all actions and omissions of its Affiliates and Contractors + relating to the Licensed Software and use thereof (including but not + limited to payment of all applicable License Fees); + (x) Except when and to the extent explicitly provided in this Section 3, + Licensee shall not transfer, publish, disclose, display or otherwise + make available the Licensed Software; and + (xi) Licensee shall not attempt or enlist a third party to conduct or + attempt to conduct any of the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. Any use of Licensed Software +beyond the provisions of this Agreement is strictly prohibited and requires an +additional license from The Qt Company. + + +4. THIRD PARTY SOFTWARE +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included with the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. + + +5. PRE-RELEASE CODE +The Licensed Software may contain pre-release code and functionality, or sample +code marked or otherwise stated with appropriate designation such as “Technology +Preview”, “Alpha”, “Beta”, “Sample” etc. (“Pre-Release Code”). + +Such Pre-Release Code may be present complimentary for the Licensee, in order to +provide experimental support or information for new platforms or preliminary +versions of one or more new functionalities or for other similar reasons. The +Pre-Release Code may not be at the level of performance and compatibility of a +final, generally available, product offering. The Pre-Release Code may not +operate correctly, may contain errors and may be substantially modified by The +Qt Company prior to the first commercial product release, if any. The Qt Company +is under no obligation to make Pre-Release Code commercially available, or +provide any Support or Updates relating thereto. The Qt Company assumes no +liability whatsoever regarding any Pre-Release Code, but any use thereof is +exclusively at Licensee’s own risk and expense. + +For clarity, unless Licensed Software specifies different license terms for the +respective Pre- Release Code, the Licensee is entitled to use such pre-release +code pursuant to Section 3, just like other Licensed Software, provided however +that in the event Add-on Products are included and available as such Pre-Release +Code, Licensee’s right to use such Add-on Products is nevertheless subject to +and conditional upon conclusion of separate agreement with The Qt Company. + + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. Except as set forth above, the Licensed Software is licensed to +Licensee "as is" and Licensee’s exclusive remedy and The Qt Company’s entire +liability for errors in the Licensed Software shall be limited, at The Qt +Company’s option, to correction of the error, replacement of the Licensed +Software or return of the applicable fees paid for the defective Licensed +Software for the time period during which the License is not able to utilize the +Licensed Software under the terms of this Agreement. + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND +NON-INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT +WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE’S REQUIREMENTS OR THAT +IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE +UNINTERRUPTED. + + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY + +7.1 Limitation of Liability +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY’S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED +THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM LICENSEE +DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT +RESULTING IN SUCH LIABILITY. THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE +RISKS UNDER THIS AGREEMENT BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES +HAVE RELIED UPON THE LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO +ENTER INTO THIS AGREEMENT. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS +AGREEMENT, LICENSEE SHALL ALWAYS BE LIABLE TO PAY THE APPLICABLE LICENSE FEES +CORRESPONDING TO ITS ACTUAL USE OF LICENSED SOFTWARE. + + +8. SUPPORT, UPDATES AND ONLINE SERVICES +Upon due payment of the agreed License Fees the Licensee will be eligible to +receive Support and Updates and to use the Online Services during the License +Term, provided, however, that in the event the License Term is longer than 36 +months, the initial payment includes Support for only the first 12 months, +unless the Parties specifically otherwise agree. + +Unless otherwise decided by The Company at its free and absolute discretion, +Upgrades will not be included in the Support but may be available subject to +additional fees. From time to time The Qt Company may change the Support terms, +provided that during the respective ongoing License Term the level of Support +provided by The Qt Company may not be reduced without the consent of the +Licensee. Unless otherwise agreed, The Qt Company shall not be responsible for +providing any service or support to Customers. + + +9. CONFIDENTIALITY +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, business +plans, customers, business relations, technology, and other information, +including the terms of this Agreement, that is confidential and of great value +to the other Party, and the value of which would be significantly reduced if +disclosed to third parties (“Confidential Information”). Accordingly, when a +Party (the “Receiving Party”) receives Confidential Information from the other +Party (the “Disclosing Party”), the Receiving Party shall only disclose such +information to employees and Contractors on a need to know basis, and shall +cause its employees and employees of its Affiliates to: (i) maintain any and all +Confidential Information in confidence; (ii) not disclose the Confidential +Information to a third party without the Disclosing Party's prior written +approval; and (iii) not, directly or indirectly, use the Confidential +Information for any purpose other than for exercising its rights and fulfilling +its responsibilities pursuant to this Agreement. Each Party shall take +reasonable measures to protect the Confidential Information of the other Party, +which measures shall not be less than the measures taken by such Party to +protect its own confidential and proprietary information. Obligation of +confidentiality shall not apply to information that (i) is or becomes generally +known to the public through no act or omission of the Receiving Party; (ii) was +in the Receiving Party's lawful possession prior to the disclosure hereunder and +was not subject to limitations on disclosure or use; (iii) is developed +independently by employees or Contractors of the Receiving Party or other +persons working for the Receiving Party who have not had access to the +Confidential Information of the Disclosing Party, as proven by the written +records of the Receiving Party; (iv) is lawfully disclosed to the Receiving +Party without restrictions, by a third party not under an obligation of +confidentiality; or (v) the Receiving Party is legally compelled to disclose, in +which case the Receiving Party shall notify the Disclosing Party of such +compelled disclosure and assert the privileged and confidential nature of the +information and cooperate fully with the Disclosing Party to limit the scope of +disclosure and the dissemination of disclosed Confidential Information to the +minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + + +10. FEES, DELIVERY AND PAYMENT + +10.1 License Fees +License Fees are described in The Qt Company’s standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. The +License Fees shall not be refunded or claimed as a credit in any event or for +any reason whatsoever. + +10.2 Ordering Licenses +Licensee may purchase Development Licenses and Distribution Licenses pursuant to +agreed pricing terms or, if no specific pricing terms have been agreed upon, at +The Qt Company's standard pricing terms applicable at the time of purchase. +Unless specifically otherwise provided, any pricing terms referenced in this +Agreement shall be valid for twelve (12) months from the date of this Agreement. +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a “Purchase Order”) +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution License Packs +Unless otherwise agreed, Distribution Licenses shall be purchased by way of +Distribution License Packs. Upon due payment of the ordered Distribution +License Pack(s), the Licensee will have an account of Distribution Licenses +available for distributing the Redistributables in accordance with this +Agreement. Each time Licensee distributes a copy of Redistributables, then one +Distribution License is used, and Licensee’s account of available Distribution +Licenses is decreased accordingly. Licensee may distribute copies of the +Redistributables so long as Licensee has Distribution Licenses remaining on its +account. + +10.4 Payment Terms +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. The Qt Company will submit an invoice to Licensee after +the date of this Agreement and/or after The Qt Company receives a Purchase Order +from Licensee. A late payment charge of the lower of (a) one percent per month; +or (b) the interest rate stipulated by applicable law, shall be charged on any +unpaid balances that remain past due. + +10.5 Taxes +All License Fees and other charges payable hereunder are gross amounts but +exclusive of any value added tax, use tax, sales tax, withholding tax and other +taxes, duties or tariffs (“Taxes”) levied directly for the sale, delivery or use +of Licensed Software hereunder pursuant to any applicable law. Such applicable +Taxes shall be paid by Licensee to The Qt Company, or, where applicable, in lieu +of payment of such Taxes to The Qt Company, Licensee shall provide an exemption +certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS + +11.1 Licensee’s Record-keeping +Licensee shall at all times during the Term of this Agreement and for a period +of seven (7) years thereafter maintain Licensee’s Records in an accurate and +up-to-date form. Licensee’s Records shall be adequate to reasonably enable The +Qt Company to determine Licensee’s compliance with the provisions of this +Agreement. The records shall conform to general good accounting practices. +Licensee shall, within thirty (30) days from receiving The Qt Company’s request +to that effect, deliver to The Qt Company a report based on Licensee’s Records, +such report to contain information, in sufficient detail, on (i) number and +identity of users working with Licensed Software or Open Source Qt, (ii) copies +of Redistributables distributed by Licensee during the most recent calendar +quarter and/or any other term specified by The Qt Company, (iii) number of +undistributed copies of Redistributables and corresponding number of unused +Distribution Licenses remaining on Licensee’s account, and (iv) any other +information as The Qt Company may reasonably require from time to time. + +11.2. The Qt Company’s Audit Rights +The Qt Company or an independent auditor acting on behalf of The Qt Company’s, +may, upon at least five (5) business days’ prior written notice and at its +expense, audit Licensee with respect to the Licensee’s use of the Licensed +Software, but not more frequently than once during each 6- month period. Such +audit may be conducted by mail, electronic means or through an in-person visit +to Licensee’s place of business. Any such in-person audit shall be conducted +during regular business hours at Licensee's facilities and shall not +unreasonably interfere with Licensee's business activities. The Qt Company or +the independent auditor acting on behalf of The Qt Company shall be entitled to +inspect Licensee’s Records and conduct necessary interviews of Licensee’s +relevant employees and Contractors. All such Licensee’s Records and use thereof +shall be subject to an obligation of confidentiality under this Agreement. If +an audit reveals that Licensee is using the Licensed Software beyond scope of +the licenses Licensee has paid for, Licensee agrees to pay The Qt Company any +amounts owed for such unauthorized use within 30 days from receipt of the +corresponding invoice from The Qt Company. In addition, in the event the audit +reveals a material violation of the terms of this Agreement (without limitation, +either (i) underpayment of more than 10 % of License Fees or 10,000 euros +(whichever is more) or (ii) distribution of products, which include or result +from Prohibited Combination, shall be deemed a material violation for purposes +of this section), then the Licensee shall pay The Qt Company's reasonable cost +of conducting such audit. + + +12 TERM AND TERMINATION + +12.1 Agreement Term +This Agreement shall enter into force upon due acceptance by both Parties and +remain in force for as long as there is any Development License(s) purchased +under this Agreement in force (“Term”), unless and until terminated pursuant to +the terms of this Section 12. + +12.2 Termination and suspension of rights +Either Party shall have the right to terminate this Agreement upon thirty (30) +days prior written notice if the other Party commits a material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period. Instead of termination, The Qt Company shall have the right to suspend +or withhold grants of all rights to the Licensed Software hereunder, including +but not limited to the Development Licenses, Distribution License, and Support, +should Licensee fail to make payment in timely fashion or otherwise violates or +is reasonably suspected to violate its obligations or terms of this Agreement, +and where such violation or breach is not cured within five (5) business days +following The Qt Company’s written notice thereof. + +12.3 Mutual Right to Terminate +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has a +receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act equivalent +to any of the above occurs under the laws of the jurisdiction of the other +Party. + +12.4 Parties´ Rights and Duties upon Termination +Upon expiry or termination of the Agreement Licensee shall cease and shall cause +all Designated Users (including those of its Affiliates’ and Contractors’) to +cease using the Licensed Software and distribution of the Redistributables under +this Agreement. Notwithstanding the above, in the event the Agreement expires +or is terminated: + (i) as a result of The Qt Company choosing not to renew the Development + License(s) as set forth in Section 3.1, then all valid licenses + possessed by the Licensee at such date shall be extended to be valid + in perpetuity under the terms of this Agreement and Licensee is + entitled to purchase additional licenses as set forth in Section + 10.2; or + (ii) for reason other than by The Qt Company pursuant to item (i) above or + pursuant to Section 12.2, then the Licensee is entitled, for a period + of six (6) months after the effective date of termination, to continue + distribution of Devices under the Distribution Licenses paid but + unused at such effective date of termination. + +Upon any such termination the Licensee shall destroy or return to The Qt Company +all copies of the Licensed Software and all related materials and will certify +the same to The Qt Company upon its request, provided however that Licensee may +retain and exploit such copies of the Licensed Software as it may reasonably +require in providing continued support to Customers. Expiry or termination of +this Agreement for any reason whatsoever shall not relieve Licensee of its +obligation to pay any License Fees accrued or payable to The Qt Company prior to +the effective date of termination, and Licensee shall immediately pay to The Qt +Company all such fees upon the effective date of termination. Termination of +this Agreement shall not affect any rights of Customers to continue use of +Applications and Devices (and therein incorporated Redistributables). + +12.5 Extension in case of bankruptcy +In the event The Qt Company is declared bankrupt under a final, non-cancellable +decision by relevant court of law, and this Agreement is not, at the date of +expiry of the Development License(s) pursuant to Section 3.1, assigned to party, +who has assumed The Qt Company’s position as a legitimate licensor of Licensed +Software under this Agreement, then all valid licenses possessed by the Licensee +at such date of expiry, and which the Licensee has not notified for expiry, +shall be extended to be valid in perpetuity under the terms of this Agreement. + + +13. GOVERNING LAW AND LEGAL VENUE +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: + (i) this Agreement shall be construed and interpreted in accordance with + the laws of the State of California, USA, excluding its choice of law + provisions; + (ii) the United Nations Convention on Contracts for the International Sale + of Goods will not apply to this Agreement; and + (iii) any dispute, claim or controversy arising out of or relating to this + Agreement or the breach, termination, enforcement, interpretation or + validity thereof, including the determination of the scope or + applicability of this Agreement to arbitrate, shall be determined by + arbitration in San Francisco, USA, before one arbitrator. The + arbitration shall be administered by JAMS pursuant to JAMS' + Streamlined Arbitration Rules and Procedures. Judgment on the Award + may be entered in any court having jurisdiction. This Section shall + not preclude parties from seeking provisional remedies in aid of + arbitration from a court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., a Finnish +Company, then: + (i) this Agreement shall be construed and interpreted in accordance with + the laws of Finland, excluding its choice of law provisions; + (ii) the United Nations Convention on Contracts for the International Sale + of Goods will not apply to this Agreement; and + (iii) any disputes, controversy or claim arising out of or relating to this + Agreement, or the breach, termination or validity thereof shall be + finally settled by arbitration in accordance with the Arbitration + Rules of Finland Chamber of Commerce. The arbitration tribunal shall + consist of one (1), or if either Party so requires, of three (3), + arbitrators. The award shall be final and binding and enforceable in + any court of competent jurisdiction. The arbitration shall be held in + Helsinki, Finland and the process shall be conducted in the English + language. This Section shall not preclude parties from seeking + provisional remedies in aid of arbitration from a court of + appropriate jurisdiction. + + +14. GENERAL PROVISIONS + +14.1 No Assignment +Except in the case of a merger or sale of substantially all of its corporate +assets, Licensee shall not be entitled to assign or transfer all or any of its +rights, benefits and obligations under this Agreement without the prior written +consent of The Qt Company, which shall not be unreasonably withheld or delayed. +The Qt Company shall be entitled to freely assign or transfer any of its rights, +benefits or obligations under this Agreement. 14.2 No Third Party +Representations Licensee shall make no representations or warranties concerning +the Licensed Software on behalf of The Qt Company. Any representation or +warranty Licensee makes or purports to make on The Qt Company’s behalf shall be +void as to The Qt Company. 14.3 Surviving Sections Any terms and conditions +that by their nature or otherwise reasonably should survive termination of this +Agreement shall so be deemed to survive. Such sections include especially the +following: 1, 2, 6, 7, 9, 11, 12.4, 13 and 14. + +14.4 Entire Agreement +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order accepted by The Qt Company constitute the complete agreement +between the Parties and supersedes all prior or contemporaneous discussions, +representations, and proposals, written or oral, with respect to the subject +matters discussed herein. In the event of any conflict or inconsistency between +this Agreement and any Purchase Order, the terms of this Agreement will prevail +over the terms of the Purchase Order with respect to such conflict or +inconsistency. Parties specifically acknowledge and agree that this Agreement +prevails over any click-to-accept or similar agreements the Designated Users may +need to accept online upon download of the Licensed Software, as may be required +by The Qt Company’s applicable processes relating to Licensed Software. + +14.5 Modifications +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order (“Deviating Terms”) shall apply +unless The Qt Company has expressly agreed such Deviating Terms in writing. +Unless and to the extent expressly agreed by The Qt Company, any such Deviating +Terms shall be deemed void and with no legal effect. For clarity, delivery of +the Licensed Software following the receipt of the Purchase Order including +Deviating Terms shall not constitute acceptance of such Deviating Terms.” + +14.6 Force Majeure +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non-performance is due to an event of +act of God, terrorist attack or other similar unforeseeable catastrophic event +that prevents either Party for fulfilling its obligations under this Agreement +and which such Party cannot avoid or circumvent (“Force Majeure Event”). If the +Force Majeure Event results in a delay or non-performance of a Party for a +period of three (3) months or longer, then either Party shall have the right to +terminate this Agreement with immediate effect without any liability (except for +the obligations of payment arising prior to the event of Force Majeure) towards +the other Party. + +14.7 Notices +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special courier +during normal business hours on a business day to the addresses specified for +each Party on the signature page. Each communication and document made or +delivered by one Party to the other Party pursuant to this Agreement shall be in +the English language. + +14.8 Export Control +Licensee acknowledges that the Redistributables, as incorporated in Applications +or Devices, may be subject to export control restrictions under the applicable +laws of respective countries. Licensee shall fully comply with all applicable +export license restrictions and requirements as well as with all laws and +regulations relating to the Redistributables and exercise of licenses hereunder +and shall procure all necessary governmental authorizations, including without +limitation, all necessary licenses, approvals, permissions or consents, where +necessary for the re-exportation of the Redistributables, Applications and/or +Devices. + +14.9 No Implied License +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney’s fees and costs in connection with such action. + +14.11 Privacy +Licensee acknowledges and agrees that for the purpose of this Agreement, The Qt +Company may collect, use, transfer and disclose personal data pertaining to +Designated Users as well as any other employees and directors of the Licensee +and its Contractors relevant for carrying out the intent of this Agreement. Such +personal data may be collected from the Licensee or directly from the relevant +individuals. The Parties acknowledge that with regard to such personal data +processed hereunder, The Qt Company shall be regarded as the Data Controller +under the applicable Data Protection Legislation. The Qt Company shall process +any such personal data in accordance with its privacy policies and practices, +which will comply with all applicable requirements of the Data Protection +Legislation. + +14.12 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + + +APPENDICES + +This Agreement includes Appendix 1 or/and Appendix 8, and possibly one or more +of the appendices 3-5, depending on the product(s) purchased by the Licensee, +what is stated in the quote or invoice, and/or what is stated in the Licensee’s +License Certificate. + + +APPENDIX 1: LICENSED SOFTWARE + +1a. Licensed Software - Qt Toolkit + +Module Description +Qt Core Core non-graphical classes used by other modules. +Qt GUI Base classes for graphical user interface (GUI) + components. +Qt Multimedia Classes for audio, video and camera functionality. +Qt Multimedia Widgets Widget-based classes for implementing multimedia + functionality. +Qt Network Classes to make network programming easier and more + portable. +Qt QML Classes for QML and JavaScript languages. +Qt Quick A declarative framework for building highly dynamic + applications with custom user interfaces. +Qt Quick Controls 2 Provides lightweight QML types for creating + performant user interfaces for desktop, embedded, + and mobile devices. +Qt Quick Dialogs Types for creating and interacting with system + dialogs from a Qt Quick application. +Qt Quick Layouts Layouts are items that are used to arrange Qt Quick + 2 based items in the user interface. +Qt Quick Test A unit test framework for QML applications. +Qt SQL Classes for database integration using SQL. +Qt Test Classes for unit testing Qt applications and + libraries. +Qt Widgets Classes to extend Qt GUI with C++ widgets. +Active Qt Classes for applications which use ActiveX and COM +Qt 3D Functionality for near-realtime simulation systems + with support for 2D and 3D rendering. +Qt Android Extras Provides platform-specific APIs for Android. +Qt Bluetooth Provides access to Bluetooth hardware. +Qt Canvas 3D Enables OpenGL-like 3D drawing calls from Qt Quick + applications using JavaScript. +Qt Concurrent Classes for writing multi-threaded programs without + using low-level threading primitives. +Qt D-Bus Classes for inter-process communication over the + D-Bus protocol. +Qt Gamepad Enables Qt applications to support the use of gamepad + hardware. +Qt Graphical Effects Graphical effects for use with Qt Quick 2. +Qt Help Classes for integrating documentation into + applications, similar to Qt Assistant. +Qt Image Formats Plugins for additional image formats: TIFF, + MNG, TGA, WBMP. +Qt Location Displays map, navigation, and place content in a QML + application. +Qt Mac Extras Provides platform-specific APIs for macOS. +Qt Network Authorization Provides support for OAuth-based authorization to + online services. +Qt NFC Provides access to Near-Field communication (NFC) + hardware. +Qt Platform Headers Provides classes that encapsulate platform-specific + information. +Qt Positioning Provides access to position, satellite and area + monitoring classes. +Qt Print Support Classes to make printing easier and more portable. +Qt Purchasing Enables in-app purchase of products in Qt + applications. +Qt for Python Python bindings for Qt. +Qt Quick Controls Reusable Qt Quick based UI controls to create + classic desktop-style user interfaces. +Qt Quick Extras Provides a specialized set of controls that can + be used to build interfaces in Qt Quick. +Qt Quick Widgets Provides a C++ widget class for displaying a Qt + Quick user interface. +Qt SCXML Provides classes and tools for creating state + machines from SCXML files. +Qt Sensors Provides access to sensor hardware and motion + gesture recognition. +Qt Serial Bus Provides access to serial industrial bus interface. +Qt Serial Port Provides access to hardware and virtual serial ports. +Qt Speech Provides support for accessibility features such as + text-to-speech. +Qt SVG Classes for displaying the contents of SVG files. +Qt UI Tools Classes for loading QWidget based forms created in + Qt Designer dynamically, at runtime. +Qt WebChannel Provides access to QObject or QML objects from HTML + clients for seamless integration of Qt applications + with HTML/JavaScript clients. +Qt WebEngine Classes and functions for embedding web content in + applications using the Chromium browser project. +Qt WebSockets Provides WebSocket communication. +Qt WebView Displays web content in a QML application by using + APIs native to the platform. +Qt Windows Extras Provides platform-specific APIs for Windows. +Qt X11 Extras Provides platform-specific APIs for X11. +Qt XML C++ implementations of SAX and DOM. +Qt XML Patterns Support for XPath, XQuery, XSLT and XML schema + validation. +Qt Wayland Compositor Provides a framework to develop a Wayland compositor. +Qt Charts UI Components for displaying charts. +Qt Data Visualization UI Components for creating 3D data visualizations. +Qt Virtual Keyboard A framework for implementing different input methods + as well as a QML virtual keyboard. + + +1b. Licenses software – Embedded software development libraries + +Module Description +Boot 2 Qt stack Yocto based Embedded Linux stack for selected + target hardware. +Qt OTA Client-side capability for device image updates Over + The Air. +Device Utilities Collection of API’s to manage the device; E.g. + display, WiFi and Bluetooth settings. +Qt Debugging Bridge (QDB) Daemon Enables host-target deployment, debugging, + profiling and other features over USB. Up to developer + to decide if this is left in the final solution. + + +1c. Licensed Software - Qt Tools/Applications + +Tool Description +Qt Creator The integrated development environment for Qt. +Qt Designer Qt tool for designing and building graphical user + interfaces. +Qt Linguist Tool used to add translations to Qt applications. +Qt Assistant Tool for viewing online documentation in Qt + help-file format. +Qmake Utility tool used to automate the generation of make + files. +uic User interface compiler for the Qt GUI toolkit. +rcc Resource compiler used for embedding resources into + Qt applications. +lupdate Tool that finds the translatable strings in the + specified source, header and Qt Designer interface + files, and produces or updates translation files. +lrelease Tool that produces translation files in the compact + binary format used by localized Qt applications. +qlalr Qt parser generator tool. +qdoc Configurable documentation generation tool. +qmlscene QML launcher tool. +qmlviewer QML launcher tool. + + +1d. Licenses software –Qt Tools/Applications specific to embedded software +development + +Tool Description +Target toolchains Cross compilation toolchains for supported target + devices and operating systems. +Qt Debugging Bridge (QDB) Enables deployment, debugging, profiling and other +Host Tools features over USB from development host PC to target + device. +qtconfig-gui Qt Lite Configurator tool graphical interface. +Qt Emulator Qt Emulator + + +2. Parts of the Licensed Software that are permitted for distribution in +object-code form only (“Redistributables”) under this Agreement: + +2a. Qt for Application Development + + - The Licensed Software's Qt Toolkit libraries defined in 1a + - The Licensed Software's installer framework + +2b. Qt for Device Creation + + - Qt for Application Development Redistributables defined in 2a + - The Licensed Software’s Embedded software development libraries defined + in 1b + +2c. Qt 3D Studio + +- The Licensed Software’s Qt 3D Studio Runtime (“Qt53DStudioRuntime2”) + + +APPENDIX 3: ADDITIONS TO LICENSED SOFTWARE + +1. Licensed Software + +In addition to what is provided under the definition of the Licensed Software, +Parties agree that Licensed Software shall also include the following additional +software products of The Qt Company if included in the quote / invoice: + +Additional software product Description +Qt for Automation A collection of software components and + libraries targeted for the development of + automation systems. +Qt Safe Renderer Provides a UI rendering component that can be + used to render safety- critical items as well + as documentation and certification artifacts. +Qt Application Manager Daemon, that helps to create embedded Linux + systems that have a highly complex UI setup. +GammaRay A software introspection tool for Qt + applications. + + +2. Parts of the Licensed Software that are permitted for distribution in +object-code form only (“Redistributables”) under this Agreement: + + - Qt for Automation The Licensed Software’s Qt for Automation + libraries defined in 1 + - Qt Safe Renderer The Licensed Software’s Qt Safe Renderer + libraries defined in 1 + - Qt Application Manager The Licensed Software’s Qt Application Manager + libraries defined in 1 + +All the above is considered as Redistributables and subject to applicable +provisions and limitations including but not limited to what is defined in +section 3. + + +APPENDIX 4: SMALL BUSINESS AND START-UP APPENDIX + +The provisions of this Appendix 4 are applicable for Start-up Companies and for +the Evaluation Term. + +For the purpose of this Appendix 4, the following additional definitions shall +be applicable: +“Trial Term” shall mean a period of twelve (12) months. + +“Start-up Company” means a company with a maximum annual revenue, including +funding, equivalent to 100,000 USD (in applicable currency) during a respective +calendar year, as evidenced by duly audited records of the Licensee and approved +by The Qt Company. + +During the Trial Term, Section 3 shall apply with following modifications +(“Trial Term Modifications”): + + - Licenses granted under Sections 3.1 and 3.2 shall be free of any charge. + For clarity, License for distribution of Devices pursuant to Section 3.3 is + subject to applicable License Fee for necessary Distribution Licenses; + - Development License under Section 3.1 is limited to a maximum of three (3) + Designated Users; and + - Support is available subject to availability, as judged by The Qt Company + at its free and absolute discretion, provided that support will be limited + to a maximum of ten (10) tickets during the Trial Term. + +Upon expiry of the Trial Term: + + a) This Appendix 4 is terminated, Trial Term Modifications cease to remain in + force, Licensee’s Development Licenses shall be automatically converted + into licenses subject to a License Fee (in the amount specified in the + quote or in Appendix 2 and payable with a 30-day payment term) and + Licensee’s rights and obligations under this Agreement shall continue to + remain in force under the standard provisions of the Agreement, unless the + Licensee notifies The Qt Company in writing no less than ninety (90) days + before such expiry date that Licensee does not agree to such continuance, + in which event the Agreement, and all rights of the Licensee thereunder, + shall expire; provided however that + b) in the event the Licensee still qualifies as a Start-up Company, the + Licensee has an option (“Option”), instead of what is stated in item a) + above, to extend the Trial Term renewal is limited to one time and total + duration of Trial Terms thus to 24 months after the effective date. + Licensee shall notify The Qt Company in writing no less than ninety (90) + days before the expiry date, if Licensee wish to exercise the Option. + + +APPENDIX 5: NON-COMMERCIAL USE APPENDIX + +The provisions of this Appendix 5 are applicable for non-commercial use of the +Licensed Software by the Licensee. For the purpose of this Appendix 5, the +following additional definitions (replacing the relevant definition of the +Agreement, where applicable) shall be applicable: + +“Demo Units” shall mean + (i) hardware development platform, which incorporates the Licensed + Software along with Licensee’s software and/or hardware, and + (ii) prototype versions of Applications or Devices. + +“Designated User(s)” shall mean the employees and students of the Licensee. + +“Licensee Products” shall mean Applications and/or Devices. + +“Permitted Purpose” shall mean + (i) Licensee’s internal evaluation and testing of Licensed Software, + (ii) building Demo Units as well as + (iii) educational use. + +“Term” shall mean a period of twelve (12) months or any such other period as +may be agreed between the Parties. + +For the purpose of this Appendix 5, the following changes shall be agreed with +respect to relevant Sections of the Agreement: + I. Recital (A) shall be replaced in its entirety to read as follows: “(A) + Licensee wishes to use the Licensed Software for the Permitted Purpose.” + II. Section 3.1 shall be replaced in its entirety to read as follows: “The + Qt Company grants to Licensee a personal, non-exclusive, + non-transferable, revocable, royalty-free license, valid for the Term, + to use, modify and copy the Licensed Software solely for the Permitted + Purpose. Licensee may install copies of the Licensed Software on an + unlimited number of computers provided that only Designated Users may + use the Licensed Software. Licensee may demonstrate the Demo Units, + provided that such demonstrations must be conducted by Licensee, and + the Demo Units must remain in Licensee’s possession and under + Licensee’s control at all times. For clarity, this Agreement does not + (i) entitle Licensee to use Licensed Software to create Applications + or Devices (other than prototypes thereof) or + (ii) carry any distribution rights to Licensee, but such rights are + subject to and conditional upon conclusion of a separate + license agreement with The Qt Company.” + III. Sections 3.2, 3.3, 8 and 10 shall be deleted. + IV. Section 3.4 shall be replaced in its entirety to read as follows: + “Licensee shall not: + - remove or alter any copyright, trademark or other proprietary + rights notice contained in any portion of the Licensed Software; + - transfer, publish, sublicense, disclose, display or otherwise make + the Licensed Software available to any third party (except that + Licensee may demonstrate the Demo Units pursuant to Section 3.1); + - in any way combine, incorporate or integrate Licensed Software + with, or use Licensed Software for creation of, any software + created with or incorporating Open Source Qt; + - Licensee shall cause all Designated Users who make use of the + licenses granted under this Agreement, to be contractually bound to + comply with the relevant terms of this Agreement and not to use the + Licensed Software beyond the terms hereof. Licensee shall be + responsible for any and all actions and omissions of its Designated + Users relating to the Licensed Software and use thereof. Any use + of Licensed Software beyond the provisions of this Agreement is + strictly prohibited and requires an additional license from The Qt + Company.” + V. Section 12 shall be replaced in its entirety to read as follows: “This + Agreement shall enter into force upon due acceptance by both Parties + and remain in force for the Term, unless and until terminated pursuant + to the terms of Section 12. Upon termination of the Agreement, Licensee + shall cease using the Licensed Software. All other copies of Licensed + Software in the possession or control of Licensee must be erased or + destroyed. An officer of Licensee must, upon request, promptly deliver + to The Qt Company a written confirmation that this has occurred.” + +Except for the modifications specified above, this Appendix carries no change to +the terms of the Agreement, which shall remain in full force. + + +APPENDIX 8: QT FOR DEVICE CREATION MCU APPENDIX + +This Appendix 8 shall be applicable in case the Licensee and/or respective +Designated User have purchased Qt for Device Creation MCU, either as an +add-on or standalone package. In case Qt for Device Creation MCU is purchased +as an addition to Qt for Device Creation, this appendix is an addition to +Appendix 1. In any other case, this appendix replaces Appendix 1. + +1a. Licensed Software - Qt Toolkit + +Module Description +Qt Quick Controls 2 Provides lightweight QML types for creating + performant user interfaces for desktop, embedded, + and mobile devices. + + +1b. Licensed software – Embedded software development libraries + +Module Description +Qt Quick Ultralite Qt Quick Ultralite (QUL) rendering engine and sample + source codes. +Qt Quick Ultralite Platform adaptations including OS support that allow +Platform Adaptations applications on QUL to run on microcontrollers + + +1c. Licensed Software - Qt Tools/Applications + +Tool Description +Qt Creator The integrated development environment for Qt. +Qt Designer Qt tool for designing and building graphical user + interfaces. +Qt Linguist Tool used to add translations to Qt applications. +Qt Assistant Tool for viewing online documentation in Qt help-file + format. +lupdate Tool that finds the translatable strings in the + specified source, header and Qt Designer interface + files, and produces or updates translation files. +lrelease Tool that produces translation files in the compact + binary format used by localized Qt applications. + + +1d. Licensed software – Qt Tools/Applications specific to embedded software +development + +Tool Description +Target toolchains Cross compilation toolchains for supported target + devices and operating systems. +qmlinterfaceextractor Tool to generate QML from header file. +qml2cpp Tool to convert QML to C++ files. +fontcompiler Tool to compile font meta data and True Type fonts. + + +2. Parts of the Licensed Software that are permitted for distribution in +object-code form only (“Redistributables”) under this Agreement: + + - The Licensed Software’s Embedded software development libraries + defined in 1b. -- cgit v1.2.3 From 6ec5a97ebbf65a9283a57b8e5f4192e7ec84a759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 28 Nov 2019 17:46:34 +0100 Subject: macOS: Harden screen handling logic when reconfiguring displays MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When connecting/disconnecting/reconfiguring screens Qt needs to know about the changes before they are propagated by the OS in other ways, so that we can reflect the changes in the list of QScreens as soon as they happen. Unfortunately the canonical notifications for this in AppKit, NSApplicationDidChangeScreenParametersNotification, is delivered after AppKit itself reacts to the change, which results in receiving NSWindowDidChangeScreenNotification, NSWindowWillMoveNotification, and others, while the list of QScreens is stale. To work around this we adopted the lower layer Quartz Display Services API in 3976df2805 to notify us when there are changes to the screen configuration. Unfortunately the window server on macOS is not consistent in how it orders events during screen reconfiguration, and we can't rely on the NSScreen list being up to date when we get our callbacks from Quartz. To work around this we still hook into Quartz, so that we get the callbacks as early as possible, but then track the state of the AppKit NSScreen list and update our own QScreens as soon as we see a change. We now also include sleeping displays in the list of QScreens, which matches the behavior of NSScreen.screens. Similarly we exclude displays that are mirroring another display. Task-number: QTBUG-80193 Change-Id: I6b1958d6ee61373b2861e05a0d971d2300596f3e Reviewed-by: Timur Pocheptsov Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/cocoa/qcocoascreen.h | 21 ++- src/plugins/platforms/cocoa/qcocoascreen.mm | 272 +++++++++++++++++++++------- 2 files changed, 225 insertions(+), 68 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoascreen.h b/src/plugins/platforms/cocoa/qcocoascreen.h index 7ec9a2b5af..dcf6f1c753 100644 --- a/src/plugins/platforms/cocoa/qcocoascreen.h +++ b/src/plugins/platforms/cocoa/qcocoascreen.h @@ -53,9 +53,6 @@ class QCocoaIntegration; class QCocoaScreen : public QPlatformScreen { public: - static void initializeScreens(); - static void cleanupScreens(); - ~QCocoaScreen(); // ---------------------------------------------------- @@ -79,7 +76,6 @@ public: // ---------------------------------------------------- NSScreen *nativeScreen() const; - void updateProperties(); void requestUpdate(); void deliverUpdateRequests(); @@ -88,6 +84,7 @@ public: static QCocoaScreen *primaryScreen(); static QCocoaScreen *get(NSScreen *nsScreen); static QCocoaScreen *get(CGDirectDisplayID displayId); + static QCocoaScreen *get(CFUUIDRef uuid); static CGPoint mapToNative(const QPointF &pos, QCocoaScreen *screen = QCocoaScreen::primaryScreen()); static CGRect mapToNative(const QRectF &rect, QCocoaScreen *screen = QCocoaScreen::primaryScreen()); @@ -95,11 +92,23 @@ public: static QRectF mapFromNative(CGRect rect, QCocoaScreen *screen = QCocoaScreen::primaryScreen()); private: - QCocoaScreen(CGDirectDisplayID displayId); + static void initializeScreens(); + static void updateScreens(); + static void cleanupScreens(); + + static bool updateScreensIfNeeded(); + static NSArray *s_screenConfigurationBeforeUpdate; + static void add(CGDirectDisplayID displayId); + QCocoaScreen(CGDirectDisplayID displayId); + void update(CGDirectDisplayID displayId); void remove(); + bool isOnline() const; + bool isMirroring() const; + CGDirectDisplayID m_displayId = kCGNullDirectDisplay; + CGDirectDisplayID displayId() const { return m_displayId; } QRect m_geometry; QRect m_availableGeometry; @@ -116,6 +125,8 @@ private: dispatch_source_t m_displayLinkSource = nullptr; QAtomicInt m_pendingUpdates; + friend class QCocoaIntegration; + friend class QCocoaWindow; friend QDebug operator<<(QDebug debug, const QCocoaScreen *screen); }; diff --git a/src/plugins/platforms/cocoa/qcocoascreen.mm b/src/plugins/platforms/cocoa/qcocoascreen.mm index bd5c95b9d0..e4dd4cf6c6 100644 --- a/src/plugins/platforms/cocoa/qcocoascreen.mm +++ b/src/plugins/platforms/cocoa/qcocoascreen.mm @@ -57,6 +57,7 @@ QT_BEGIN_NAMESPACE namespace CoreGraphics { Q_NAMESPACE enum DisplayChange { + ReconfiguredWithFlagsMissing = 0, Moved = kCGDisplayMovedFlag, SetMain = kCGDisplaySetMainFlag, SetMode = kCGDisplaySetModeFlag, @@ -71,73 +72,165 @@ namespace CoreGraphics { Q_ENUM_NS(DisplayChange) } +NSArray *QCocoaScreen::s_screenConfigurationBeforeUpdate = nil; + void QCocoaScreen::initializeScreens() { - uint32_t displayCount = 0; - if (CGGetActiveDisplayList(0, nullptr, &displayCount) != kCGErrorSuccess) - qFatal("Failed to get number of active displays"); - - CGDirectDisplayID activeDisplays[displayCount]; - if (CGGetActiveDisplayList(displayCount, &activeDisplays[0], &displayCount) != kCGErrorSuccess) - qFatal("Failed to get active displays"); - - for (CGDirectDisplayID displayId : activeDisplays) - QCocoaScreen::add(displayId); + updateScreens(); CGDisplayRegisterReconfigurationCallback([](CGDirectDisplayID displayId, CGDisplayChangeSummaryFlags flags, void *userInfo) { - if (flags & kCGDisplayBeginConfigurationFlag) - return; // Wait for changes to apply - Q_UNUSED(userInfo); - qCDebug(lcQpaScreen).verbosity(0).nospace() << "Display reconfiguration" - << " (" << QFlags(flags) << ")" - << " for displayId=" << displayId; - - QCocoaScreen *cocoaScreen = QCocoaScreen::get(displayId); + // Displays are reconfigured in batches, and we want to update our screens + // once a batch ends, so that all the states of the displays are up to date. + static int displayReconfigurationsInProgress = 0; + + const bool beforeReconfigure = flags & kCGDisplayBeginConfigurationFlag; + qCDebug(lcQpaScreen).verbosity(0).nospace() << "Display " << displayId + << (beforeReconfigure ? " about to reconfigure" : " was ") + << QFlags(flags) + << " with " << displayReconfigurationsInProgress + << " display configuration(s) in progress"; + + if (!flags) { + // CGDisplayRegisterReconfigurationCallback has been observed to be called + // with flags unset. This seems like a bug. The callback is not paired with + // a matching "completion" callback either, so we don't know whether to treat + // it as a begin or end of reconfigure. + return; + } - if ((flags & kCGDisplayAddFlag) || !cocoaScreen) { - if (!CGDisplayIsActive(displayId)) { - qCDebug(lcQpaScreen) << "Not adding inactive display" << displayId; - return; // Will be added when activated + if (beforeReconfigure) { + if (!displayReconfigurationsInProgress++) { + // There might have been a screen reconfigure before this that + // we didn't process yet, so do that now if that's the case. + updateScreensIfNeeded(); + + Q_ASSERT(!s_screenConfigurationBeforeUpdate); + s_screenConfigurationBeforeUpdate = NSScreen.screens; + qCDebug(lcQpaScreen, "Display reconfigure transaction started" + " with screen configuration %p", s_screenConfigurationBeforeUpdate); + + static void (^tryScreenUpdate)(); + tryScreenUpdate = ^void () { + qCDebug(lcQpaScreen) << "Attempting screen update from runloop block"; + if (!updateScreensIfNeeded()) + CFRunLoopPerformBlock(CFRunLoopGetMain(), kCFRunLoopCommonModes, tryScreenUpdate); + }; + CFRunLoopPerformBlock(CFRunLoopGetMain(), kCFRunLoopCommonModes, tryScreenUpdate); } - QCocoaScreen::add(displayId); - } else if ((flags & kCGDisplayRemoveFlag) || !CGDisplayIsActive(displayId)) { - cocoaScreen->remove(); } else { - // Detect changes to the primary screen immediately, instead of - // waiting for a display reconfigure with kCGDisplaySetMainFlag. - // This ensures that any property updates to the other screens - // will be in reference to the correct primary screen. - QCocoaScreen *mainDisplay = QCocoaScreen::get(CGMainDisplayID()); - if (QGuiApplication::primaryScreen()->handle() != mainDisplay) { - mainDisplay->updateProperties(); - qCInfo(lcQpaScreen) << "Primary screen changed to" << mainDisplay; - QWindowSystemInterface::handlePrimaryScreenChanged(mainDisplay); - if (cocoaScreen == mainDisplay) - return; // Already reconfigured - } + Q_ASSERT_X(displayReconfigurationsInProgress, "QCococaScreen", + "Display configuration transactions are expected to be balanced"); - cocoaScreen->updateProperties(); - qCInfo(lcQpaScreen).nospace() << "Reconfigured " << - (primaryScreen() == cocoaScreen ? "primary " : "") - << cocoaScreen; + if (!--displayReconfigurationsInProgress) { + qCDebug(lcQpaScreen) << "Display reconfigure transaction completed"; + // We optimistically update now, in case the NSScreens have changed + updateScreensIfNeeded(); + } } }, nullptr); + + static QMacNotificationObserver screenParameterObserver(NSApplication.sharedApplication, + NSApplicationDidChangeScreenParametersNotification, [&]() { + qCDebug(lcQpaScreen) << "Received screen parameter change notification"; + updateScreensIfNeeded(); // As a last resort we update screens here + }); +} + +bool QCocoaScreen::updateScreensIfNeeded() +{ + if (!s_screenConfigurationBeforeUpdate) { + qCDebug(lcQpaScreen) << "QScreens have already been updated, all good"; + return true; + } + + if (s_screenConfigurationBeforeUpdate == NSScreen.screens) { + qCDebug(lcQpaScreen) << "Still waiting for NSScreen configuration change"; + return false; + } + + qCDebug(lcQpaScreen, "NSScreen configuration changed to %p", NSScreen.screens); + updateScreens(); + + s_screenConfigurationBeforeUpdate = nil; + return true; +} + +/* + Update the list of available QScreens, and the properties of existing screens. + + At this point we rely on the NSScreen.screens to be up to date. +*/ +void QCocoaScreen::updateScreens() +{ + uint32_t displayCount = 0; + if (CGGetOnlineDisplayList(0, nullptr, &displayCount) != kCGErrorSuccess) + qFatal("Failed to get number of online displays"); + + QVector onlineDisplays(displayCount); + if (CGGetOnlineDisplayList(displayCount, onlineDisplays.data(), &displayCount) != kCGErrorSuccess) + qFatal("Failed to get online displays"); + + qCInfo(lcQpaScreen) << "Updating screens with" << displayCount + << "online displays:" << onlineDisplays; + + // TODO: Verify whether we can always assume the main display is first + int mainDisplayIndex = onlineDisplays.indexOf(CGMainDisplayID()); + if (mainDisplayIndex < 0) { + qCWarning(lcQpaScreen) << "Main display not in list of online displays!"; + } else if (mainDisplayIndex > 0) { + qCWarning(lcQpaScreen) << "Main display not first display, making sure it is"; + onlineDisplays.move(mainDisplayIndex, 0); + } + + for (CGDirectDisplayID displayId : onlineDisplays) { + Q_ASSERT(CGDisplayIsOnline(displayId)); + + if (CGDisplayMirrorsDisplay(displayId)) + continue; + + // A single physical screen can map to multiple displays IDs, + // depending on which GPU is in use or which physical port the + // screen is connected to. By mapping the display ID to a UUID, + // which are shared between displays that target the same screen, + // we can pick an existing QScreen to update instead of needlessly + // adding and removing QScreens. + QCFType uuid = CGDisplayCreateUUIDFromDisplayID(displayId); + Q_ASSERT(uuid); + + if (QCocoaScreen *existingScreen = QCocoaScreen::get(uuid)) { + existingScreen->update(displayId); + qCInfo(lcQpaScreen) << "Updated" << existingScreen; + if (CGDisplayIsMain(displayId) && existingScreen != qGuiApp->primaryScreen()->handle()) { + qCInfo(lcQpaScreen) << "Primary screen changed to" << existingScreen; + QWindowSystemInterface::handlePrimaryScreenChanged(existingScreen); + } + } else { + QCocoaScreen::add(displayId); + } + } + + for (QScreen *screen : QGuiApplication::screens()) { + QCocoaScreen *platformScreen = static_cast(screen->handle()); + if (!platformScreen->isOnline() || platformScreen->isMirroring()) + platformScreen->remove(); + } } void QCocoaScreen::add(CGDirectDisplayID displayId) { const bool isPrimary = CGDisplayIsMain(displayId); QCocoaScreen *cocoaScreen = new QCocoaScreen(displayId); - qCInfo(lcQpaScreen).nospace() << "Adding " << (isPrimary ? "new primary " : "") << cocoaScreen; + qCInfo(lcQpaScreen) << "Adding" << cocoaScreen + << (isPrimary ? "as new primary screen" : ""); QWindowSystemInterface::handleScreenAdded(cocoaScreen, isPrimary); } QCocoaScreen::QCocoaScreen(CGDirectDisplayID displayId) : QPlatformScreen(), m_displayId(displayId) { - updateProperties(); + update(m_displayId); m_cursor = new QCocoaCursor; } @@ -150,8 +243,6 @@ void QCocoaScreen::cleanupScreens() void QCocoaScreen::remove() { - m_displayId = kCGNullDirectDisplay; // Prevent stale references during removal - // This may result in the application responding to QGuiApplication::screenRemoved // by moving the window to another screen, either by setGeometry, or by setScreen. // If the window isn't moved by the application, Qt will as a fallback move it to @@ -163,7 +254,7 @@ void QCocoaScreen::remove() // QCocoaWindow::windowDidChangeScreen. At that point the window will appear to have // already changed its screen, but that's only true if comparing the Qt screens, // not when comparing the NSScreens. - qCInfo(lcQpaScreen).nospace() << "Removing " << (primaryScreen() == this ? "current primary " : "") << this; + qCInfo(lcQpaScreen) << "Removing " << this; QWindowSystemInterface::handleScreenRemoved(this); } @@ -210,9 +301,14 @@ static QString displayName(CGDirectDisplayID displayID) return QString(); } -void QCocoaScreen::updateProperties() +void QCocoaScreen::update(CGDirectDisplayID displayId) { - Q_ASSERT(m_displayId); + if (displayId != m_displayId) { + qCDebug(lcQpaScreen) << "Reconnecting" << this << "as display" << displayId; + m_displayId = displayId; + } + + Q_ASSERT(isOnline()); const QRect previousGeometry = m_geometry; const QRect previousAvailableGeometry = m_availableGeometry; @@ -350,8 +446,8 @@ struct DeferredDebugHelper void QCocoaScreen::deliverUpdateRequests() { - if (!m_displayId) - return; // Screen removed + if (!isOnline()) + return; QMacAutoReleasePool pool; @@ -562,6 +658,29 @@ QPixmap QCocoaScreen::grabWindow(WId view, int x, int y, int width, int height) return windowPixmap; } +bool QCocoaScreen::isOnline() const +{ + // When a display is disconnected CGDisplayIsOnline and other CGDisplay + // functions that take a displayId will not return false, but will start + // returning -1 to signal that the displayId is invalid. Some functions + // will also assert or even crash in this case, so it's important that + // we double check if a display is online before calling other functions. + auto isOnline = CGDisplayIsOnline(m_displayId); + static const uint32_t kCGDisplayIsDisconnected = int32_t(-1); + return isOnline != kCGDisplayIsDisconnected && isOnline; +} + +/* + Returns true if a screen is mirroring another screen +*/ +bool QCocoaScreen::isMirroring() const +{ + if (!isOnline()) + return false; + + return CGDisplayMirrorsDisplay(m_displayId); +} + /*! The screen used as a reference for global window geometry */ @@ -586,6 +705,12 @@ QList QCocoaScreen::virtualSiblings() const QCocoaScreen *QCocoaScreen::get(NSScreen *nsScreen) { + if (s_screenConfigurationBeforeUpdate) { + qCWarning(lcQpaScreen) << "Trying to resolve screen while waiting for screen reconfigure!"; + if (!updateScreensIfNeeded()) + qCWarning(lcQpaScreen) << "Failed to do last minute screen update. Expect crashes."; + } + return get(nsScreen.qt_displayId); } @@ -600,23 +725,34 @@ QCocoaScreen *QCocoaScreen::get(CGDirectDisplayID displayId) return nullptr; } +QCocoaScreen *QCocoaScreen::get(CFUUIDRef uuid) +{ + for (QScreen *screen : QGuiApplication::screens()) { + auto *platformScreen = static_cast(screen->handle()); + if (!platformScreen->isOnline()) + continue; + + auto displayId = platformScreen->displayId(); + QCFType candidateUuid(CGDisplayCreateUUIDFromDisplayID(displayId)); + Q_ASSERT(candidateUuid); + + if (candidateUuid == uuid) + return platformScreen; + } + + return nullptr; +} + NSScreen *QCocoaScreen::nativeScreen() const { if (!m_displayId) return nil; // The display has been disconnected - // A single display may have different displayIds depending on - // which GPU is in use or which physical port the display is - // connected to. By comparing UUIDs instead of display IDs we - // ensure that we always pick up the appropriate NSScreen. - QCFType uuid = CGDisplayCreateUUIDFromDisplayID(m_displayId); - - for (NSScreen *screen in [NSScreen screens]) { - if (QCFType(CGDisplayCreateUUIDFromDisplayID(screen.qt_displayId)) == uuid) + for (NSScreen *screen in NSScreen.screens) { + if (screen.qt_displayId == m_displayId) return screen; } - qCWarning(lcQpaScreen) << "Could not find NSScreen for display ID" << m_displayId; return nil; } @@ -651,11 +787,21 @@ QDebug operator<<(QDebug debug, const QCocoaScreen *screen) debug.nospace(); debug << "QCocoaScreen(" << (const void *)screen; if (screen) { - debug << ", geometry=" << screen->geometry(); + debug << ", " << screen->name(); + if (screen->isOnline()) { + if (CGDisplayIsAsleep(screen->displayId())) + debug << ", Sleeping"; + if (auto mirroring = CGDisplayMirrorsDisplay(screen->displayId())) + debug << ", mirroring=" << mirroring; + } else { + debug << ", Offline"; + } + debug << ", " << screen->geometry(); debug << ", dpr=" << screen->devicePixelRatio(); - debug << ", name=" << screen->name(); - debug << ", displayId=" << screen->m_displayId; - debug << ", native=" << screen->nativeScreen(); + debug << ", displayId=" << screen->displayId(); + + if (auto nativeScreen = screen->nativeScreen()) + debug << ", " << nativeScreen; } debug << ')'; return debug; -- cgit v1.2.3 From d463a63bb94d3f5c9530790541d9706490e44b3a Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Wed, 27 Nov 2019 15:52:25 +0200 Subject: Set proper TARGET name for libs When doing a multi ABI build in one go, if the TARGET is the same, we'll endup with only one library which is not okay. Task-number: QTBUG-80351 Change-Id: I0c5ff24480446d671e59dbd5a045f9889dff39e9 Reviewed-by: Eskil Abrahamsen Blomfeldt --- mkspecs/features/android/android.prf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkspecs/features/android/android.prf b/mkspecs/features/android/android.prf index fc0ff553d0..26374cabca 100644 --- a/mkspecs/features/android/android.prf +++ b/mkspecs/features/android/android.prf @@ -36,6 +36,7 @@ build_pass { } } } else: contains(TEMPLATE, "lib"):!static:!QTDIR_build:android_install { + !contains(TARGET, "_$${QT_ARCH}"): TARGET = $${TARGET}_$${QT_ARCH} target.path = /libs/$$ANDROID_TARGET_ARCH/ INSTALLS *= target } -- cgit v1.2.3 From d027860201c55b686b9f8330c559f84799442d68 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Thu, 28 Nov 2019 18:36:48 +0200 Subject: Fix assets iterator - start from index -1 each time when we iterate. Each time when we add a FolderIterator to the stack we MUST reset the index (-1) otherwise it will continue from it's last position. To fix it we are cloning the FolderIterator to set the index to -1. The index must be -1 in order to set it to 0 when we first call next() method. - introduce "fileType" static method for a more reliable also much faster file type lookup. The old version of checking if a file exists, is a folder or a file was buggy that's why it skipped some file randomly. Fixes: QTBUG-80178 Change-Id: I4b28e4616399b1bff35d792b55ded1bf19b62dd9 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../android/qandroidassetsfileenginehandler.cpp | 70 +++++++++++++++++----- 1 file changed, 56 insertions(+), 14 deletions(-) diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp index 26e72a480f..3d16f96450 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp @@ -72,9 +72,10 @@ static inline QString prefixedPath(QString path) struct AssetItem { enum class Type { File, - Folder + Folder, + Invalid }; - + AssetItem() = default; AssetItem (const QString &rawName) : name(rawName) { @@ -92,21 +93,47 @@ using AssetItemList = QVector; class FolderIterator : public AssetItemList { public: - static QSharedPointer fromCache(const QString &path) + static QSharedPointer fromCache(const QString &path, bool clone) { QMutexLocker lock(&m_assetsCacheMutex); QSharedPointer *folder = m_assetsCache.object(path); if (!folder) { folder = new QSharedPointer{new FolderIterator{path}}; - if (!m_assetsCache.insert(path, folder)) { + if ((*folder)->empty() || !m_assetsCache.insert(path, folder)) { QSharedPointer res = *folder; delete folder; return res; } } - return *folder; + return clone ? QSharedPointer{new FolderIterator{*(*folder)}} : *folder; + } + + static AssetItem::Type fileType(const QString &filePath) + { + const QStringList paths = filePath.split(QLatin1Char('/')); + QString fullPath; + AssetItem::Type res = AssetItem::Type::Invalid; + for (const auto &path: paths) { + auto folder = fromCache(fullPath, false); + auto it = std::lower_bound(folder->begin(), folder->end(), AssetItem{path}, [](const AssetItem &val, const AssetItem &assetItem) { + return val.name < assetItem.name; + }); + if (it == folder->end() || it->name != path) + return AssetItem::Type::Invalid; + if (!fullPath.isEmpty()) + fullPath.append(QLatin1Char('/')); + fullPath += path; + res = it->type; + } + return res; } + FolderIterator(const FolderIterator &other) + : AssetItemList(other) + , m_index(-1) + , m_path(other.m_path) + {} + FolderIterator(const QString &path) : m_path(path) { @@ -118,8 +145,12 @@ public: QJNIEnvironmentPrivate env; jobjectArray jFiles = static_cast(files.object()); const jint nFiles = env->GetArrayLength(jFiles); - for (int i = 0; i < nFiles; ++i) - push_back({QJNIObjectPrivate(env->GetObjectArrayElement(jFiles, i)).toString()}); + for (int i = 0; i < nFiles; ++i) { + AssetItem item{QJNIObjectPrivate(env->GetObjectArrayElement(jFiles, i)).toString()}; + insert(std::upper_bound(begin(), end(), item, [](const auto &a, const auto &b){ + return a.name < b.name; + }), item); + } } m_path = assetsPrefix + QLatin1Char('/') + m_path + QLatin1Char('/'); m_path.replace(QLatin1String("//"), QLatin1String("/")); @@ -169,7 +200,7 @@ public: const QString &path) : QAbstractFileEngineIterator(filters, nameFilters) { - m_stack.push_back(FolderIterator::fromCache(cleanedAssetPath(path))); + m_stack.push_back(FolderIterator::fromCache(cleanedAssetPath(path), true)); if (m_stack.last()->empty()) m_stack.pop_back(); } @@ -215,7 +246,7 @@ public: if (!res) return {}; if (res->second.type == AssetItem::Type::Folder) { - m_stack.push_back(FolderIterator::fromCache(cleanedAssetPath(currentFilePath()))); + m_stack.push_back(FolderIterator::fromCache(cleanedAssetPath(currentFilePath()), true)); if (m_stack.last()->empty()) m_stack.pop_back(); } @@ -305,12 +336,12 @@ public: FileFlags fileFlags(FileFlags type = FileInfoAll) const override { - FileFlags flags(ReadOwnerPerm|ReadUserPerm|ReadGroupPerm|ReadOtherPerm|ExistsFlag); + FileFlags commonFlags(ReadOwnerPerm|ReadUserPerm|ReadGroupPerm|ReadOtherPerm|ExistsFlag); + FileFlags flags; if (m_assetFile) - flags |= FileType; + flags = FileType | commonFlags; else if (m_isFolder) - flags |= DirectoryType; - + flags = DirectoryType | commonFlags; return type & flags; } @@ -341,9 +372,20 @@ public: void setFileName(const QString &file) override { + if (m_fileName == cleanedAssetPath(file)) + return; close(); m_fileName = cleanedAssetPath(file); - m_isFolder = !open(QIODevice::ReadOnly) && !FolderIterator::fromCache(m_fileName)->empty(); + switch (FolderIterator::fileType(m_fileName)) { + case AssetItem::Type::File: + open(QIODevice::ReadOnly); + break; + case AssetItem::Type::Folder: + m_isFolder = true; + break; + case AssetItem::Type::Invalid: + break; + } } Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override -- cgit v1.2.3 From a5cbff60f063d271500e31eba5bd236741d2367b Mon Sep 17 00:00:00 2001 From: Jani Heikkinen Date: Mon, 2 Dec 2019 13:42:49 +0200 Subject: Fix configure after updating qt license file License file (LICENSE.QT-LICENSE-AGREEMENT-4.0) was recently updated to version 4.2 and that broke the configure. Remove qt license file version number from file name to avoid configure update need when license file is updated Change-Id: I77b4a4e7c6e590bbbce79d1c86cbcfb965841eae Reviewed-by: Lars Knoll --- LICENSE.QT-LICENSE-AGREEMENT | 1285 ++++++++++++++++++++++++++++++++++++++ LICENSE.QT-LICENSE-AGREEMENT-4.2 | 1285 -------------------------------------- configure.pri | 6 +- 3 files changed, 1288 insertions(+), 1288 deletions(-) create mode 100644 LICENSE.QT-LICENSE-AGREEMENT delete mode 100644 LICENSE.QT-LICENSE-AGREEMENT-4.2 diff --git a/LICENSE.QT-LICENSE-AGREEMENT b/LICENSE.QT-LICENSE-AGREEMENT new file mode 100644 index 0000000000..7be8fb5d45 --- /dev/null +++ b/LICENSE.QT-LICENSE-AGREEMENT @@ -0,0 +1,1285 @@ +QT LICENSE AGREEMENT Agreement version 4.2 + +This Qt License Agreement (“Agreement”) is a legal agreement for the licensing +of Licensed Software (as defined below) between The Qt Company (as defined +below) and the Licensee who has accepted the terms of this Agreement by +downloading or using the Licensed Software and/or as defined herein: + +Capitalized terms used herein are defined in Section 1. + +WHEREAS: + (A) Licensee wishes to use the Licensed Software for the purpose of + developing and distributing Applications and/or Devices (each as + defined below); and + (B) The Qt Company is willing to grant the Licensee a right to use + Licensed Software for such a purpose pursuant to term and conditions + of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + + +1. DEFINITIONS + +“Affiliate” of a Party shall mean an entity (i) which is directly +or indirectly controlling such Party; (ii) which is under the same direct or +indirect ownership or control as such Party; or (iii) which is directly or +indirectly owned or controlled by such Party. For these purposes, an entity +shall be treated as being controlled by another if that other entity has fifty +percent (50 %) or more of the votes in such entity, is able to direct its +affairs and/or to control the composition of its board of directors or +equivalent body. + +“Add-on Products” shall mean The Qt Company’s specific add-on software products +(for example Qt Safe Renderer, Qt for Automation, Qt Application Manager), which +are not licensed as part of The Qt Company’s standard offering, but shall be +included into the scope of Licensed Software only if so specifically agreed +between the Parties. + +“Applications” shall mean Licensee's software products created using the +Licensed Software, which may include the Redistributables, or part thereof. + +“Contractor(s)” shall mean third party consultants, distributors and contractors +performing services to the Licensee under applicable contractual arrangement. + +“Customer(s)” shall mean Licensee’s end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +“Data Protection Legislation” shall mean the General Data Protection Regulation +(EU 2016/679) (GDPR) and any national implementing laws, regulations and +secondary legislation, as may be amended or updated from time to time, as well +as any other data protection laws or regulations applicable in relevant +territory. + +“Deployment Platforms” shall mean operating systems specified in the License +Certificate, on which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +“Designated User(s)” shall mean the employee(s) of Licensee or Licensee’s +Affiliates acting within the scope of their employment or Licensee's Contractors +acting within the scope of their services for Licensee and on behalf of +Licensee. Designated Users shall be named in the License Certificate. + +“Development License” shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. Development Licenses are available separately +for Qt for Application Development and Qt for Device Creation products, each +product having its designated scope and purpose of use. Distribution Licenses +are always connected to Qt for Device Creation product only. + +“Development Platforms” shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +“Devices” shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors, and (2)(i) +incorporate or integrate the Redistributables or parts thereof; or (ii) where +the main user interface or substantial functionality of such unit , when used by +a Customer, is provided by Application(s) or otherwise depends on the Licensed +Software, regardless of whether the Redistributables are distributed together +with the hardware or not. Devices covered with this Agreement shall be specified +in Appendix 2 or in a quote. + +“Distribution License(s)” shall mean the license required for any kind of sale, +trade, exchange, loan, lease, rental or other distribution by or on behalf of +Licensee to a third party of Redistributables in connection with Devices +pursuant to license grant described in Section 3.3 of this Agreement. + +“Distribution License Packs” shall mean set of prepaid Distribution Licenses for +distribution of Redistributables, as defined in The Qt Company’s standard price +list, quote, Purchase Order confirmation or in an appendix hereto, as the case +may be. + +“Intellectual Property Rights” shall mean patents (including utility models), +design patents, and designs (whether or not capable of registration), chip +topography rights and other like protection, copyrights, trademarks, service +marks, trade names, logos or other words or symbols and any other form of +statutory protection of any kind and applications for any of the foregoing as +well as any trade secrets. + +“License Certificate” shall mean a certificate generated by The Qt Company for +each Designated User respectively upon them downloading the Licensed Software, +which will be available under respective Designated User’s Qt Account at +account.qt.io. License Certificates will specify the Designated User, the +Development Platforms, Deployment Platforms and the License Term. Such terms are +considered part of the licenses granted hereunder and shall be updated from time +to time to reflect any agreed changes to the foregoing terms relating to +Designated User’s rights to the Licensed Software. + +“License Fee” shall mean the fee charged to the Licensee for rights granted +under the terms of this Agreement. + +“License Term” shall mean the agreed validity period of the Development License +of the respective Designated User, during which time the Designated User is +entitled to use the Licensed Software, as set forth in the respective License +Certificate. + +“Licensed Software” shall mean either + (i) Qt for Application Development or + (ii) Qt for Device Creation, and/or + (iii) Qt 3D Studio, and/or + (iv) Qt Design Studio, and/or + (v) selected Add-on Products, if any, + +depending on which product(s) the Licensee has purchased under this Agreement, +as well as corresponding online or electronic documentation, associated media +and printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4) or Open Source +Qt. The Qt Company may, in the course of its development activities, at its free +and absolute discretion and without any obligation to send or publish any +notifications to the Licensee or in general, make changes, additions or +deletions in the components and functionalities of the Licensed Software, +provided that no such changes, additions or deletions will affect the already +released version of the Licensed Software, but only upcoming version(s). + +“Licensee” shall mean the individual or legal entity that is party to this +Agreement, as identified on the signature page hereof. + +“Licensee’s Records” shall mean books and records that are likely to contain +information bearing on Licensee’s compliance with this Agreement, Licensee’s use +of Open Source Qt and/or the payments due to The Qt Company under this +Agreement, including, but not limited to user information, assembly logs, sales +records and distribution records. + +“Modified Software” shall have the meaning as set forth in Section 2.3. + +“Online Services” shall mean any services or access to systems made available by +The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +“Open Source Qt” shall mean the non-commercial Qt computer software products, +licensed under the terms of the GNU Lesser General Public License, version 2.1 +or later (“LGPL”) or the GNU General Public License, version 2.0 or later +(“GPL”). For clarity, Open Source Qt shall not be provided nor governed under +this Agreement. + +”Party” or “Parties” shall mean Licensee and/or The Qt Company. + +“Permitted Combination” shall have the meaning as set forth in Section +3.4(viii). + +“Pre-Release Code” shall have the meaning as set forth in Section 4. + +“Prohibited Combination” shall mean any means to (i) use, combine, incorporate, +link or integrate Licensed Software with any software created with or +incorporating Open Source Qt, (ii) use Licensed Software for creation of any +software created with or incorporating Open Source Qt, or (iii) incorporate or +integrate Applications into a hardware device or product other than a Device. + +“Qt 3D Studio” shall mean all versions of The Qt Company’s Qt 3D Studio, a 3D +user interface design and development environment for rapid designing and +prototyping of animated user interfaces. + +“Qt Design Studio” shall mean all versions of The Qt Company’s Qt Design Studio +tool, a user interface design and development environment for rapid designing +and prototyping of animated user interfaces. + +“Qt for Application Development” shall mean The Qt Company’s productized +offering, which consist of all versions of + (i) Qt Toolkit, and + (ii) Qt Tools/Applications. + +“Qt for Device Creation” shall mean The Qt Company’s productized offering, which +consist of all versions of + (i) Qt for Application Development, and + (ii) Software components specific to embedded software development as set + forth in Appendix 1, Sections 1b and 1d. + +“Qt Toolkit” shall mean the modules defined in Appendix 1, Section 1a. + +“Qt Tools/Applications” shall mean the tools defined in Appendix 1, Section 1c. + +"Redistributables" shall mean the portions of the Licensed Software set forth in +Appendix 1, Section 2 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. Where +relevant, any reference to Licensed Software in this Agreement shall include and +refer also to Redistributables. + +“Renewal Term” shall mean an extension of previous License Term as agreed +between the Parties. + +“Submitted Modified Software” shall have the meaning as set forth in Section +2.3. + +“Support” shall mean standard developer support that is provided by The Qt +Company to assist Designated Users in using the Licensed Software in accordance +with The Qt Company’s standard support terms available at +https://www.qt.io/terms-conditions/ and as further defined in Section 8 +hereunder. + +“Taxes” shall have the meaning set forth in Section 10.5. + +“Term” shall have the meaning set forth in Section 12. + +“The Qt Company” shall mean: + (i) in the event Licensee is an individual residing in the United States + or a legal entity incorporated in the United States or having its + headquarters in the United States, The Qt Company Inc., a + Delaware corporation with its office at 2350 Mission College Blvd., + Suite 1020, Santa Clara, CA 95054, USA.; or + (ii) in the event the Licensee is an individual residing outside of the + United States or a legal entity incorporated outside of the United + States or having its registered office outside of the United States, + The Qt Company Ltd., a Finnish company with its registered office at + Bertel Jungin aukio D3A, 02600 Espoo, Finland. + +"Third Party Software " shall have the meaning set forth in Section 4. + +“Updates” shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made available +to users of the Licensed Software that have contracted for Support. Updates are +generally depicted as a change to the digits following the decimal in the +Licensed Software version number. The Qt Company shall make Updates available to +the Licensee under the Support. Updates shall be considered as part of the +Licensed Software hereunder. + +“Upgrades” shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as part +of the Licensed Software hereunder. + + +2. OWNERSHIP + +2.1 Ownership of The Qt Company +The Licensed Software is protected by copyright laws and international copyright +treaties, as well as other intellectual property laws and treaties. The Licensed +Software is licensed, not sold. All of The Qt Company's Intellectual Property +Rights are and shall remain the exclusive property of The Qt Company or its +licensors respectively. + +2.2 Ownership of Licensee +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. All +Intellectual Property Rights to the Modified Software, Applications and Devices +shall remain with the Licensee and no rights thereto shall be granted by the +Licensee to The Qt Company under this Agreement (except as set forth in Section +2.3 below). + +2.3 Modified Software +Licensee may create bug-fixes, error corrections, patches or modifications to +the Licensed Software (“Modified Software”). Such Modified Software may break +the source or binary compatibility with the Licensed Software (including without +limitation through changing the application programming interfaces ("API") or by +adding, changing or deleting any variable, method, or class signature in the +Licensed Software and/or any inter-process protocols, services or standards in +the Licensed Software libraries). To the extent that Licensee’s Modified +Software so breaks source or binary compatibility with the Licensed Software, +Licensee acknowledges that The Qt Company's ability to provide Support may be +prevented or limited and Licensee's ability to make use of Updates may be +restricted. + +Licensee may, at its sole and absolute discretion, choose to submit Modified +Software to The Qt Company (“Submitted Modified Software”) in connection with +Licensee’s Support request, service request or otherwise. In the event Licensee +does so, then, Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee’s Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. + + +3. LICENSES GRANTED + +3.1 Development with Licensed Software +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non- exclusive, non-transferable license, valid for the License Term, +to use, modify and copy the Licensed Software by Designated Users on the +Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other related services to end-user Customers. + +Licensee may install copies of the Licensed Software on five (5) computers per +Designated User, provided that only the Designated Users who have a valid +Development License may use the Licensed Software. + +Licensee may at any time designate another Designated User to replace a +then-current Designated User by notifying The Qt Company in writing, provided +that any Designated User may be replaced only once during any six-month period. + +Upon expiry of the initially agreed License Term, the respective License Terms +shall be automatically extended to one or more Renewal Term(s), unless and until +either Party notifies the other Party in writing that it does not wish to +continue the License Term, such notification to be provided to the other Party +no less than ninety (90) days before expiry of the respective License Term. +Unless otherwise agreed between the Parties, Renewal Term shall be of equal +length with the initial License Term. + +Any such Renewal Term shall be subject to License Fees agreed between the +Parties or, if no advance agreement exists, subject to The Qt Company’s standard +pricing applicable at the commencement date of any such Renewal Term. + +Any price or other term specified for a Renewal Term shall be valid only for the +specified time. The Qt Company may request the Licensee to place a purchase +order corresponding to a quote by The Qt Company for the relevant Renewal Term. + +In the event Licensee does not prevent auto-renewal pursuant the above, but a +Renewal Term is nevertheless not duly ordered within 30 days from the date of +the respective quote from The Qt Company and/or the respective License Fee paid +by due date specified in The Qt Company’s respective invoice, The Qt Company +shall apply a reinstatement fee equal to ten percent (10 %) of the total value +of the License Fees of the Development Licenses for the expired term to be added +to the License Fee of the respective Renewal Term. + +In the event Licensee chooses not to renew a Development License for a Renewal +Term by notifying The Qt Company thereof no less than ninety (90) days before +expiry of the respective License Term, Licensee may still reinstate such expired +Development Licenses for a Renewal Term subject to applicable renewal Term +License Fees until thirty (30) days from the expiry of the initially agreed +License Term or preceding Renewal Term. After such thirty (30) day period a +Development License shall be subject to applicable License Fees for a new +Development License and not any Renewal Term License Fees. + +3.2 Distribution of Applications +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to +this Agreement) right and license, valid for the Term, to + (i) distribute, by itself or through its Contractors, Redistributables as + installed, incorporated or integrated into Applications for execution + on the Deployment Platforms, and + (ii) grant sublicenses to Redistributables, as distributed hereunder, for + Customers solely for Customer’s internal use and to the extent + necessary in order for the Customers to use the Applications for their + respective intended purposes. + +Right to distribute the Redistributables as part of an Application as provided +herein is not royalty- bearing but is conditional upon the Licensee not having +any unpaid License Fees for Development Licenses owed to The Qt Company at the +time of distribution of any Redistributables to Customers. + +3.3 Distribution of Devices +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to +this Agreement) right and license, valid for the Term, to + (i) distribute, by itself or through one or more tiers of Contractors, + Redistributables as installed, incorporated or integrated, or intended + to be installed, incorporated or integrated into Devices for execution + on the Deployment Platforms, and + (ii) grant sublicenses to Redistributables, as distributed hereunder, for + Customers solely for Customer’s internal use and to the extent + necessary in order for the Customers to use the Devices for their + respective intended purposes. + +Right to distribute the Redistributables with Devices as provided herein is +conditional upon the Licensee (i) not having any unpaid License Fees for +Development Licenses owed to The Qt Company, and (ii) having purchased and paid +corresponding Distribution Licenses at the time of distribution of any +Redistributables to Customers. + +3.4 Further Requirements +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + (i) Licensee shall not remove or alter any copyright, trademark or other + proprietary rights notice(s) contained in any portion of the Licensed + Software; + (ii) Applications must add primary and substantial functionality to the + Licensed Software so as not to compete with the Licensed Software; + (iii) Applications may not pass on functionality which in any way makes it + possible for others to create software with the Licensed Software; + provided however that Licensee may use the Licensed Software's + scripting and QML ("Qt Quick") functionality solely in order to enable + scripting, themes and styles that augment the functionality and + appearance of the Application(s) without adding primary and + substantial functionality to the Application(s); + (iv) Licensee shall not use Licensed Software in any manner or for any + purpose that infringes, misappropriates or otherwise violates any + Intellectual property or right of any third party, or that violates + any applicable law; + (v) Licensee shall not use The Qt Company's or any of its suppliers' + names, logos, or trademarks to market Applications, except that + Licensee may use “Built with Qt” logo to indicate that Application(s) + was developed using the Licensed Software; + (vi) Licensee shall not distribute, sublicense or disclose source code of + Licensed Software to any third party (provided however that Licensee + may appoint employee(s) of Contractors as Designated Users to use + Licensed Software pursuant to this Agreement). Such right may be + available for the Licensee subject to a separate software development + kit (“SDK”) license agreement to be concluded with The Qt Company; + (vii) Licensee shall not grant the Customers a right to (i) make copies of + the Redistributables except when and to the extent required to use the + Applications and/or Devices for their intended purpose, (ii) modify + the Redistributables or create derivative works thereof, (iii) + decompile, disassemble or otherwise reverse engineer Redistributables, + or (iv) redistribute any copy or portion of the Redistributables to + any third party, except as part of the onward sale of the Device on + which the Redistributables are installed; + (viii) Licensee shall not and shall cause that its Affiliates or Contractors + shall not use Licensed Software in any Prohibited Combination, unless + Licensee has received an advance written permission from The Qt + Company to do so. Absent such written permission, any and all + distribution by the Licensee during the Term of a hardware device or + product a) which incorporate or integrate any part of Licensed + Software or Open Source Qt; or b) where the main user interface or + substantial functionality is provided by software built with + Licensed Software or Open Source Qt or otherwise depends on the + Licensed Software or Open Source Qt, shall be considered to be + Device distribution under this Agreement and shall be dependent on + Licensee’s compliance thereof (including but not limited to + obligation to pay applicable License Fees for such distribution). + Notwithstanding what is provided above in this sub-section (viii), + Licensee is entitled to use and combine Qt 3D Studio and/or Qt + Design Studio with Open Source Qt (“Permitted Combination”) for + its internal evaluation purposes, provided that Licensee shall in no + way transfer, publish, disclose, display or otherwise make available + any software or work resulting from such Permitted Combination; + (ix) Licensee shall cause all of its Affiliates and Contractors entitled + to make use of the licenses granted under this Agreement, to be + contractually bound to comply with the relevant terms of this + Agreement and not to use the Licensed Software beyond the terms + hereof and for any purposes other than operating within the scope of + their services for Licensee. Licensee shall be responsible for any + and all actions and omissions of its Affiliates and Contractors + relating to the Licensed Software and use thereof (including but not + limited to payment of all applicable License Fees); + (x) Except when and to the extent explicitly provided in this Section 3, + Licensee shall not transfer, publish, disclose, display or otherwise + make available the Licensed Software; and + (xi) Licensee shall not attempt or enlist a third party to conduct or + attempt to conduct any of the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. Any use of Licensed Software +beyond the provisions of this Agreement is strictly prohibited and requires an +additional license from The Qt Company. + + +4. THIRD PARTY SOFTWARE +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included with the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. + + +5. PRE-RELEASE CODE +The Licensed Software may contain pre-release code and functionality, or sample +code marked or otherwise stated with appropriate designation such as “Technology +Preview”, “Alpha”, “Beta”, “Sample” etc. (“Pre-Release Code”). + +Such Pre-Release Code may be present complimentary for the Licensee, in order to +provide experimental support or information for new platforms or preliminary +versions of one or more new functionalities or for other similar reasons. The +Pre-Release Code may not be at the level of performance and compatibility of a +final, generally available, product offering. The Pre-Release Code may not +operate correctly, may contain errors and may be substantially modified by The +Qt Company prior to the first commercial product release, if any. The Qt Company +is under no obligation to make Pre-Release Code commercially available, or +provide any Support or Updates relating thereto. The Qt Company assumes no +liability whatsoever regarding any Pre-Release Code, but any use thereof is +exclusively at Licensee’s own risk and expense. + +For clarity, unless Licensed Software specifies different license terms for the +respective Pre- Release Code, the Licensee is entitled to use such pre-release +code pursuant to Section 3, just like other Licensed Software, provided however +that in the event Add-on Products are included and available as such Pre-Release +Code, Licensee’s right to use such Add-on Products is nevertheless subject to +and conditional upon conclusion of separate agreement with The Qt Company. + + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. Except as set forth above, the Licensed Software is licensed to +Licensee "as is" and Licensee’s exclusive remedy and The Qt Company’s entire +liability for errors in the Licensed Software shall be limited, at The Qt +Company’s option, to correction of the error, replacement of the Licensed +Software or return of the applicable fees paid for the defective Licensed +Software for the time period during which the License is not able to utilize the +Licensed Software under the terms of this Agreement. + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND +NON-INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT +WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE’S REQUIREMENTS OR THAT +IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE +UNINTERRUPTED. + + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY + +7.1 Limitation of Liability +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY’S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED +THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM LICENSEE +DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT +RESULTING IN SUCH LIABILITY. THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE +RISKS UNDER THIS AGREEMENT BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES +HAVE RELIED UPON THE LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO +ENTER INTO THIS AGREEMENT. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS +AGREEMENT, LICENSEE SHALL ALWAYS BE LIABLE TO PAY THE APPLICABLE LICENSE FEES +CORRESPONDING TO ITS ACTUAL USE OF LICENSED SOFTWARE. + + +8. SUPPORT, UPDATES AND ONLINE SERVICES +Upon due payment of the agreed License Fees the Licensee will be eligible to +receive Support and Updates and to use the Online Services during the License +Term, provided, however, that in the event the License Term is longer than 36 +months, the initial payment includes Support for only the first 12 months, +unless the Parties specifically otherwise agree. + +Unless otherwise decided by The Company at its free and absolute discretion, +Upgrades will not be included in the Support but may be available subject to +additional fees. From time to time The Qt Company may change the Support terms, +provided that during the respective ongoing License Term the level of Support +provided by The Qt Company may not be reduced without the consent of the +Licensee. Unless otherwise agreed, The Qt Company shall not be responsible for +providing any service or support to Customers. + + +9. CONFIDENTIALITY +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, business +plans, customers, business relations, technology, and other information, +including the terms of this Agreement, that is confidential and of great value +to the other Party, and the value of which would be significantly reduced if +disclosed to third parties (“Confidential Information”). Accordingly, when a +Party (the “Receiving Party”) receives Confidential Information from the other +Party (the “Disclosing Party”), the Receiving Party shall only disclose such +information to employees and Contractors on a need to know basis, and shall +cause its employees and employees of its Affiliates to: (i) maintain any and all +Confidential Information in confidence; (ii) not disclose the Confidential +Information to a third party without the Disclosing Party's prior written +approval; and (iii) not, directly or indirectly, use the Confidential +Information for any purpose other than for exercising its rights and fulfilling +its responsibilities pursuant to this Agreement. Each Party shall take +reasonable measures to protect the Confidential Information of the other Party, +which measures shall not be less than the measures taken by such Party to +protect its own confidential and proprietary information. Obligation of +confidentiality shall not apply to information that (i) is or becomes generally +known to the public through no act or omission of the Receiving Party; (ii) was +in the Receiving Party's lawful possession prior to the disclosure hereunder and +was not subject to limitations on disclosure or use; (iii) is developed +independently by employees or Contractors of the Receiving Party or other +persons working for the Receiving Party who have not had access to the +Confidential Information of the Disclosing Party, as proven by the written +records of the Receiving Party; (iv) is lawfully disclosed to the Receiving +Party without restrictions, by a third party not under an obligation of +confidentiality; or (v) the Receiving Party is legally compelled to disclose, in +which case the Receiving Party shall notify the Disclosing Party of such +compelled disclosure and assert the privileged and confidential nature of the +information and cooperate fully with the Disclosing Party to limit the scope of +disclosure and the dissemination of disclosed Confidential Information to the +minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + + +10. FEES, DELIVERY AND PAYMENT + +10.1 License Fees +License Fees are described in The Qt Company’s standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. The +License Fees shall not be refunded or claimed as a credit in any event or for +any reason whatsoever. + +10.2 Ordering Licenses +Licensee may purchase Development Licenses and Distribution Licenses pursuant to +agreed pricing terms or, if no specific pricing terms have been agreed upon, at +The Qt Company's standard pricing terms applicable at the time of purchase. +Unless specifically otherwise provided, any pricing terms referenced in this +Agreement shall be valid for twelve (12) months from the date of this Agreement. +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a “Purchase Order”) +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution License Packs +Unless otherwise agreed, Distribution Licenses shall be purchased by way of +Distribution License Packs. Upon due payment of the ordered Distribution +License Pack(s), the Licensee will have an account of Distribution Licenses +available for distributing the Redistributables in accordance with this +Agreement. Each time Licensee distributes a copy of Redistributables, then one +Distribution License is used, and Licensee’s account of available Distribution +Licenses is decreased accordingly. Licensee may distribute copies of the +Redistributables so long as Licensee has Distribution Licenses remaining on its +account. + +10.4 Payment Terms +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. The Qt Company will submit an invoice to Licensee after +the date of this Agreement and/or after The Qt Company receives a Purchase Order +from Licensee. A late payment charge of the lower of (a) one percent per month; +or (b) the interest rate stipulated by applicable law, shall be charged on any +unpaid balances that remain past due. + +10.5 Taxes +All License Fees and other charges payable hereunder are gross amounts but +exclusive of any value added tax, use tax, sales tax, withholding tax and other +taxes, duties or tariffs (“Taxes”) levied directly for the sale, delivery or use +of Licensed Software hereunder pursuant to any applicable law. Such applicable +Taxes shall be paid by Licensee to The Qt Company, or, where applicable, in lieu +of payment of such Taxes to The Qt Company, Licensee shall provide an exemption +certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS + +11.1 Licensee’s Record-keeping +Licensee shall at all times during the Term of this Agreement and for a period +of seven (7) years thereafter maintain Licensee’s Records in an accurate and +up-to-date form. Licensee’s Records shall be adequate to reasonably enable The +Qt Company to determine Licensee’s compliance with the provisions of this +Agreement. The records shall conform to general good accounting practices. +Licensee shall, within thirty (30) days from receiving The Qt Company’s request +to that effect, deliver to The Qt Company a report based on Licensee’s Records, +such report to contain information, in sufficient detail, on (i) number and +identity of users working with Licensed Software or Open Source Qt, (ii) copies +of Redistributables distributed by Licensee during the most recent calendar +quarter and/or any other term specified by The Qt Company, (iii) number of +undistributed copies of Redistributables and corresponding number of unused +Distribution Licenses remaining on Licensee’s account, and (iv) any other +information as The Qt Company may reasonably require from time to time. + +11.2. The Qt Company’s Audit Rights +The Qt Company or an independent auditor acting on behalf of The Qt Company’s, +may, upon at least five (5) business days’ prior written notice and at its +expense, audit Licensee with respect to the Licensee’s use of the Licensed +Software, but not more frequently than once during each 6- month period. Such +audit may be conducted by mail, electronic means or through an in-person visit +to Licensee’s place of business. Any such in-person audit shall be conducted +during regular business hours at Licensee's facilities and shall not +unreasonably interfere with Licensee's business activities. The Qt Company or +the independent auditor acting on behalf of The Qt Company shall be entitled to +inspect Licensee’s Records and conduct necessary interviews of Licensee’s +relevant employees and Contractors. All such Licensee’s Records and use thereof +shall be subject to an obligation of confidentiality under this Agreement. If +an audit reveals that Licensee is using the Licensed Software beyond scope of +the licenses Licensee has paid for, Licensee agrees to pay The Qt Company any +amounts owed for such unauthorized use within 30 days from receipt of the +corresponding invoice from The Qt Company. In addition, in the event the audit +reveals a material violation of the terms of this Agreement (without limitation, +either (i) underpayment of more than 10 % of License Fees or 10,000 euros +(whichever is more) or (ii) distribution of products, which include or result +from Prohibited Combination, shall be deemed a material violation for purposes +of this section), then the Licensee shall pay The Qt Company's reasonable cost +of conducting such audit. + + +12 TERM AND TERMINATION + +12.1 Agreement Term +This Agreement shall enter into force upon due acceptance by both Parties and +remain in force for as long as there is any Development License(s) purchased +under this Agreement in force (“Term”), unless and until terminated pursuant to +the terms of this Section 12. + +12.2 Termination and suspension of rights +Either Party shall have the right to terminate this Agreement upon thirty (30) +days prior written notice if the other Party commits a material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period. Instead of termination, The Qt Company shall have the right to suspend +or withhold grants of all rights to the Licensed Software hereunder, including +but not limited to the Development Licenses, Distribution License, and Support, +should Licensee fail to make payment in timely fashion or otherwise violates or +is reasonably suspected to violate its obligations or terms of this Agreement, +and where such violation or breach is not cured within five (5) business days +following The Qt Company’s written notice thereof. + +12.3 Mutual Right to Terminate +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has a +receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act equivalent +to any of the above occurs under the laws of the jurisdiction of the other +Party. + +12.4 Parties´ Rights and Duties upon Termination +Upon expiry or termination of the Agreement Licensee shall cease and shall cause +all Designated Users (including those of its Affiliates’ and Contractors’) to +cease using the Licensed Software and distribution of the Redistributables under +this Agreement. Notwithstanding the above, in the event the Agreement expires +or is terminated: + (i) as a result of The Qt Company choosing not to renew the Development + License(s) as set forth in Section 3.1, then all valid licenses + possessed by the Licensee at such date shall be extended to be valid + in perpetuity under the terms of this Agreement and Licensee is + entitled to purchase additional licenses as set forth in Section + 10.2; or + (ii) for reason other than by The Qt Company pursuant to item (i) above or + pursuant to Section 12.2, then the Licensee is entitled, for a period + of six (6) months after the effective date of termination, to continue + distribution of Devices under the Distribution Licenses paid but + unused at such effective date of termination. + +Upon any such termination the Licensee shall destroy or return to The Qt Company +all copies of the Licensed Software and all related materials and will certify +the same to The Qt Company upon its request, provided however that Licensee may +retain and exploit such copies of the Licensed Software as it may reasonably +require in providing continued support to Customers. Expiry or termination of +this Agreement for any reason whatsoever shall not relieve Licensee of its +obligation to pay any License Fees accrued or payable to The Qt Company prior to +the effective date of termination, and Licensee shall immediately pay to The Qt +Company all such fees upon the effective date of termination. Termination of +this Agreement shall not affect any rights of Customers to continue use of +Applications and Devices (and therein incorporated Redistributables). + +12.5 Extension in case of bankruptcy +In the event The Qt Company is declared bankrupt under a final, non-cancellable +decision by relevant court of law, and this Agreement is not, at the date of +expiry of the Development License(s) pursuant to Section 3.1, assigned to party, +who has assumed The Qt Company’s position as a legitimate licensor of Licensed +Software under this Agreement, then all valid licenses possessed by the Licensee +at such date of expiry, and which the Licensee has not notified for expiry, +shall be extended to be valid in perpetuity under the terms of this Agreement. + + +13. GOVERNING LAW AND LEGAL VENUE +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: + (i) this Agreement shall be construed and interpreted in accordance with + the laws of the State of California, USA, excluding its choice of law + provisions; + (ii) the United Nations Convention on Contracts for the International Sale + of Goods will not apply to this Agreement; and + (iii) any dispute, claim or controversy arising out of or relating to this + Agreement or the breach, termination, enforcement, interpretation or + validity thereof, including the determination of the scope or + applicability of this Agreement to arbitrate, shall be determined by + arbitration in San Francisco, USA, before one arbitrator. The + arbitration shall be administered by JAMS pursuant to JAMS' + Streamlined Arbitration Rules and Procedures. Judgment on the Award + may be entered in any court having jurisdiction. This Section shall + not preclude parties from seeking provisional remedies in aid of + arbitration from a court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., a Finnish +Company, then: + (i) this Agreement shall be construed and interpreted in accordance with + the laws of Finland, excluding its choice of law provisions; + (ii) the United Nations Convention on Contracts for the International Sale + of Goods will not apply to this Agreement; and + (iii) any disputes, controversy or claim arising out of or relating to this + Agreement, or the breach, termination or validity thereof shall be + finally settled by arbitration in accordance with the Arbitration + Rules of Finland Chamber of Commerce. The arbitration tribunal shall + consist of one (1), or if either Party so requires, of three (3), + arbitrators. The award shall be final and binding and enforceable in + any court of competent jurisdiction. The arbitration shall be held in + Helsinki, Finland and the process shall be conducted in the English + language. This Section shall not preclude parties from seeking + provisional remedies in aid of arbitration from a court of + appropriate jurisdiction. + + +14. GENERAL PROVISIONS + +14.1 No Assignment +Except in the case of a merger or sale of substantially all of its corporate +assets, Licensee shall not be entitled to assign or transfer all or any of its +rights, benefits and obligations under this Agreement without the prior written +consent of The Qt Company, which shall not be unreasonably withheld or delayed. +The Qt Company shall be entitled to freely assign or transfer any of its rights, +benefits or obligations under this Agreement. 14.2 No Third Party +Representations Licensee shall make no representations or warranties concerning +the Licensed Software on behalf of The Qt Company. Any representation or +warranty Licensee makes or purports to make on The Qt Company’s behalf shall be +void as to The Qt Company. 14.3 Surviving Sections Any terms and conditions +that by their nature or otherwise reasonably should survive termination of this +Agreement shall so be deemed to survive. Such sections include especially the +following: 1, 2, 6, 7, 9, 11, 12.4, 13 and 14. + +14.4 Entire Agreement +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order accepted by The Qt Company constitute the complete agreement +between the Parties and supersedes all prior or contemporaneous discussions, +representations, and proposals, written or oral, with respect to the subject +matters discussed herein. In the event of any conflict or inconsistency between +this Agreement and any Purchase Order, the terms of this Agreement will prevail +over the terms of the Purchase Order with respect to such conflict or +inconsistency. Parties specifically acknowledge and agree that this Agreement +prevails over any click-to-accept or similar agreements the Designated Users may +need to accept online upon download of the Licensed Software, as may be required +by The Qt Company’s applicable processes relating to Licensed Software. + +14.5 Modifications +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order (“Deviating Terms”) shall apply +unless The Qt Company has expressly agreed such Deviating Terms in writing. +Unless and to the extent expressly agreed by The Qt Company, any such Deviating +Terms shall be deemed void and with no legal effect. For clarity, delivery of +the Licensed Software following the receipt of the Purchase Order including +Deviating Terms shall not constitute acceptance of such Deviating Terms.” + +14.6 Force Majeure +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non-performance is due to an event of +act of God, terrorist attack or other similar unforeseeable catastrophic event +that prevents either Party for fulfilling its obligations under this Agreement +and which such Party cannot avoid or circumvent (“Force Majeure Event”). If the +Force Majeure Event results in a delay or non-performance of a Party for a +period of three (3) months or longer, then either Party shall have the right to +terminate this Agreement with immediate effect without any liability (except for +the obligations of payment arising prior to the event of Force Majeure) towards +the other Party. + +14.7 Notices +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special courier +during normal business hours on a business day to the addresses specified for +each Party on the signature page. Each communication and document made or +delivered by one Party to the other Party pursuant to this Agreement shall be in +the English language. + +14.8 Export Control +Licensee acknowledges that the Redistributables, as incorporated in Applications +or Devices, may be subject to export control restrictions under the applicable +laws of respective countries. Licensee shall fully comply with all applicable +export license restrictions and requirements as well as with all laws and +regulations relating to the Redistributables and exercise of licenses hereunder +and shall procure all necessary governmental authorizations, including without +limitation, all necessary licenses, approvals, permissions or consents, where +necessary for the re-exportation of the Redistributables, Applications and/or +Devices. + +14.9 No Implied License +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney’s fees and costs in connection with such action. + +14.11 Privacy +Licensee acknowledges and agrees that for the purpose of this Agreement, The Qt +Company may collect, use, transfer and disclose personal data pertaining to +Designated Users as well as any other employees and directors of the Licensee +and its Contractors relevant for carrying out the intent of this Agreement. Such +personal data may be collected from the Licensee or directly from the relevant +individuals. The Parties acknowledge that with regard to such personal data +processed hereunder, The Qt Company shall be regarded as the Data Controller +under the applicable Data Protection Legislation. The Qt Company shall process +any such personal data in accordance with its privacy policies and practices, +which will comply with all applicable requirements of the Data Protection +Legislation. + +14.12 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + + +APPENDICES + +This Agreement includes Appendix 1 or/and Appendix 8, and possibly one or more +of the appendices 3-5, depending on the product(s) purchased by the Licensee, +what is stated in the quote or invoice, and/or what is stated in the Licensee’s +License Certificate. + + +APPENDIX 1: LICENSED SOFTWARE + +1a. Licensed Software - Qt Toolkit + +Module Description +Qt Core Core non-graphical classes used by other modules. +Qt GUI Base classes for graphical user interface (GUI) + components. +Qt Multimedia Classes for audio, video and camera functionality. +Qt Multimedia Widgets Widget-based classes for implementing multimedia + functionality. +Qt Network Classes to make network programming easier and more + portable. +Qt QML Classes for QML and JavaScript languages. +Qt Quick A declarative framework for building highly dynamic + applications with custom user interfaces. +Qt Quick Controls 2 Provides lightweight QML types for creating + performant user interfaces for desktop, embedded, + and mobile devices. +Qt Quick Dialogs Types for creating and interacting with system + dialogs from a Qt Quick application. +Qt Quick Layouts Layouts are items that are used to arrange Qt Quick + 2 based items in the user interface. +Qt Quick Test A unit test framework for QML applications. +Qt SQL Classes for database integration using SQL. +Qt Test Classes for unit testing Qt applications and + libraries. +Qt Widgets Classes to extend Qt GUI with C++ widgets. +Active Qt Classes for applications which use ActiveX and COM +Qt 3D Functionality for near-realtime simulation systems + with support for 2D and 3D rendering. +Qt Android Extras Provides platform-specific APIs for Android. +Qt Bluetooth Provides access to Bluetooth hardware. +Qt Canvas 3D Enables OpenGL-like 3D drawing calls from Qt Quick + applications using JavaScript. +Qt Concurrent Classes for writing multi-threaded programs without + using low-level threading primitives. +Qt D-Bus Classes for inter-process communication over the + D-Bus protocol. +Qt Gamepad Enables Qt applications to support the use of gamepad + hardware. +Qt Graphical Effects Graphical effects for use with Qt Quick 2. +Qt Help Classes for integrating documentation into + applications, similar to Qt Assistant. +Qt Image Formats Plugins for additional image formats: TIFF, + MNG, TGA, WBMP. +Qt Location Displays map, navigation, and place content in a QML + application. +Qt Mac Extras Provides platform-specific APIs for macOS. +Qt Network Authorization Provides support for OAuth-based authorization to + online services. +Qt NFC Provides access to Near-Field communication (NFC) + hardware. +Qt Platform Headers Provides classes that encapsulate platform-specific + information. +Qt Positioning Provides access to position, satellite and area + monitoring classes. +Qt Print Support Classes to make printing easier and more portable. +Qt Purchasing Enables in-app purchase of products in Qt + applications. +Qt for Python Python bindings for Qt. +Qt Quick Controls Reusable Qt Quick based UI controls to create + classic desktop-style user interfaces. +Qt Quick Extras Provides a specialized set of controls that can + be used to build interfaces in Qt Quick. +Qt Quick Widgets Provides a C++ widget class for displaying a Qt + Quick user interface. +Qt SCXML Provides classes and tools for creating state + machines from SCXML files. +Qt Sensors Provides access to sensor hardware and motion + gesture recognition. +Qt Serial Bus Provides access to serial industrial bus interface. +Qt Serial Port Provides access to hardware and virtual serial ports. +Qt Speech Provides support for accessibility features such as + text-to-speech. +Qt SVG Classes for displaying the contents of SVG files. +Qt UI Tools Classes for loading QWidget based forms created in + Qt Designer dynamically, at runtime. +Qt WebChannel Provides access to QObject or QML objects from HTML + clients for seamless integration of Qt applications + with HTML/JavaScript clients. +Qt WebEngine Classes and functions for embedding web content in + applications using the Chromium browser project. +Qt WebSockets Provides WebSocket communication. +Qt WebView Displays web content in a QML application by using + APIs native to the platform. +Qt Windows Extras Provides platform-specific APIs for Windows. +Qt X11 Extras Provides platform-specific APIs for X11. +Qt XML C++ implementations of SAX and DOM. +Qt XML Patterns Support for XPath, XQuery, XSLT and XML schema + validation. +Qt Wayland Compositor Provides a framework to develop a Wayland compositor. +Qt Charts UI Components for displaying charts. +Qt Data Visualization UI Components for creating 3D data visualizations. +Qt Virtual Keyboard A framework for implementing different input methods + as well as a QML virtual keyboard. + + +1b. Licenses software – Embedded software development libraries + +Module Description +Boot 2 Qt stack Yocto based Embedded Linux stack for selected + target hardware. +Qt OTA Client-side capability for device image updates Over + The Air. +Device Utilities Collection of API’s to manage the device; E.g. + display, WiFi and Bluetooth settings. +Qt Debugging Bridge (QDB) Daemon Enables host-target deployment, debugging, + profiling and other features over USB. Up to developer + to decide if this is left in the final solution. + + +1c. Licensed Software - Qt Tools/Applications + +Tool Description +Qt Creator The integrated development environment for Qt. +Qt Designer Qt tool for designing and building graphical user + interfaces. +Qt Linguist Tool used to add translations to Qt applications. +Qt Assistant Tool for viewing online documentation in Qt + help-file format. +Qmake Utility tool used to automate the generation of make + files. +uic User interface compiler for the Qt GUI toolkit. +rcc Resource compiler used for embedding resources into + Qt applications. +lupdate Tool that finds the translatable strings in the + specified source, header and Qt Designer interface + files, and produces or updates translation files. +lrelease Tool that produces translation files in the compact + binary format used by localized Qt applications. +qlalr Qt parser generator tool. +qdoc Configurable documentation generation tool. +qmlscene QML launcher tool. +qmlviewer QML launcher tool. + + +1d. Licenses software –Qt Tools/Applications specific to embedded software +development + +Tool Description +Target toolchains Cross compilation toolchains for supported target + devices and operating systems. +Qt Debugging Bridge (QDB) Enables deployment, debugging, profiling and other +Host Tools features over USB from development host PC to target + device. +qtconfig-gui Qt Lite Configurator tool graphical interface. +Qt Emulator Qt Emulator + + +2. Parts of the Licensed Software that are permitted for distribution in +object-code form only (“Redistributables”) under this Agreement: + +2a. Qt for Application Development + + - The Licensed Software's Qt Toolkit libraries defined in 1a + - The Licensed Software's installer framework + +2b. Qt for Device Creation + + - Qt for Application Development Redistributables defined in 2a + - The Licensed Software’s Embedded software development libraries defined + in 1b + +2c. Qt 3D Studio + +- The Licensed Software’s Qt 3D Studio Runtime (“Qt53DStudioRuntime2”) + + +APPENDIX 3: ADDITIONS TO LICENSED SOFTWARE + +1. Licensed Software + +In addition to what is provided under the definition of the Licensed Software, +Parties agree that Licensed Software shall also include the following additional +software products of The Qt Company if included in the quote / invoice: + +Additional software product Description +Qt for Automation A collection of software components and + libraries targeted for the development of + automation systems. +Qt Safe Renderer Provides a UI rendering component that can be + used to render safety- critical items as well + as documentation and certification artifacts. +Qt Application Manager Daemon, that helps to create embedded Linux + systems that have a highly complex UI setup. +GammaRay A software introspection tool for Qt + applications. + + +2. Parts of the Licensed Software that are permitted for distribution in +object-code form only (“Redistributables”) under this Agreement: + + - Qt for Automation The Licensed Software’s Qt for Automation + libraries defined in 1 + - Qt Safe Renderer The Licensed Software’s Qt Safe Renderer + libraries defined in 1 + - Qt Application Manager The Licensed Software’s Qt Application Manager + libraries defined in 1 + +All the above is considered as Redistributables and subject to applicable +provisions and limitations including but not limited to what is defined in +section 3. + + +APPENDIX 4: SMALL BUSINESS AND START-UP APPENDIX + +The provisions of this Appendix 4 are applicable for Start-up Companies and for +the Evaluation Term. + +For the purpose of this Appendix 4, the following additional definitions shall +be applicable: +“Trial Term” shall mean a period of twelve (12) months. + +“Start-up Company” means a company with a maximum annual revenue, including +funding, equivalent to 100,000 USD (in applicable currency) during a respective +calendar year, as evidenced by duly audited records of the Licensee and approved +by The Qt Company. + +During the Trial Term, Section 3 shall apply with following modifications +(“Trial Term Modifications”): + + - Licenses granted under Sections 3.1 and 3.2 shall be free of any charge. + For clarity, License for distribution of Devices pursuant to Section 3.3 is + subject to applicable License Fee for necessary Distribution Licenses; + - Development License under Section 3.1 is limited to a maximum of three (3) + Designated Users; and + - Support is available subject to availability, as judged by The Qt Company + at its free and absolute discretion, provided that support will be limited + to a maximum of ten (10) tickets during the Trial Term. + +Upon expiry of the Trial Term: + + a) This Appendix 4 is terminated, Trial Term Modifications cease to remain in + force, Licensee’s Development Licenses shall be automatically converted + into licenses subject to a License Fee (in the amount specified in the + quote or in Appendix 2 and payable with a 30-day payment term) and + Licensee’s rights and obligations under this Agreement shall continue to + remain in force under the standard provisions of the Agreement, unless the + Licensee notifies The Qt Company in writing no less than ninety (90) days + before such expiry date that Licensee does not agree to such continuance, + in which event the Agreement, and all rights of the Licensee thereunder, + shall expire; provided however that + b) in the event the Licensee still qualifies as a Start-up Company, the + Licensee has an option (“Option”), instead of what is stated in item a) + above, to extend the Trial Term renewal is limited to one time and total + duration of Trial Terms thus to 24 months after the effective date. + Licensee shall notify The Qt Company in writing no less than ninety (90) + days before the expiry date, if Licensee wish to exercise the Option. + + +APPENDIX 5: NON-COMMERCIAL USE APPENDIX + +The provisions of this Appendix 5 are applicable for non-commercial use of the +Licensed Software by the Licensee. For the purpose of this Appendix 5, the +following additional definitions (replacing the relevant definition of the +Agreement, where applicable) shall be applicable: + +“Demo Units” shall mean + (i) hardware development platform, which incorporates the Licensed + Software along with Licensee’s software and/or hardware, and + (ii) prototype versions of Applications or Devices. + +“Designated User(s)” shall mean the employees and students of the Licensee. + +“Licensee Products” shall mean Applications and/or Devices. + +“Permitted Purpose” shall mean + (i) Licensee’s internal evaluation and testing of Licensed Software, + (ii) building Demo Units as well as + (iii) educational use. + +“Term” shall mean a period of twelve (12) months or any such other period as +may be agreed between the Parties. + +For the purpose of this Appendix 5, the following changes shall be agreed with +respect to relevant Sections of the Agreement: + I. Recital (A) shall be replaced in its entirety to read as follows: “(A) + Licensee wishes to use the Licensed Software for the Permitted Purpose.” + II. Section 3.1 shall be replaced in its entirety to read as follows: “The + Qt Company grants to Licensee a personal, non-exclusive, + non-transferable, revocable, royalty-free license, valid for the Term, + to use, modify and copy the Licensed Software solely for the Permitted + Purpose. Licensee may install copies of the Licensed Software on an + unlimited number of computers provided that only Designated Users may + use the Licensed Software. Licensee may demonstrate the Demo Units, + provided that such demonstrations must be conducted by Licensee, and + the Demo Units must remain in Licensee’s possession and under + Licensee’s control at all times. For clarity, this Agreement does not + (i) entitle Licensee to use Licensed Software to create Applications + or Devices (other than prototypes thereof) or + (ii) carry any distribution rights to Licensee, but such rights are + subject to and conditional upon conclusion of a separate + license agreement with The Qt Company.” + III. Sections 3.2, 3.3, 8 and 10 shall be deleted. + IV. Section 3.4 shall be replaced in its entirety to read as follows: + “Licensee shall not: + - remove or alter any copyright, trademark or other proprietary + rights notice contained in any portion of the Licensed Software; + - transfer, publish, sublicense, disclose, display or otherwise make + the Licensed Software available to any third party (except that + Licensee may demonstrate the Demo Units pursuant to Section 3.1); + - in any way combine, incorporate or integrate Licensed Software + with, or use Licensed Software for creation of, any software + created with or incorporating Open Source Qt; + - Licensee shall cause all Designated Users who make use of the + licenses granted under this Agreement, to be contractually bound to + comply with the relevant terms of this Agreement and not to use the + Licensed Software beyond the terms hereof. Licensee shall be + responsible for any and all actions and omissions of its Designated + Users relating to the Licensed Software and use thereof. Any use + of Licensed Software beyond the provisions of this Agreement is + strictly prohibited and requires an additional license from The Qt + Company.” + V. Section 12 shall be replaced in its entirety to read as follows: “This + Agreement shall enter into force upon due acceptance by both Parties + and remain in force for the Term, unless and until terminated pursuant + to the terms of Section 12. Upon termination of the Agreement, Licensee + shall cease using the Licensed Software. All other copies of Licensed + Software in the possession or control of Licensee must be erased or + destroyed. An officer of Licensee must, upon request, promptly deliver + to The Qt Company a written confirmation that this has occurred.” + +Except for the modifications specified above, this Appendix carries no change to +the terms of the Agreement, which shall remain in full force. + + +APPENDIX 8: QT FOR DEVICE CREATION MCU APPENDIX + +This Appendix 8 shall be applicable in case the Licensee and/or respective +Designated User have purchased Qt for Device Creation MCU, either as an +add-on or standalone package. In case Qt for Device Creation MCU is purchased +as an addition to Qt for Device Creation, this appendix is an addition to +Appendix 1. In any other case, this appendix replaces Appendix 1. + +1a. Licensed Software - Qt Toolkit + +Module Description +Qt Quick Controls 2 Provides lightweight QML types for creating + performant user interfaces for desktop, embedded, + and mobile devices. + + +1b. Licensed software – Embedded software development libraries + +Module Description +Qt Quick Ultralite Qt Quick Ultralite (QUL) rendering engine and sample + source codes. +Qt Quick Ultralite Platform adaptations including OS support that allow +Platform Adaptations applications on QUL to run on microcontrollers + + +1c. Licensed Software - Qt Tools/Applications + +Tool Description +Qt Creator The integrated development environment for Qt. +Qt Designer Qt tool for designing and building graphical user + interfaces. +Qt Linguist Tool used to add translations to Qt applications. +Qt Assistant Tool for viewing online documentation in Qt help-file + format. +lupdate Tool that finds the translatable strings in the + specified source, header and Qt Designer interface + files, and produces or updates translation files. +lrelease Tool that produces translation files in the compact + binary format used by localized Qt applications. + + +1d. Licensed software – Qt Tools/Applications specific to embedded software +development + +Tool Description +Target toolchains Cross compilation toolchains for supported target + devices and operating systems. +qmlinterfaceextractor Tool to generate QML from header file. +qml2cpp Tool to convert QML to C++ files. +fontcompiler Tool to compile font meta data and True Type fonts. + + +2. Parts of the Licensed Software that are permitted for distribution in +object-code form only (“Redistributables”) under this Agreement: + + - The Licensed Software’s Embedded software development libraries + defined in 1b. diff --git a/LICENSE.QT-LICENSE-AGREEMENT-4.2 b/LICENSE.QT-LICENSE-AGREEMENT-4.2 deleted file mode 100644 index 7be8fb5d45..0000000000 --- a/LICENSE.QT-LICENSE-AGREEMENT-4.2 +++ /dev/null @@ -1,1285 +0,0 @@ -QT LICENSE AGREEMENT Agreement version 4.2 - -This Qt License Agreement (“Agreement”) is a legal agreement for the licensing -of Licensed Software (as defined below) between The Qt Company (as defined -below) and the Licensee who has accepted the terms of this Agreement by -downloading or using the Licensed Software and/or as defined herein: - -Capitalized terms used herein are defined in Section 1. - -WHEREAS: - (A) Licensee wishes to use the Licensed Software for the purpose of - developing and distributing Applications and/or Devices (each as - defined below); and - (B) The Qt Company is willing to grant the Licensee a right to use - Licensed Software for such a purpose pursuant to term and conditions - of this Agreement. - -NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: - - -1. DEFINITIONS - -“Affiliate” of a Party shall mean an entity (i) which is directly -or indirectly controlling such Party; (ii) which is under the same direct or -indirect ownership or control as such Party; or (iii) which is directly or -indirectly owned or controlled by such Party. For these purposes, an entity -shall be treated as being controlled by another if that other entity has fifty -percent (50 %) or more of the votes in such entity, is able to direct its -affairs and/or to control the composition of its board of directors or -equivalent body. - -“Add-on Products” shall mean The Qt Company’s specific add-on software products -(for example Qt Safe Renderer, Qt for Automation, Qt Application Manager), which -are not licensed as part of The Qt Company’s standard offering, but shall be -included into the scope of Licensed Software only if so specifically agreed -between the Parties. - -“Applications” shall mean Licensee's software products created using the -Licensed Software, which may include the Redistributables, or part thereof. - -“Contractor(s)” shall mean third party consultants, distributors and contractors -performing services to the Licensee under applicable contractual arrangement. - -“Customer(s)” shall mean Licensee’s end users to whom Licensee, directly or -indirectly, distributes copies of the Redistributables. - -“Data Protection Legislation” shall mean the General Data Protection Regulation -(EU 2016/679) (GDPR) and any national implementing laws, regulations and -secondary legislation, as may be amended or updated from time to time, as well -as any other data protection laws or regulations applicable in relevant -territory. - -“Deployment Platforms” shall mean operating systems specified in the License -Certificate, on which the Redistributables can be distributed pursuant to the -terms and conditions of this Agreement. - -“Designated User(s)” shall mean the employee(s) of Licensee or Licensee’s -Affiliates acting within the scope of their employment or Licensee's Contractors -acting within the scope of their services for Licensee and on behalf of -Licensee. Designated Users shall be named in the License Certificate. - -“Development License” shall mean the license needed by the Licensee for each -Designated User to use the Licensed Software under the license grant described -in Section 3.1 of this Agreement. Development Licenses are available separately -for Qt for Application Development and Qt for Device Creation products, each -product having its designated scope and purpose of use. Distribution Licenses -are always connected to Qt for Device Creation product only. - -“Development Platforms” shall mean those operating systems specified in the -License Certificate, in which the Licensed Software can be used under the -Development License, but not distributed in any form or used for any other -purpose. - -“Devices” shall mean hardware devices or products that 1) are manufactured -and/or distributed by the Licensee or its Affiliates or Contractors, and (2)(i) -incorporate or integrate the Redistributables or parts thereof; or (ii) where -the main user interface or substantial functionality of such unit , when used by -a Customer, is provided by Application(s) or otherwise depends on the Licensed -Software, regardless of whether the Redistributables are distributed together -with the hardware or not. Devices covered with this Agreement shall be specified -in Appendix 2 or in a quote. - -“Distribution License(s)” shall mean the license required for any kind of sale, -trade, exchange, loan, lease, rental or other distribution by or on behalf of -Licensee to a third party of Redistributables in connection with Devices -pursuant to license grant described in Section 3.3 of this Agreement. - -“Distribution License Packs” shall mean set of prepaid Distribution Licenses for -distribution of Redistributables, as defined in The Qt Company’s standard price -list, quote, Purchase Order confirmation or in an appendix hereto, as the case -may be. - -“Intellectual Property Rights” shall mean patents (including utility models), -design patents, and designs (whether or not capable of registration), chip -topography rights and other like protection, copyrights, trademarks, service -marks, trade names, logos or other words or symbols and any other form of -statutory protection of any kind and applications for any of the foregoing as -well as any trade secrets. - -“License Certificate” shall mean a certificate generated by The Qt Company for -each Designated User respectively upon them downloading the Licensed Software, -which will be available under respective Designated User’s Qt Account at -account.qt.io. License Certificates will specify the Designated User, the -Development Platforms, Deployment Platforms and the License Term. Such terms are -considered part of the licenses granted hereunder and shall be updated from time -to time to reflect any agreed changes to the foregoing terms relating to -Designated User’s rights to the Licensed Software. - -“License Fee” shall mean the fee charged to the Licensee for rights granted -under the terms of this Agreement. - -“License Term” shall mean the agreed validity period of the Development License -of the respective Designated User, during which time the Designated User is -entitled to use the Licensed Software, as set forth in the respective License -Certificate. - -“Licensed Software” shall mean either - (i) Qt for Application Development or - (ii) Qt for Device Creation, and/or - (iii) Qt 3D Studio, and/or - (iv) Qt Design Studio, and/or - (v) selected Add-on Products, if any, - -depending on which product(s) the Licensee has purchased under this Agreement, -as well as corresponding online or electronic documentation, associated media -and printed materials, including the source code, example programs and the -documentation, licensed to the Licensee under this Agreement. Licensed Software -does not include Third Party Software (as defined in Section 4) or Open Source -Qt. The Qt Company may, in the course of its development activities, at its free -and absolute discretion and without any obligation to send or publish any -notifications to the Licensee or in general, make changes, additions or -deletions in the components and functionalities of the Licensed Software, -provided that no such changes, additions or deletions will affect the already -released version of the Licensed Software, but only upcoming version(s). - -“Licensee” shall mean the individual or legal entity that is party to this -Agreement, as identified on the signature page hereof. - -“Licensee’s Records” shall mean books and records that are likely to contain -information bearing on Licensee’s compliance with this Agreement, Licensee’s use -of Open Source Qt and/or the payments due to The Qt Company under this -Agreement, including, but not limited to user information, assembly logs, sales -records and distribution records. - -“Modified Software” shall have the meaning as set forth in Section 2.3. - -“Online Services” shall mean any services or access to systems made available by -The Qt Company to the Licensee over the Internet relating to the Licensed -Software or for the purpose of use by the Licensee of the Licensed Software or -Support. Use of any such Online Services is discretionary for the Licensee and -some of them may be subject to additional fees. - -“Open Source Qt” shall mean the non-commercial Qt computer software products, -licensed under the terms of the GNU Lesser General Public License, version 2.1 -or later (“LGPL”) or the GNU General Public License, version 2.0 or later -(“GPL”). For clarity, Open Source Qt shall not be provided nor governed under -this Agreement. - -”Party” or “Parties” shall mean Licensee and/or The Qt Company. - -“Permitted Combination” shall have the meaning as set forth in Section -3.4(viii). - -“Pre-Release Code” shall have the meaning as set forth in Section 4. - -“Prohibited Combination” shall mean any means to (i) use, combine, incorporate, -link or integrate Licensed Software with any software created with or -incorporating Open Source Qt, (ii) use Licensed Software for creation of any -software created with or incorporating Open Source Qt, or (iii) incorporate or -integrate Applications into a hardware device or product other than a Device. - -“Qt 3D Studio” shall mean all versions of The Qt Company’s Qt 3D Studio, a 3D -user interface design and development environment for rapid designing and -prototyping of animated user interfaces. - -“Qt Design Studio” shall mean all versions of The Qt Company’s Qt Design Studio -tool, a user interface design and development environment for rapid designing -and prototyping of animated user interfaces. - -“Qt for Application Development” shall mean The Qt Company’s productized -offering, which consist of all versions of - (i) Qt Toolkit, and - (ii) Qt Tools/Applications. - -“Qt for Device Creation” shall mean The Qt Company’s productized offering, which -consist of all versions of - (i) Qt for Application Development, and - (ii) Software components specific to embedded software development as set - forth in Appendix 1, Sections 1b and 1d. - -“Qt Toolkit” shall mean the modules defined in Appendix 1, Section 1a. - -“Qt Tools/Applications” shall mean the tools defined in Appendix 1, Section 1c. - -"Redistributables" shall mean the portions of the Licensed Software set forth in -Appendix 1, Section 2 that may be distributed pursuant to the terms of this -Agreement in object code form only, including any relevant documentation. Where -relevant, any reference to Licensed Software in this Agreement shall include and -refer also to Redistributables. - -“Renewal Term” shall mean an extension of previous License Term as agreed -between the Parties. - -“Submitted Modified Software” shall have the meaning as set forth in Section -2.3. - -“Support” shall mean standard developer support that is provided by The Qt -Company to assist Designated Users in using the Licensed Software in accordance -with The Qt Company’s standard support terms available at -https://www.qt.io/terms-conditions/ and as further defined in Section 8 -hereunder. - -“Taxes” shall have the meaning set forth in Section 10.5. - -“Term” shall have the meaning set forth in Section 12. - -“The Qt Company” shall mean: - (i) in the event Licensee is an individual residing in the United States - or a legal entity incorporated in the United States or having its - headquarters in the United States, The Qt Company Inc., a - Delaware corporation with its office at 2350 Mission College Blvd., - Suite 1020, Santa Clara, CA 95054, USA.; or - (ii) in the event the Licensee is an individual residing outside of the - United States or a legal entity incorporated outside of the United - States or having its registered office outside of the United States, - The Qt Company Ltd., a Finnish company with its registered office at - Bertel Jungin aukio D3A, 02600 Espoo, Finland. - -"Third Party Software " shall have the meaning set forth in Section 4. - -“Updates” shall mean a release or version of the Licensed Software containing -bug fixes, error corrections and other changes that are generally made available -to users of the Licensed Software that have contracted for Support. Updates are -generally depicted as a change to the digits following the decimal in the -Licensed Software version number. The Qt Company shall make Updates available to -the Licensee under the Support. Updates shall be considered as part of the -Licensed Software hereunder. - -“Upgrades” shall mean a release or version of the Licensed Software containing -enhancements and new features and are generally depicted as a change to the -first digit of the Licensed Software version number. In the event Upgrades are -provided to the Licensee under this Agreement, they shall be considered as part -of the Licensed Software hereunder. - - -2. OWNERSHIP - -2.1 Ownership of The Qt Company -The Licensed Software is protected by copyright laws and international copyright -treaties, as well as other intellectual property laws and treaties. The Licensed -Software is licensed, not sold. All of The Qt Company's Intellectual Property -Rights are and shall remain the exclusive property of The Qt Company or its -licensors respectively. - -2.2 Ownership of Licensee -All the Licensee's Intellectual Property Rights are and shall remain the -exclusive property of the Licensee or its licensors respectively. All -Intellectual Property Rights to the Modified Software, Applications and Devices -shall remain with the Licensee and no rights thereto shall be granted by the -Licensee to The Qt Company under this Agreement (except as set forth in Section -2.3 below). - -2.3 Modified Software -Licensee may create bug-fixes, error corrections, patches or modifications to -the Licensed Software (“Modified Software”). Such Modified Software may break -the source or binary compatibility with the Licensed Software (including without -limitation through changing the application programming interfaces ("API") or by -adding, changing or deleting any variable, method, or class signature in the -Licensed Software and/or any inter-process protocols, services or standards in -the Licensed Software libraries). To the extent that Licensee’s Modified -Software so breaks source or binary compatibility with the Licensed Software, -Licensee acknowledges that The Qt Company's ability to provide Support may be -prevented or limited and Licensee's ability to make use of Updates may be -restricted. - -Licensee may, at its sole and absolute discretion, choose to submit Modified -Software to The Qt Company (“Submitted Modified Software”) in connection with -Licensee’s Support request, service request or otherwise. In the event Licensee -does so, then, Licensee hereby grants The Qt Company a sublicensable, -assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and -fully paid-up license, under all of Licensee’s Intellectual Property Rights, to -reproduce, adapt, translate, modify, and prepare derivative works of, publicly -display, publicly perform, sublicense, make available and distribute such -Submitted Modified Software as The Qt Company sees fit at its free and absolute -discretion. - - -3. LICENSES GRANTED - -3.1 Development with Licensed Software -Subject to the terms of this Agreement, The Qt Company grants to Licensee a -worldwide, non- exclusive, non-transferable license, valid for the License Term, -to use, modify and copy the Licensed Software by Designated Users on the -Development Platforms for the sole purposes of designing, developing, -demonstrating and testing Application(s) and/or Devices, and to provide thereto -related support and other related services to end-user Customers. - -Licensee may install copies of the Licensed Software on five (5) computers per -Designated User, provided that only the Designated Users who have a valid -Development License may use the Licensed Software. - -Licensee may at any time designate another Designated User to replace a -then-current Designated User by notifying The Qt Company in writing, provided -that any Designated User may be replaced only once during any six-month period. - -Upon expiry of the initially agreed License Term, the respective License Terms -shall be automatically extended to one or more Renewal Term(s), unless and until -either Party notifies the other Party in writing that it does not wish to -continue the License Term, such notification to be provided to the other Party -no less than ninety (90) days before expiry of the respective License Term. -Unless otherwise agreed between the Parties, Renewal Term shall be of equal -length with the initial License Term. - -Any such Renewal Term shall be subject to License Fees agreed between the -Parties or, if no advance agreement exists, subject to The Qt Company’s standard -pricing applicable at the commencement date of any such Renewal Term. - -Any price or other term specified for a Renewal Term shall be valid only for the -specified time. The Qt Company may request the Licensee to place a purchase -order corresponding to a quote by The Qt Company for the relevant Renewal Term. - -In the event Licensee does not prevent auto-renewal pursuant the above, but a -Renewal Term is nevertheless not duly ordered within 30 days from the date of -the respective quote from The Qt Company and/or the respective License Fee paid -by due date specified in The Qt Company’s respective invoice, The Qt Company -shall apply a reinstatement fee equal to ten percent (10 %) of the total value -of the License Fees of the Development Licenses for the expired term to be added -to the License Fee of the respective Renewal Term. - -In the event Licensee chooses not to renew a Development License for a Renewal -Term by notifying The Qt Company thereof no less than ninety (90) days before -expiry of the respective License Term, Licensee may still reinstate such expired -Development Licenses for a Renewal Term subject to applicable renewal Term -License Fees until thirty (30) days from the expiry of the initially agreed -License Term or preceding Renewal Term. After such thirty (30) day period a -Development License shall be subject to applicable License Fees for a new -Development License and not any Renewal Term License Fees. - -3.2 Distribution of Applications -Subject to the terms of this Agreement, The Qt Company grants to Licensee a -worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to -this Agreement) right and license, valid for the Term, to - (i) distribute, by itself or through its Contractors, Redistributables as - installed, incorporated or integrated into Applications for execution - on the Deployment Platforms, and - (ii) grant sublicenses to Redistributables, as distributed hereunder, for - Customers solely for Customer’s internal use and to the extent - necessary in order for the Customers to use the Applications for their - respective intended purposes. - -Right to distribute the Redistributables as part of an Application as provided -herein is not royalty- bearing but is conditional upon the Licensee not having -any unpaid License Fees for Development Licenses owed to The Qt Company at the -time of distribution of any Redistributables to Customers. - -3.3 Distribution of Devices -Subject to the terms of this Agreement, The Qt Company grants to Licensee a -worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to -this Agreement) right and license, valid for the Term, to - (i) distribute, by itself or through one or more tiers of Contractors, - Redistributables as installed, incorporated or integrated, or intended - to be installed, incorporated or integrated into Devices for execution - on the Deployment Platforms, and - (ii) grant sublicenses to Redistributables, as distributed hereunder, for - Customers solely for Customer’s internal use and to the extent - necessary in order for the Customers to use the Devices for their - respective intended purposes. - -Right to distribute the Redistributables with Devices as provided herein is -conditional upon the Licensee (i) not having any unpaid License Fees for -Development Licenses owed to The Qt Company, and (ii) having purchased and paid -corresponding Distribution Licenses at the time of distribution of any -Redistributables to Customers. - -3.4 Further Requirements -The licenses granted above in this Section 3 by The Qt Company to Licensee are -conditional and subject to Licensee's compliance with the following terms: - (i) Licensee shall not remove or alter any copyright, trademark or other - proprietary rights notice(s) contained in any portion of the Licensed - Software; - (ii) Applications must add primary and substantial functionality to the - Licensed Software so as not to compete with the Licensed Software; - (iii) Applications may not pass on functionality which in any way makes it - possible for others to create software with the Licensed Software; - provided however that Licensee may use the Licensed Software's - scripting and QML ("Qt Quick") functionality solely in order to enable - scripting, themes and styles that augment the functionality and - appearance of the Application(s) without adding primary and - substantial functionality to the Application(s); - (iv) Licensee shall not use Licensed Software in any manner or for any - purpose that infringes, misappropriates or otherwise violates any - Intellectual property or right of any third party, or that violates - any applicable law; - (v) Licensee shall not use The Qt Company's or any of its suppliers' - names, logos, or trademarks to market Applications, except that - Licensee may use “Built with Qt” logo to indicate that Application(s) - was developed using the Licensed Software; - (vi) Licensee shall not distribute, sublicense or disclose source code of - Licensed Software to any third party (provided however that Licensee - may appoint employee(s) of Contractors as Designated Users to use - Licensed Software pursuant to this Agreement). Such right may be - available for the Licensee subject to a separate software development - kit (“SDK”) license agreement to be concluded with The Qt Company; - (vii) Licensee shall not grant the Customers a right to (i) make copies of - the Redistributables except when and to the extent required to use the - Applications and/or Devices for their intended purpose, (ii) modify - the Redistributables or create derivative works thereof, (iii) - decompile, disassemble or otherwise reverse engineer Redistributables, - or (iv) redistribute any copy or portion of the Redistributables to - any third party, except as part of the onward sale of the Device on - which the Redistributables are installed; - (viii) Licensee shall not and shall cause that its Affiliates or Contractors - shall not use Licensed Software in any Prohibited Combination, unless - Licensee has received an advance written permission from The Qt - Company to do so. Absent such written permission, any and all - distribution by the Licensee during the Term of a hardware device or - product a) which incorporate or integrate any part of Licensed - Software or Open Source Qt; or b) where the main user interface or - substantial functionality is provided by software built with - Licensed Software or Open Source Qt or otherwise depends on the - Licensed Software or Open Source Qt, shall be considered to be - Device distribution under this Agreement and shall be dependent on - Licensee’s compliance thereof (including but not limited to - obligation to pay applicable License Fees for such distribution). - Notwithstanding what is provided above in this sub-section (viii), - Licensee is entitled to use and combine Qt 3D Studio and/or Qt - Design Studio with Open Source Qt (“Permitted Combination”) for - its internal evaluation purposes, provided that Licensee shall in no - way transfer, publish, disclose, display or otherwise make available - any software or work resulting from such Permitted Combination; - (ix) Licensee shall cause all of its Affiliates and Contractors entitled - to make use of the licenses granted under this Agreement, to be - contractually bound to comply with the relevant terms of this - Agreement and not to use the Licensed Software beyond the terms - hereof and for any purposes other than operating within the scope of - their services for Licensee. Licensee shall be responsible for any - and all actions and omissions of its Affiliates and Contractors - relating to the Licensed Software and use thereof (including but not - limited to payment of all applicable License Fees); - (x) Except when and to the extent explicitly provided in this Section 3, - Licensee shall not transfer, publish, disclose, display or otherwise - make available the Licensed Software; and - (xi) Licensee shall not attempt or enlist a third party to conduct or - attempt to conduct any of the above. - -Above terms shall not be applicable if and to the extent they conflict with any -mandatory provisions of any applicable laws. Any use of Licensed Software -beyond the provisions of this Agreement is strictly prohibited and requires an -additional license from The Qt Company. - - -4. THIRD PARTY SOFTWARE -The Licensed Software may provide links to third party libraries or code -(collectively "Third Party Software") to implement various functions. Third -Party Software does not comprise part of the Licensed Software. In some cases, -access to Third Party Software may be included with the Licensed Software. Such -Third Party Software will be listed in the ".../src/3rdparty" source tree -delivered with the Licensed Software or documented in the Licensed Software, as -such may be amended from time to time. Licensee acknowledges that use or -distribution of Third Party Software is in all respects subject to applicable -license terms of applicable third party right holders. - - -5. PRE-RELEASE CODE -The Licensed Software may contain pre-release code and functionality, or sample -code marked or otherwise stated with appropriate designation such as “Technology -Preview”, “Alpha”, “Beta”, “Sample” etc. (“Pre-Release Code”). - -Such Pre-Release Code may be present complimentary for the Licensee, in order to -provide experimental support or information for new platforms or preliminary -versions of one or more new functionalities or for other similar reasons. The -Pre-Release Code may not be at the level of performance and compatibility of a -final, generally available, product offering. The Pre-Release Code may not -operate correctly, may contain errors and may be substantially modified by The -Qt Company prior to the first commercial product release, if any. The Qt Company -is under no obligation to make Pre-Release Code commercially available, or -provide any Support or Updates relating thereto. The Qt Company assumes no -liability whatsoever regarding any Pre-Release Code, but any use thereof is -exclusively at Licensee’s own risk and expense. - -For clarity, unless Licensed Software specifies different license terms for the -respective Pre- Release Code, the Licensee is entitled to use such pre-release -code pursuant to Section 3, just like other Licensed Software, provided however -that in the event Add-on Products are included and available as such Pre-Release -Code, Licensee’s right to use such Add-on Products is nevertheless subject to -and conditional upon conclusion of separate agreement with The Qt Company. - - -6. LIMITED WARRANTY AND WARRANTY DISCLAIMER -The Qt Company hereby represents and warrants that it has the power and -authority to grant the rights and licenses granted to Licensee under this -Agreement. Except as set forth above, the Licensed Software is licensed to -Licensee "as is" and Licensee’s exclusive remedy and The Qt Company’s entire -liability for errors in the Licensed Software shall be limited, at The Qt -Company’s option, to correction of the error, replacement of the Licensed -Software or return of the applicable fees paid for the defective Licensed -Software for the time period during which the License is not able to utilize the -Licensed Software under the terms of this Agreement. - -TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF -ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER -WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND -NON-INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT -WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE’S REQUIREMENTS OR THAT -IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE -UNINTERRUPTED. - - -7. INDEMNIFICATION AND LIMITATION OF LIABILITY - -7.1 Limitation of Liability -EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) -BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO -EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, -LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, -CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, -HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. - -EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) -BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO -EVENT SHALL EITHER PARTY’S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED -THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM LICENSEE -DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT -RESULTING IN SUCH LIABILITY. THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE -RISKS UNDER THIS AGREEMENT BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES -HAVE RELIED UPON THE LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO -ENTER INTO THIS AGREEMENT. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS -AGREEMENT, LICENSEE SHALL ALWAYS BE LIABLE TO PAY THE APPLICABLE LICENSE FEES -CORRESPONDING TO ITS ACTUAL USE OF LICENSED SOFTWARE. - - -8. SUPPORT, UPDATES AND ONLINE SERVICES -Upon due payment of the agreed License Fees the Licensee will be eligible to -receive Support and Updates and to use the Online Services during the License -Term, provided, however, that in the event the License Term is longer than 36 -months, the initial payment includes Support for only the first 12 months, -unless the Parties specifically otherwise agree. - -Unless otherwise decided by The Company at its free and absolute discretion, -Upgrades will not be included in the Support but may be available subject to -additional fees. From time to time The Qt Company may change the Support terms, -provided that during the respective ongoing License Term the level of Support -provided by The Qt Company may not be reduced without the consent of the -Licensee. Unless otherwise agreed, The Qt Company shall not be responsible for -providing any service or support to Customers. - - -9. CONFIDENTIALITY -Each Party acknowledges that during the Term of this Agreement each Party may -receive information about the other Party's business, business methods, business -plans, customers, business relations, technology, and other information, -including the terms of this Agreement, that is confidential and of great value -to the other Party, and the value of which would be significantly reduced if -disclosed to third parties (“Confidential Information”). Accordingly, when a -Party (the “Receiving Party”) receives Confidential Information from the other -Party (the “Disclosing Party”), the Receiving Party shall only disclose such -information to employees and Contractors on a need to know basis, and shall -cause its employees and employees of its Affiliates to: (i) maintain any and all -Confidential Information in confidence; (ii) not disclose the Confidential -Information to a third party without the Disclosing Party's prior written -approval; and (iii) not, directly or indirectly, use the Confidential -Information for any purpose other than for exercising its rights and fulfilling -its responsibilities pursuant to this Agreement. Each Party shall take -reasonable measures to protect the Confidential Information of the other Party, -which measures shall not be less than the measures taken by such Party to -protect its own confidential and proprietary information. Obligation of -confidentiality shall not apply to information that (i) is or becomes generally -known to the public through no act or omission of the Receiving Party; (ii) was -in the Receiving Party's lawful possession prior to the disclosure hereunder and -was not subject to limitations on disclosure or use; (iii) is developed -independently by employees or Contractors of the Receiving Party or other -persons working for the Receiving Party who have not had access to the -Confidential Information of the Disclosing Party, as proven by the written -records of the Receiving Party; (iv) is lawfully disclosed to the Receiving -Party without restrictions, by a third party not under an obligation of -confidentiality; or (v) the Receiving Party is legally compelled to disclose, in -which case the Receiving Party shall notify the Disclosing Party of such -compelled disclosure and assert the privileged and confidential nature of the -information and cooperate fully with the Disclosing Party to limit the scope of -disclosure and the dissemination of disclosed Confidential Information to the -minimum extent necessary. - -The obligations under this Section 9 shall continue to remain in force for a -period of five (5) years after the last disclosure, and, with respect to trade -secrets, for so long as such trade secrets are protected under applicable trade -secret laws. - - -10. FEES, DELIVERY AND PAYMENT - -10.1 License Fees -License Fees are described in The Qt Company’s standard price list, quote or -Purchase Order confirmation or in an appendix hereto, as the case may be. The -License Fees shall not be refunded or claimed as a credit in any event or for -any reason whatsoever. - -10.2 Ordering Licenses -Licensee may purchase Development Licenses and Distribution Licenses pursuant to -agreed pricing terms or, if no specific pricing terms have been agreed upon, at -The Qt Company's standard pricing terms applicable at the time of purchase. -Unless specifically otherwise provided, any pricing terms referenced in this -Agreement shall be valid for twelve (12) months from the date of this Agreement. -Licensee shall submit all purchase orders for Development Licenses and -Distribution Licenses to The Qt Company by email or any other method acceptable -to The Qt Company (each such order is referred to herein as a “Purchase Order”) -for confirmation, whereupon the Purchase Order shall become binding between the -Parties. - -10.3 Distribution License Packs -Unless otherwise agreed, Distribution Licenses shall be purchased by way of -Distribution License Packs. Upon due payment of the ordered Distribution -License Pack(s), the Licensee will have an account of Distribution Licenses -available for distributing the Redistributables in accordance with this -Agreement. Each time Licensee distributes a copy of Redistributables, then one -Distribution License is used, and Licensee’s account of available Distribution -Licenses is decreased accordingly. Licensee may distribute copies of the -Redistributables so long as Licensee has Distribution Licenses remaining on its -account. - -10.4 Payment Terms -License Fees and any other charges under this Agreement shall be paid by -Licensee no later than thirty (30) days from the date of the applicable invoice -from The Qt Company. The Qt Company will submit an invoice to Licensee after -the date of this Agreement and/or after The Qt Company receives a Purchase Order -from Licensee. A late payment charge of the lower of (a) one percent per month; -or (b) the interest rate stipulated by applicable law, shall be charged on any -unpaid balances that remain past due. - -10.5 Taxes -All License Fees and other charges payable hereunder are gross amounts but -exclusive of any value added tax, use tax, sales tax, withholding tax and other -taxes, duties or tariffs (“Taxes”) levied directly for the sale, delivery or use -of Licensed Software hereunder pursuant to any applicable law. Such applicable -Taxes shall be paid by Licensee to The Qt Company, or, where applicable, in lieu -of payment of such Taxes to The Qt Company, Licensee shall provide an exemption -certificate to The Qt Company and any applicable authority. - -11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS - -11.1 Licensee’s Record-keeping -Licensee shall at all times during the Term of this Agreement and for a period -of seven (7) years thereafter maintain Licensee’s Records in an accurate and -up-to-date form. Licensee’s Records shall be adequate to reasonably enable The -Qt Company to determine Licensee’s compliance with the provisions of this -Agreement. The records shall conform to general good accounting practices. -Licensee shall, within thirty (30) days from receiving The Qt Company’s request -to that effect, deliver to The Qt Company a report based on Licensee’s Records, -such report to contain information, in sufficient detail, on (i) number and -identity of users working with Licensed Software or Open Source Qt, (ii) copies -of Redistributables distributed by Licensee during the most recent calendar -quarter and/or any other term specified by The Qt Company, (iii) number of -undistributed copies of Redistributables and corresponding number of unused -Distribution Licenses remaining on Licensee’s account, and (iv) any other -information as The Qt Company may reasonably require from time to time. - -11.2. The Qt Company’s Audit Rights -The Qt Company or an independent auditor acting on behalf of The Qt Company’s, -may, upon at least five (5) business days’ prior written notice and at its -expense, audit Licensee with respect to the Licensee’s use of the Licensed -Software, but not more frequently than once during each 6- month period. Such -audit may be conducted by mail, electronic means or through an in-person visit -to Licensee’s place of business. Any such in-person audit shall be conducted -during regular business hours at Licensee's facilities and shall not -unreasonably interfere with Licensee's business activities. The Qt Company or -the independent auditor acting on behalf of The Qt Company shall be entitled to -inspect Licensee’s Records and conduct necessary interviews of Licensee’s -relevant employees and Contractors. All such Licensee’s Records and use thereof -shall be subject to an obligation of confidentiality under this Agreement. If -an audit reveals that Licensee is using the Licensed Software beyond scope of -the licenses Licensee has paid for, Licensee agrees to pay The Qt Company any -amounts owed for such unauthorized use within 30 days from receipt of the -corresponding invoice from The Qt Company. In addition, in the event the audit -reveals a material violation of the terms of this Agreement (without limitation, -either (i) underpayment of more than 10 % of License Fees or 10,000 euros -(whichever is more) or (ii) distribution of products, which include or result -from Prohibited Combination, shall be deemed a material violation for purposes -of this section), then the Licensee shall pay The Qt Company's reasonable cost -of conducting such audit. - - -12 TERM AND TERMINATION - -12.1 Agreement Term -This Agreement shall enter into force upon due acceptance by both Parties and -remain in force for as long as there is any Development License(s) purchased -under this Agreement in force (“Term”), unless and until terminated pursuant to -the terms of this Section 12. - -12.2 Termination and suspension of rights -Either Party shall have the right to terminate this Agreement upon thirty (30) -days prior written notice if the other Party commits a material breach of any -obligation of this Agreement and fails to remedy such breach within such notice -period. Instead of termination, The Qt Company shall have the right to suspend -or withhold grants of all rights to the Licensed Software hereunder, including -but not limited to the Development Licenses, Distribution License, and Support, -should Licensee fail to make payment in timely fashion or otherwise violates or -is reasonably suspected to violate its obligations or terms of this Agreement, -and where such violation or breach is not cured within five (5) business days -following The Qt Company’s written notice thereof. - -12.3 Mutual Right to Terminate -Either Party shall have the right to terminate this Agreement immediately upon -written notice in the event that the other Party becomes insolvent, files for -any form of bankruptcy, makes any assignment for the benefit of creditors, has a -receiver, administrative receiver or officer appointed over the whole or a -substantial part of its assets, ceases to conduct business, or an act equivalent -to any of the above occurs under the laws of the jurisdiction of the other -Party. - -12.4 Parties´ Rights and Duties upon Termination -Upon expiry or termination of the Agreement Licensee shall cease and shall cause -all Designated Users (including those of its Affiliates’ and Contractors’) to -cease using the Licensed Software and distribution of the Redistributables under -this Agreement. Notwithstanding the above, in the event the Agreement expires -or is terminated: - (i) as a result of The Qt Company choosing not to renew the Development - License(s) as set forth in Section 3.1, then all valid licenses - possessed by the Licensee at such date shall be extended to be valid - in perpetuity under the terms of this Agreement and Licensee is - entitled to purchase additional licenses as set forth in Section - 10.2; or - (ii) for reason other than by The Qt Company pursuant to item (i) above or - pursuant to Section 12.2, then the Licensee is entitled, for a period - of six (6) months after the effective date of termination, to continue - distribution of Devices under the Distribution Licenses paid but - unused at such effective date of termination. - -Upon any such termination the Licensee shall destroy or return to The Qt Company -all copies of the Licensed Software and all related materials and will certify -the same to The Qt Company upon its request, provided however that Licensee may -retain and exploit such copies of the Licensed Software as it may reasonably -require in providing continued support to Customers. Expiry or termination of -this Agreement for any reason whatsoever shall not relieve Licensee of its -obligation to pay any License Fees accrued or payable to The Qt Company prior to -the effective date of termination, and Licensee shall immediately pay to The Qt -Company all such fees upon the effective date of termination. Termination of -this Agreement shall not affect any rights of Customers to continue use of -Applications and Devices (and therein incorporated Redistributables). - -12.5 Extension in case of bankruptcy -In the event The Qt Company is declared bankrupt under a final, non-cancellable -decision by relevant court of law, and this Agreement is not, at the date of -expiry of the Development License(s) pursuant to Section 3.1, assigned to party, -who has assumed The Qt Company’s position as a legitimate licensor of Licensed -Software under this Agreement, then all valid licenses possessed by the Licensee -at such date of expiry, and which the Licensee has not notified for expiry, -shall be extended to be valid in perpetuity under the terms of this Agreement. - - -13. GOVERNING LAW AND LEGAL VENUE -In the event this Agreement is in the name of The Qt Company Inc., a Delaware -Corporation, then: - (i) this Agreement shall be construed and interpreted in accordance with - the laws of the State of California, USA, excluding its choice of law - provisions; - (ii) the United Nations Convention on Contracts for the International Sale - of Goods will not apply to this Agreement; and - (iii) any dispute, claim or controversy arising out of or relating to this - Agreement or the breach, termination, enforcement, interpretation or - validity thereof, including the determination of the scope or - applicability of this Agreement to arbitrate, shall be determined by - arbitration in San Francisco, USA, before one arbitrator. The - arbitration shall be administered by JAMS pursuant to JAMS' - Streamlined Arbitration Rules and Procedures. Judgment on the Award - may be entered in any court having jurisdiction. This Section shall - not preclude parties from seeking provisional remedies in aid of - arbitration from a court of appropriate jurisdiction. - -In the event this Agreement is in the name of The Qt Company Ltd., a Finnish -Company, then: - (i) this Agreement shall be construed and interpreted in accordance with - the laws of Finland, excluding its choice of law provisions; - (ii) the United Nations Convention on Contracts for the International Sale - of Goods will not apply to this Agreement; and - (iii) any disputes, controversy or claim arising out of or relating to this - Agreement, or the breach, termination or validity thereof shall be - finally settled by arbitration in accordance with the Arbitration - Rules of Finland Chamber of Commerce. The arbitration tribunal shall - consist of one (1), or if either Party so requires, of three (3), - arbitrators. The award shall be final and binding and enforceable in - any court of competent jurisdiction. The arbitration shall be held in - Helsinki, Finland and the process shall be conducted in the English - language. This Section shall not preclude parties from seeking - provisional remedies in aid of arbitration from a court of - appropriate jurisdiction. - - -14. GENERAL PROVISIONS - -14.1 No Assignment -Except in the case of a merger or sale of substantially all of its corporate -assets, Licensee shall not be entitled to assign or transfer all or any of its -rights, benefits and obligations under this Agreement without the prior written -consent of The Qt Company, which shall not be unreasonably withheld or delayed. -The Qt Company shall be entitled to freely assign or transfer any of its rights, -benefits or obligations under this Agreement. 14.2 No Third Party -Representations Licensee shall make no representations or warranties concerning -the Licensed Software on behalf of The Qt Company. Any representation or -warranty Licensee makes or purports to make on The Qt Company’s behalf shall be -void as to The Qt Company. 14.3 Surviving Sections Any terms and conditions -that by their nature or otherwise reasonably should survive termination of this -Agreement shall so be deemed to survive. Such sections include especially the -following: 1, 2, 6, 7, 9, 11, 12.4, 13 and 14. - -14.4 Entire Agreement -This Agreement, the exhibits hereto, the License Certificate and any applicable -Purchase Order accepted by The Qt Company constitute the complete agreement -between the Parties and supersedes all prior or contemporaneous discussions, -representations, and proposals, written or oral, with respect to the subject -matters discussed herein. In the event of any conflict or inconsistency between -this Agreement and any Purchase Order, the terms of this Agreement will prevail -over the terms of the Purchase Order with respect to such conflict or -inconsistency. Parties specifically acknowledge and agree that this Agreement -prevails over any click-to-accept or similar agreements the Designated Users may -need to accept online upon download of the Licensed Software, as may be required -by The Qt Company’s applicable processes relating to Licensed Software. - -14.5 Modifications -No modification of this Agreement shall be effective unless contained in a -writing executed by an authorized representative of each Party. No term or -condition contained in Licensee's Purchase Order (“Deviating Terms”) shall apply -unless The Qt Company has expressly agreed such Deviating Terms in writing. -Unless and to the extent expressly agreed by The Qt Company, any such Deviating -Terms shall be deemed void and with no legal effect. For clarity, delivery of -the Licensed Software following the receipt of the Purchase Order including -Deviating Terms shall not constitute acceptance of such Deviating Terms.” - -14.6 Force Majeure -Except for the payment obligations hereunder, neither Party shall be liable to -the other for any delay or non-performance of its obligations hereunder in the -event and to the extent that such delay or non-performance is due to an event of -act of God, terrorist attack or other similar unforeseeable catastrophic event -that prevents either Party for fulfilling its obligations under this Agreement -and which such Party cannot avoid or circumvent (“Force Majeure Event”). If the -Force Majeure Event results in a delay or non-performance of a Party for a -period of three (3) months or longer, then either Party shall have the right to -terminate this Agreement with immediate effect without any liability (except for -the obligations of payment arising prior to the event of Force Majeure) towards -the other Party. - -14.7 Notices -Any notice given by one Party to the other shall be deemed properly given and -deemed received if specifically acknowledged by the receiving Party in writing -or when successfully delivered to the recipient by hand, fax, or special courier -during normal business hours on a business day to the addresses specified for -each Party on the signature page. Each communication and document made or -delivered by one Party to the other Party pursuant to this Agreement shall be in -the English language. - -14.8 Export Control -Licensee acknowledges that the Redistributables, as incorporated in Applications -or Devices, may be subject to export control restrictions under the applicable -laws of respective countries. Licensee shall fully comply with all applicable -export license restrictions and requirements as well as with all laws and -regulations relating to the Redistributables and exercise of licenses hereunder -and shall procure all necessary governmental authorizations, including without -limitation, all necessary licenses, approvals, permissions or consents, where -necessary for the re-exportation of the Redistributables, Applications and/or -Devices. - -14.9 No Implied License -There are no implied licenses or other implied rights granted under this -Agreement, and all rights, save for those expressly granted hereunder, shall -remain with The Qt Company and its licensors. In addition, no licenses or -immunities are granted to the combination of the Licensed Software with any -other software or hardware not delivered by The Qt Company under this Agreement. - -14.10 Attorney Fees -The prevailing Party in any action to enforce this Agreement shall be entitled -to recover its attorney’s fees and costs in connection with such action. - -14.11 Privacy -Licensee acknowledges and agrees that for the purpose of this Agreement, The Qt -Company may collect, use, transfer and disclose personal data pertaining to -Designated Users as well as any other employees and directors of the Licensee -and its Contractors relevant for carrying out the intent of this Agreement. Such -personal data may be collected from the Licensee or directly from the relevant -individuals. The Parties acknowledge that with regard to such personal data -processed hereunder, The Qt Company shall be regarded as the Data Controller -under the applicable Data Protection Legislation. The Qt Company shall process -any such personal data in accordance with its privacy policies and practices, -which will comply with all applicable requirements of the Data Protection -Legislation. - -14.12 Severability - -If any provision of this Agreement shall be adjudged by any court of competent -jurisdiction to be unenforceable or invalid, that provision shall be limited or -eliminated to the minimum extent necessary so that this Agreement shall -otherwise remain in full force and effect and enforceable. - - -APPENDICES - -This Agreement includes Appendix 1 or/and Appendix 8, and possibly one or more -of the appendices 3-5, depending on the product(s) purchased by the Licensee, -what is stated in the quote or invoice, and/or what is stated in the Licensee’s -License Certificate. - - -APPENDIX 1: LICENSED SOFTWARE - -1a. Licensed Software - Qt Toolkit - -Module Description -Qt Core Core non-graphical classes used by other modules. -Qt GUI Base classes for graphical user interface (GUI) - components. -Qt Multimedia Classes for audio, video and camera functionality. -Qt Multimedia Widgets Widget-based classes for implementing multimedia - functionality. -Qt Network Classes to make network programming easier and more - portable. -Qt QML Classes for QML and JavaScript languages. -Qt Quick A declarative framework for building highly dynamic - applications with custom user interfaces. -Qt Quick Controls 2 Provides lightweight QML types for creating - performant user interfaces for desktop, embedded, - and mobile devices. -Qt Quick Dialogs Types for creating and interacting with system - dialogs from a Qt Quick application. -Qt Quick Layouts Layouts are items that are used to arrange Qt Quick - 2 based items in the user interface. -Qt Quick Test A unit test framework for QML applications. -Qt SQL Classes for database integration using SQL. -Qt Test Classes for unit testing Qt applications and - libraries. -Qt Widgets Classes to extend Qt GUI with C++ widgets. -Active Qt Classes for applications which use ActiveX and COM -Qt 3D Functionality for near-realtime simulation systems - with support for 2D and 3D rendering. -Qt Android Extras Provides platform-specific APIs for Android. -Qt Bluetooth Provides access to Bluetooth hardware. -Qt Canvas 3D Enables OpenGL-like 3D drawing calls from Qt Quick - applications using JavaScript. -Qt Concurrent Classes for writing multi-threaded programs without - using low-level threading primitives. -Qt D-Bus Classes for inter-process communication over the - D-Bus protocol. -Qt Gamepad Enables Qt applications to support the use of gamepad - hardware. -Qt Graphical Effects Graphical effects for use with Qt Quick 2. -Qt Help Classes for integrating documentation into - applications, similar to Qt Assistant. -Qt Image Formats Plugins for additional image formats: TIFF, - MNG, TGA, WBMP. -Qt Location Displays map, navigation, and place content in a QML - application. -Qt Mac Extras Provides platform-specific APIs for macOS. -Qt Network Authorization Provides support for OAuth-based authorization to - online services. -Qt NFC Provides access to Near-Field communication (NFC) - hardware. -Qt Platform Headers Provides classes that encapsulate platform-specific - information. -Qt Positioning Provides access to position, satellite and area - monitoring classes. -Qt Print Support Classes to make printing easier and more portable. -Qt Purchasing Enables in-app purchase of products in Qt - applications. -Qt for Python Python bindings for Qt. -Qt Quick Controls Reusable Qt Quick based UI controls to create - classic desktop-style user interfaces. -Qt Quick Extras Provides a specialized set of controls that can - be used to build interfaces in Qt Quick. -Qt Quick Widgets Provides a C++ widget class for displaying a Qt - Quick user interface. -Qt SCXML Provides classes and tools for creating state - machines from SCXML files. -Qt Sensors Provides access to sensor hardware and motion - gesture recognition. -Qt Serial Bus Provides access to serial industrial bus interface. -Qt Serial Port Provides access to hardware and virtual serial ports. -Qt Speech Provides support for accessibility features such as - text-to-speech. -Qt SVG Classes for displaying the contents of SVG files. -Qt UI Tools Classes for loading QWidget based forms created in - Qt Designer dynamically, at runtime. -Qt WebChannel Provides access to QObject or QML objects from HTML - clients for seamless integration of Qt applications - with HTML/JavaScript clients. -Qt WebEngine Classes and functions for embedding web content in - applications using the Chromium browser project. -Qt WebSockets Provides WebSocket communication. -Qt WebView Displays web content in a QML application by using - APIs native to the platform. -Qt Windows Extras Provides platform-specific APIs for Windows. -Qt X11 Extras Provides platform-specific APIs for X11. -Qt XML C++ implementations of SAX and DOM. -Qt XML Patterns Support for XPath, XQuery, XSLT and XML schema - validation. -Qt Wayland Compositor Provides a framework to develop a Wayland compositor. -Qt Charts UI Components for displaying charts. -Qt Data Visualization UI Components for creating 3D data visualizations. -Qt Virtual Keyboard A framework for implementing different input methods - as well as a QML virtual keyboard. - - -1b. Licenses software – Embedded software development libraries - -Module Description -Boot 2 Qt stack Yocto based Embedded Linux stack for selected - target hardware. -Qt OTA Client-side capability for device image updates Over - The Air. -Device Utilities Collection of API’s to manage the device; E.g. - display, WiFi and Bluetooth settings. -Qt Debugging Bridge (QDB) Daemon Enables host-target deployment, debugging, - profiling and other features over USB. Up to developer - to decide if this is left in the final solution. - - -1c. Licensed Software - Qt Tools/Applications - -Tool Description -Qt Creator The integrated development environment for Qt. -Qt Designer Qt tool for designing and building graphical user - interfaces. -Qt Linguist Tool used to add translations to Qt applications. -Qt Assistant Tool for viewing online documentation in Qt - help-file format. -Qmake Utility tool used to automate the generation of make - files. -uic User interface compiler for the Qt GUI toolkit. -rcc Resource compiler used for embedding resources into - Qt applications. -lupdate Tool that finds the translatable strings in the - specified source, header and Qt Designer interface - files, and produces or updates translation files. -lrelease Tool that produces translation files in the compact - binary format used by localized Qt applications. -qlalr Qt parser generator tool. -qdoc Configurable documentation generation tool. -qmlscene QML launcher tool. -qmlviewer QML launcher tool. - - -1d. Licenses software –Qt Tools/Applications specific to embedded software -development - -Tool Description -Target toolchains Cross compilation toolchains for supported target - devices and operating systems. -Qt Debugging Bridge (QDB) Enables deployment, debugging, profiling and other -Host Tools features over USB from development host PC to target - device. -qtconfig-gui Qt Lite Configurator tool graphical interface. -Qt Emulator Qt Emulator - - -2. Parts of the Licensed Software that are permitted for distribution in -object-code form only (“Redistributables”) under this Agreement: - -2a. Qt for Application Development - - - The Licensed Software's Qt Toolkit libraries defined in 1a - - The Licensed Software's installer framework - -2b. Qt for Device Creation - - - Qt for Application Development Redistributables defined in 2a - - The Licensed Software’s Embedded software development libraries defined - in 1b - -2c. Qt 3D Studio - -- The Licensed Software’s Qt 3D Studio Runtime (“Qt53DStudioRuntime2”) - - -APPENDIX 3: ADDITIONS TO LICENSED SOFTWARE - -1. Licensed Software - -In addition to what is provided under the definition of the Licensed Software, -Parties agree that Licensed Software shall also include the following additional -software products of The Qt Company if included in the quote / invoice: - -Additional software product Description -Qt for Automation A collection of software components and - libraries targeted for the development of - automation systems. -Qt Safe Renderer Provides a UI rendering component that can be - used to render safety- critical items as well - as documentation and certification artifacts. -Qt Application Manager Daemon, that helps to create embedded Linux - systems that have a highly complex UI setup. -GammaRay A software introspection tool for Qt - applications. - - -2. Parts of the Licensed Software that are permitted for distribution in -object-code form only (“Redistributables”) under this Agreement: - - - Qt for Automation The Licensed Software’s Qt for Automation - libraries defined in 1 - - Qt Safe Renderer The Licensed Software’s Qt Safe Renderer - libraries defined in 1 - - Qt Application Manager The Licensed Software’s Qt Application Manager - libraries defined in 1 - -All the above is considered as Redistributables and subject to applicable -provisions and limitations including but not limited to what is defined in -section 3. - - -APPENDIX 4: SMALL BUSINESS AND START-UP APPENDIX - -The provisions of this Appendix 4 are applicable for Start-up Companies and for -the Evaluation Term. - -For the purpose of this Appendix 4, the following additional definitions shall -be applicable: -“Trial Term” shall mean a period of twelve (12) months. - -“Start-up Company” means a company with a maximum annual revenue, including -funding, equivalent to 100,000 USD (in applicable currency) during a respective -calendar year, as evidenced by duly audited records of the Licensee and approved -by The Qt Company. - -During the Trial Term, Section 3 shall apply with following modifications -(“Trial Term Modifications”): - - - Licenses granted under Sections 3.1 and 3.2 shall be free of any charge. - For clarity, License for distribution of Devices pursuant to Section 3.3 is - subject to applicable License Fee for necessary Distribution Licenses; - - Development License under Section 3.1 is limited to a maximum of three (3) - Designated Users; and - - Support is available subject to availability, as judged by The Qt Company - at its free and absolute discretion, provided that support will be limited - to a maximum of ten (10) tickets during the Trial Term. - -Upon expiry of the Trial Term: - - a) This Appendix 4 is terminated, Trial Term Modifications cease to remain in - force, Licensee’s Development Licenses shall be automatically converted - into licenses subject to a License Fee (in the amount specified in the - quote or in Appendix 2 and payable with a 30-day payment term) and - Licensee’s rights and obligations under this Agreement shall continue to - remain in force under the standard provisions of the Agreement, unless the - Licensee notifies The Qt Company in writing no less than ninety (90) days - before such expiry date that Licensee does not agree to such continuance, - in which event the Agreement, and all rights of the Licensee thereunder, - shall expire; provided however that - b) in the event the Licensee still qualifies as a Start-up Company, the - Licensee has an option (“Option”), instead of what is stated in item a) - above, to extend the Trial Term renewal is limited to one time and total - duration of Trial Terms thus to 24 months after the effective date. - Licensee shall notify The Qt Company in writing no less than ninety (90) - days before the expiry date, if Licensee wish to exercise the Option. - - -APPENDIX 5: NON-COMMERCIAL USE APPENDIX - -The provisions of this Appendix 5 are applicable for non-commercial use of the -Licensed Software by the Licensee. For the purpose of this Appendix 5, the -following additional definitions (replacing the relevant definition of the -Agreement, where applicable) shall be applicable: - -“Demo Units” shall mean - (i) hardware development platform, which incorporates the Licensed - Software along with Licensee’s software and/or hardware, and - (ii) prototype versions of Applications or Devices. - -“Designated User(s)” shall mean the employees and students of the Licensee. - -“Licensee Products” shall mean Applications and/or Devices. - -“Permitted Purpose” shall mean - (i) Licensee’s internal evaluation and testing of Licensed Software, - (ii) building Demo Units as well as - (iii) educational use. - -“Term” shall mean a period of twelve (12) months or any such other period as -may be agreed between the Parties. - -For the purpose of this Appendix 5, the following changes shall be agreed with -respect to relevant Sections of the Agreement: - I. Recital (A) shall be replaced in its entirety to read as follows: “(A) - Licensee wishes to use the Licensed Software for the Permitted Purpose.” - II. Section 3.1 shall be replaced in its entirety to read as follows: “The - Qt Company grants to Licensee a personal, non-exclusive, - non-transferable, revocable, royalty-free license, valid for the Term, - to use, modify and copy the Licensed Software solely for the Permitted - Purpose. Licensee may install copies of the Licensed Software on an - unlimited number of computers provided that only Designated Users may - use the Licensed Software. Licensee may demonstrate the Demo Units, - provided that such demonstrations must be conducted by Licensee, and - the Demo Units must remain in Licensee’s possession and under - Licensee’s control at all times. For clarity, this Agreement does not - (i) entitle Licensee to use Licensed Software to create Applications - or Devices (other than prototypes thereof) or - (ii) carry any distribution rights to Licensee, but such rights are - subject to and conditional upon conclusion of a separate - license agreement with The Qt Company.” - III. Sections 3.2, 3.3, 8 and 10 shall be deleted. - IV. Section 3.4 shall be replaced in its entirety to read as follows: - “Licensee shall not: - - remove or alter any copyright, trademark or other proprietary - rights notice contained in any portion of the Licensed Software; - - transfer, publish, sublicense, disclose, display or otherwise make - the Licensed Software available to any third party (except that - Licensee may demonstrate the Demo Units pursuant to Section 3.1); - - in any way combine, incorporate or integrate Licensed Software - with, or use Licensed Software for creation of, any software - created with or incorporating Open Source Qt; - - Licensee shall cause all Designated Users who make use of the - licenses granted under this Agreement, to be contractually bound to - comply with the relevant terms of this Agreement and not to use the - Licensed Software beyond the terms hereof. Licensee shall be - responsible for any and all actions and omissions of its Designated - Users relating to the Licensed Software and use thereof. Any use - of Licensed Software beyond the provisions of this Agreement is - strictly prohibited and requires an additional license from The Qt - Company.” - V. Section 12 shall be replaced in its entirety to read as follows: “This - Agreement shall enter into force upon due acceptance by both Parties - and remain in force for the Term, unless and until terminated pursuant - to the terms of Section 12. Upon termination of the Agreement, Licensee - shall cease using the Licensed Software. All other copies of Licensed - Software in the possession or control of Licensee must be erased or - destroyed. An officer of Licensee must, upon request, promptly deliver - to The Qt Company a written confirmation that this has occurred.” - -Except for the modifications specified above, this Appendix carries no change to -the terms of the Agreement, which shall remain in full force. - - -APPENDIX 8: QT FOR DEVICE CREATION MCU APPENDIX - -This Appendix 8 shall be applicable in case the Licensee and/or respective -Designated User have purchased Qt for Device Creation MCU, either as an -add-on or standalone package. In case Qt for Device Creation MCU is purchased -as an addition to Qt for Device Creation, this appendix is an addition to -Appendix 1. In any other case, this appendix replaces Appendix 1. - -1a. Licensed Software - Qt Toolkit - -Module Description -Qt Quick Controls 2 Provides lightweight QML types for creating - performant user interfaces for desktop, embedded, - and mobile devices. - - -1b. Licensed software – Embedded software development libraries - -Module Description -Qt Quick Ultralite Qt Quick Ultralite (QUL) rendering engine and sample - source codes. -Qt Quick Ultralite Platform adaptations including OS support that allow -Platform Adaptations applications on QUL to run on microcontrollers - - -1c. Licensed Software - Qt Tools/Applications - -Tool Description -Qt Creator The integrated development environment for Qt. -Qt Designer Qt tool for designing and building graphical user - interfaces. -Qt Linguist Tool used to add translations to Qt applications. -Qt Assistant Tool for viewing online documentation in Qt help-file - format. -lupdate Tool that finds the translatable strings in the - specified source, header and Qt Designer interface - files, and produces or updates translation files. -lrelease Tool that produces translation files in the compact - binary format used by localized Qt applications. - - -1d. Licensed software – Qt Tools/Applications specific to embedded software -development - -Tool Description -Target toolchains Cross compilation toolchains for supported target - devices and operating systems. -qmlinterfaceextractor Tool to generate QML from header file. -qml2cpp Tool to convert QML to C++ files. -fontcompiler Tool to compile font meta data and True Type fonts. - - -2. Parts of the Licensed Software that are permitted for distribution in -object-code form only (“Redistributables”) under this Agreement: - - - The Licensed Software’s Embedded software development libraries - defined in 1b. diff --git a/configure.pri b/configure.pri index 2b8d20d607..47882afeb6 100644 --- a/configure.pri +++ b/configure.pri @@ -92,7 +92,7 @@ defineReplace(qtConfFunc_licenseCheck) { hasOpenSource = true else: \ hasOpenSource = false - exists($$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT-4.0): \ + exists($$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT): \ hasCommercial = true else: \ hasCommercial = false @@ -222,7 +222,7 @@ defineReplace(qtConfFunc_licenseCheck) { affix = either } } else { - theLicense = $$cat($$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT-4.0, lines) + theLicense = $$cat($$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT, lines) theLicense = $$first(theLicense) showWhat = "Type '?' to view the $${theLicense}." } @@ -249,7 +249,7 @@ defineReplace(qtConfFunc_licenseCheck) { } else: equals(val, n)|equals(val, no) { return(false) } else: equals(commercial, yes):equals(val, ?) { - licenseFile = $$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT-4.0 + licenseFile = $$QT_SOURCE_TREE/LICENSE.QT-LICENSE-AGREEMENT } else: equals(commercial, no):equals(val, l) { licenseFile = $$QT_SOURCE_TREE/LICENSE.LGPL3 } else: equals(commercial, no):equals(val, g):$$gpl2Ok { -- cgit v1.2.3 From a966a7b7df18ebf7b92409b1199386df7f872b6c Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 3 Dec 2019 09:25:06 +0200 Subject: Initialize all variables Set m_isFolder = false also in "close" method Fixes: QTBUG-80468 Change-Id: I5449692d61d4d340e83bdca337b86e054e8bf561 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp index 3d16f96450..fcc08ea00d 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp @@ -288,6 +288,7 @@ public: m_assetFile = 0; return true; } + m_isFolder = false; return false; } @@ -397,9 +398,9 @@ public: private: AAsset *m_assetFile = nullptr; - AAssetManager *m_assetManager; + AAssetManager *m_assetManager = nullptr; QString m_fileName; - bool m_isFolder; + bool m_isFolder = false; }; -- cgit v1.2.3 From 4858de52e8bd7390934b7cdb7c1f4ffbdf8e2067 Mon Sep 17 00:00:00 2001 From: Antti Kokko Date: Mon, 18 Nov 2019 13:01:23 +0200 Subject: Add changes file for Qt 5.14.0 Change-Id: I3af09ba121850547c55ddd9fcfb4e753a3fb61f0 Reviewed-by: Edward Welbourne Reviewed-by: Shawn Rutledge --- dist/changes-5.14.0 | 542 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 542 insertions(+) create mode 100644 dist/changes-5.14.0 diff --git a/dist/changes-5.14.0 b/dist/changes-5.14.0 new file mode 100644 index 0000000000..77cbb70928 --- /dev/null +++ b/dist/changes-5.14.0 @@ -0,0 +1,542 @@ +Qt 5.14 introduces many new features and improvements as well as bugfixes +over the 5.13.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + +https://doc.qt.io/qt-5/index.html + +The Qt version 5.14 series is binary compatible with the 5.13.x series. +Applications compiled for 5.13 will continue to run with 5.14. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Important Behavioral Change * +**************************************************************************** + + - [QTBUG-47644] WrapWord now correctly prefers line breaks between words + in Korean text. WrapAnywhere can still be used to get breaks between + syllables instead. + +**************************************************************************** +* Potentially Source-Incompatible Changes * +**************************************************************************** + + - qstringlist.h no longer includes qregexp.h. + - Prefixing Q_NAMESPACE with an export macro may no longer work. Use the + new Q_NAMESPACE_EXPORT macro for that use case. + +**************************************************************************** +* QtCore * +**************************************************************************** + + - Added support of deduction guides for QPair + - Added new Qt::SplitBehavior, for use as eventual replacement for + QString::SplitBehavior. + - Added the new Q_NAMESPACE_EXPORT macro. It can be used just like + Q_NAMESPACE to add meta-object information to a namespace; however it + also supports exporting of such information from shared libraries. + - [QTBUG-15234] Qt installations on the host system can now be relocated, + i.e. moved to other directories. + + - JSON: + * Added overloads of functions taking key strings as QStringView; in + QJsonObject, QJsonValue and QJsonDocument. + + - QAtomicInteger: + * Added loadRelaxed() and storeRelaxed(), to be used as replacements of + load() / store(). + + - QAtomicPointer: + * Added loadRelaxed() and storeRelaxed(), to be used as replacements of + load() / store(). + + - QBasicTimer: + * QBasicTimer is now a move-only class. Copying is now deprecated and + will be removed in Qt 6. + * Added swap() member and free function. + + - QByteArray::operator[]: + * Detach immediately, instead of deferring until modification via + the returned QByteRef. + * Deprecate reliance on its implicit resizing behavior. Support for + writing past the end of QByteArray shall be removed in a future + version of Qt. + + - QCalendar: + * Added QCalendar to support diverse calendars, supported by + implementing QCalendarBackend. + * Added support for Julian and Milankovic calendars. These are enabled + by default, except in bootstrap builds. + * Added support for the Jalali (Persian or Solar Hijri) calendar, + controlled by feature jalalicalendar. + * Added support for the Islamic Civil calendar, controlled by feature + islamiccivilcalendar, with locale data that can be shared with other + implementations, controlled by feature hijricalendar. + + - QChar: + * Added FormFeed (FF) special character. + + - QCollator: + * Added support for QStringView. + * The default QCollator now uses the system's collation locale, rather + than the system locale itself. + + - QDataStream: + * Enumerations can now be serialized through QDataStream without the + need of manually defining streaming operators. + + - QDate: + * [QTBUG-64485] Added startOfDay() and endOfDay() methods to provide a + QDateTime at the start and end of a given date, taking account of any + time skipped by transitions, e.g. a DST spring-forward, which can lead + to a day starting at 01:00 or ending just before 23:00. + * Allow choice of calendar in various operations, with Gregorian + remaining the default. + + - QDateTime: + * Invalid datetimes are now treated as equal and less than all valid + ones. They could previously be found equal to valid datetimes. + + - QDir: + * Remove Windows specific long path markers when handling file paths + with native separators. + + - QEasingCurve: + * QEasingCurve now properly streams all the data needed to QDataStream. + + - QFileInfo: + * [QTBUG-75869] Introduced QFileInfo::isJunction() to detect NTFS Junctions + on Windows. + + - QHash: + * Added range constructor. + + - QJsonObject: + * Added insert(), remove(), and take() overloads taking QLatin1String. + + - QLatin1Char: + * Comparison against char now works even in QT_NO_CAST_FROM_ASCII + builds. + + - QLatin1Literal: + * The undocumented QLatin1Literal type alias for QLatin1String is now + deprecated. Use QLatin1String instead. + + - QLatin1String: + * Added indexOf(). + * Added contains(). + * Added lastIndexOf(). + + - QLineF: + * added QLineF::intersects() as a replacement for QLineF::intersect() + + - QLinkedList: + * Added range constructor. + + - QList: + * Added range constructor. + + - QLocale: + * The system locale now knows what to use for collation, + QLocale::system().collation(). + * The NaN obtained when reading "nan" as a floating-point value is now + quiet rather than signaling. + * The system locale's UI languages list now includes, as for that of an + ordinary locale, the results of adding likely sub-tags from each + locale name, and of removing some, where this doesn't change which + locale is specified. This gives searches for translation files a + better chance of finding a suitable file. + + - QMetaObject: + * [QTBUG-38876] Some internal members of the QMetaObject class have + changed types. Those members are not public API and thus should not + cause source incompatibilities. + + - QMultiHash: + * Added range constructor. + + - QMutex: + * Added QRecursiveMutex as a replacement of QMutex(QMutex::Recursive). + + - QPoint/QPointF: + * Added transposed(). + + - QPointer: + * Added a free swap function. + + - QSet: + * Added range constructor. + + - QSharedPointer: + * Overloads of qSharedPointerObjectCast have been added to work on + std::shared_ptr. + * The swap overload for QSharedPointer in the std namespace has been + removed; a new overload has been added in the Qt namespace. + + - QSize/QSizeF: + * Added grownBy(QMargin(F))/shrunkBy(QMargin(F)). + + - QString: + * The behavior of operator[] to allow implicit resizing of the string + has been deprecated, and will be removed in a future version of Qt. + * QString::operator[] detaches immediately. Previously, the detach was + delayed until a modification was made to the string through the + returned QCharRef. + * QString::arg(QString, ..., QString) can now be called with more than + nine arguments, as well as with QStringViews. + + - QString/QStringRef: + * The split functions now optionally take Qt::SplitBehavior. + + - QStringList: + * Added range constructor. + * Added QStringView overloads of join(), filter(), and + replaceInStrings(). + + - QStringView: + * Added indexOf(). + * Added contains(). + * Added lastIndexOf(). + * Deprecated the (undocumented) QStringViewLiteral macro. Just use u"" + or QStringView(u"") instead. + + - QStringView/QLatin1String: + * Added arg(), taking arbitrarily many strings. + + - QTextStream: + * The NaN obtained when reading "nan" as a floating-point value is now + quiet rather than signaling. + + - QTimeZone: + * [QTBUG-75565] The TZDB back-end now recognizes the contents of /etc/TZ + as a fall-back for $TZ (as used by uClibc). + + - QVarLengthArray: + * Added range constructor. + * Added a qHash overload. + + - QVariant: + * Fixed a bug that caused isNull() to be true after downcasting a + QObject* payload using convert(). + + - QVector: + * Added range constructor. + + - QWeakPointer: + * The data() function has been deprecated. + * A swap overload has been added. + + - QtGlobal: + * Add new macros QT_DEPRECATED_VERSION and QT_DEPRECATED_VERSION_X to + conditionally display deprecation warnings + * Added qExchange(), a drop-in for C++14's std::exchange() + + - Windows: + * QSysInfo::prettyProductName() now returns a version including the + Windows 10 release id or Windows 7 build number respectively, + resembling the version string displayed by the winver tool. + +**************************************************************************** +* QtDBus * +**************************************************************************** + + - QDBusAbstractInterface: + * The call() and asyncCall() methods now accept more than eight QVariant + arguments. + + - QDBusObjectPath: + * Added explicit cast operator to QVariant. + +**************************************************************************** +* QtGui * +**************************************************************************** + + - QColor: + * Added QColorConstants, a namespace containing constexpr QColor + instances. + + - A QColorSpace class has been added, and color spaces are now parsed from + PNG and JPEG images. No automatic color space conversion is done + however, and applications must request it. + - Added support for filtering Vulkan debug messages in QVulkanInstance. + This is especially useful for processing or suppressing messages from + the validation layers. + - Obsolete constructors and accessors in QWheelEvent now have proper + deprecation macros, and are no longer in use in any Qt modules. + What is left is intended to be compatible with planned changes in Qt 6. + + - QFont: + * [QTBUG-77908] Fixed kerning error with certain fonts. + * [QTBUG-76239] Fixed an issue where application fonts would be parsed + multiple times, causing some unnecessary overhead when during + application startup. + * [QTBUG-46322] Resolving a font that just has a family set with + families set will prepend the family to the families so that it is + still the first preference for the font. + + - QImage: + * [QTBUG-42540], [QTBUG-68787] Loading of image files having a file + name suffix for a different image file type has been + fixed. QImageReader will now ask the suffix format handler to + confirm the file contents (canRead()), and fall back to normal + file content recognition on failure. This implies a slight + behavior change in QImageReader::loopCount(), ::imageCount() and + ::nextImageDelay(): For an unreadable file with a recognized + suffix, they would earlier return 0, while they now will + return -1, i.e. error, as per the documentation. + + - QPainter: + * HighQualityAntialiasing and NonCosmeticDefaultPen are marked as + deprecated and don't have an effect anymore + + - QTextDocument: + * [QTBUG-36152] CSS styling of table cell borders (styling and + elements) is now supported during HTML import and export, including + border-color, border-width and border-style. Setting the table's + border-width to a value >= 1 and enabling border-collapse will now draw + a simple, clean table grid (1px) with an outer border of the specified + width and color. A manual test was added, which allows editing HTML + with live preview. + * [QTBUG-43589] Fixed incorrect rounding of widths of variable-width + columns in tables, to avoid border drawing artifacts. + * [QTBUG-78318] QTextFrameFormat margins, padding and borders are now + scaled to device coordinates, and thus correctly sized on high-dpi + displays and printers. + * Markdown (CommonMark or GitHub dialect) is now a supported format for + reading into and writing from QTextDocument, via the setMarkdown() and + toMarkdown() functions. We do not guarantee that every markdown + document can be re-written exactly as it was read; but that does work + in many cases, and it's OK to report bugs about cases that don't work. + + - Touch: + * [QTBUG-77142] When a stationary touchpoint contains some "interesting" + property change (pressure or velocity, so far), it is delivered normally. + +**************************************************************************** +* QtNetwork * +**************************************************************************** + + - QAuthenticator: + * [QTBUG-4117] Add support for SPNEGO/Negotiate + + - QHostInfo: + * Added move contructor. + + - QNetworkAccessManager: + * [QTBUG-69477] Don't fail when FTP does not implement the HELP command. + * Added setAutoDeleteReplies to QNetworkAccessManager to enable the + AutoDeleteReplyOnFinishAttribute attribute for all QNetworkRequests + that are passed to QNetworkAccessManager. + + - QNetworkRequest: + * Added the AutoDeleteReplyOnFinishAttribute attribute to + QNetworkRequest, which makes QNetworkAccessManager delete the + QNetworkReply after it has emitted the "finished" signal. + * Add an ability to configure HTTP/2 protocol + + - QSslKey: + * Key data is cleared as soon as possible when move-assigning. + + - QSslSocket: + * [QTBUG-72016] Added runtime validation of the SSL private key when it + is loaded through a file path. + +**************************************************************************** +* QtSql * +**************************************************************************** + + - QPSQL: + * [QTBUG-79033][QTBUG-79064] added support for PostgreSQL 12 + + - QSqlite: + * Updated to v3.30.1 + + - QSqlite2: + * Marked QSQLITE2 plugin as obsolete - it will be removed with Qt6 + together with the QTDS plugin + +**************************************************************************** +* QtTestLib * +**************************************************************************** + + - Comparison of QImage, QPixmap now checks for the device pixel ratio. + - It is now possible to perform static initialization before QApplication + instantiation by implementing a initMain() function in the test class. + +**************************************************************************** +* QtWidgets * +**************************************************************************** + + - QActionGroup: + * Added new exclusionPolicy property. Set it to ExclusiveOptional to + allow unchecking the active checkable action in an exclusive group. + + - QCalendarWidget: + * Allow choice of calendar, with Gregorian remaining the default. + + - QComboBox: + * Two new signals textHighlighted() and textActivated() were added to + replace highlighted()/activated() QString overloads. + + - QDateTimeEdit: + * Allow choice of calendar, with Gregorian remaining the default. + + - QFileDialog: + * The widgets-based dialog now remembers the selected files when + navigating the history. + + - QFormLayout: + * Honor the vertical expanding state of a widget inside a QFormLayout. + + - QGraphicsWidget: + * Added QMarginsF overloads of setContentsMargins() and + setWindowFrameMargins(). + + - QGroupBox: + * [QTBUG-259389 Always disable children of a checkable, unchecked group + box before showing. + + - QLabel: + * Markdown is now a supported textFormat for QLabel. + + - QLayout: + * Prevent clipping of group box titles on macOS (and similar styles that + draw into layout margins) + + - QLineEdit: + * Behavior change: now the editingFinished signal is emitted only once + after the line edit content was edited. + * The getTextMargins() member function has been deprecated in favor of + textMargins(). + + - QStyle: + * Style sheets now only use the part of the stylesheet font that it + knows about. The remaining will be resolved/inherited from the + context. + + - QTextBrowser: + * Markdown is now a supported format. QTextBrowser::setSource() detects + the common file extensions (.md, .mkd and .markdown). In case it + cannot be detected that way, setSource() now takes an optional + ResourceType enum argument so that the type can be overridden. + QTextBrowser inherits all the QTextEdit features: if readOnly is set + to false, the user can perform the editing operations that QTextEdit + allows. If readOnly is set to true (the default), the user can click + Markdown hyperlinks to emit the anchorClicked() signal, as with HTML. + + - QTextEdit: + * [QTBUG-75931] Added support for copy-pasting foreground brushes with + textures within same document. + * Markdown (CommonMark or GitHub dialect) is now a supported format, + via the markdown property. GitHub dialect is the default, and supports + all features such as hyperlinks, images, tables, lists, checklists, etc. + * If the text was loaded from a Markdown document that contains checkboxes, + the user can click on them to toggle the states. The cursor changes to + PointingHandCursor when the mouse is hovering over a checkbox. + + - QTreeView: + * Don't emit clicked signal after a doubleClicked signal. + + - QWidget: + * The getContentsMargins() member function has been deprecated in favor + of contentsMargins(). + +**************************************************************************** +* Platform Specific Changes * +**************************************************************************** + + - Android + * Fixed an issue where an application installation would be irrecoverably + broken if power loss or a crash occurred during its first initialization + run. + * Make it easy to run Qt tests on Android. "$ make check" is all that's + needed to run a test on an Android device. + * Remove ant support from androiddeployqt + * Introduce "make apk" target, an easy way to create an apk. + * Android depends on NDK r20+ + * Android multi arch build in one go, needed to support the new .aab + packaging format. + * -android-abis configure script parameter useful to compile Qt only for a + selected Android ABIs. + * Instead of bundling QML resources in assets and extracting them on first + start, Qt now creates an .rcc file and register it before invoking the + main function. + * Fixed regression that made it impossible for an application to use the + tap-and-hold gesture. + + - Linux: + * Added a device spec for Raspberry Pi 4 (32-bit, V3D) + * Added a device spec for 64-bit i.MX8 systems (Vivante graphics stack) + + - MinGW: + * [QTBUG-4155] Added a suffix to debug mode pkgconfig files. + + - macOS: + * The drawableSize of Metal layers is no longer updated automatically on + window resize or screen change. Update the size manually in response to + resizeEvent(), or at the start of each frame, as needed. + + - Mir: + * The Mir platform plugin has been removed: use the Wayland plugin when + connecting to a Mir display server. + + - Windows: + * It is now possible to enable RTL mode by passing the option -platform + windows:reverse. + * [QTBUG-74748] Fixed a bug where it would be impossible to + request different faces of a font family after a specific type face + has been in use. + +**************************************************************************** +* Third-Party Code * +**************************************************************************** + - Upgraded bundled Freetype version to 2.10.1. + - Build sqlite without SQLITE_OMIT_LOAD_EXTENSION + - Qt Gui: Added md4c markdown parser to src/3rdparty/md4c (MIT licensed). + - [QTBUG-79418] Updated double-conversion code to upstream version 3.1.5. + - [QTBUG-79420] libjpeg-turbo was updated to version 2.0.3 + - [QTBUG-79418] Updated DNS public suffix list + +**************************************************************************** +* Tools * +**************************************************************************** + + - rcc: + * Added -d option to generate a dependency file. + * Added support for Python as output format. + +**************************************************************************** +* configure * +**************************************************************************** + + - Added the configure option -qtlibinfix-plugins to rename plugins + according to QT_LIBINFIX. This option is off by default. + +**************************************************************************** +* CMake * +**************************************************************************** + + - [QTBUG-38913][QTBUG-76562] Added ability to auto-import non-qml plugins + on CMake builds + +**************************************************************************** +* qmake * +**************************************************************************** + + - Installation targets do not ignore the exit code of QINSTALL and + QINSTALL_PROGRAM anymore. + - Introduced the variables LEX_DIR and YACC_DIR which determine the + location of lex/yacc output. Fixed parallel execution of lex/yacc for + debug_and_release builds. + - The syntax 'LIBS += -frameworkFoo', or 'LIBS += "-framework Foo"' is no + longer supported. Use the canonical 'LIBS += -framework Foo' instead. + - Fixed precompiled headers for the Clang compiler. + + - Android: + * Remove gcc-style PCH directives from the android-clang mkspec. -- cgit v1.2.3 From 61f92c0bcedfaad1721bd1c985217c5271e9086c Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 3 Dec 2019 09:02:15 +0100 Subject: Make sure documentation for VulkanMemoryAllocator 3rdparty code shows up There's no qt documentation module for 'qtrhi' - instead, it should be added to the qtgui documentation module. Fixes: QTBUG-80489 Change-Id: Iea61b907811cd2135c2f1258599d9868d2218679 Reviewed-by: Laszlo Agocs --- src/3rdparty/VulkanMemoryAllocator/qt_attribution.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/3rdparty/VulkanMemoryAllocator/qt_attribution.json b/src/3rdparty/VulkanMemoryAllocator/qt_attribution.json index 2548856ca7..0a5df738a8 100644 --- a/src/3rdparty/VulkanMemoryAllocator/qt_attribution.json +++ b/src/3rdparty/VulkanMemoryAllocator/qt_attribution.json @@ -2,7 +2,7 @@ { "Id": "VulkanMemoryAllocator", "Name": "Vulkan Memory Allocator", - "QDocModule": "qtrhi", + "QDocModule": "qtgui", "Description": "Vulkan Memory Allocator", "QtUsage": "Memory management for the Vulkan backend of QRhi.", -- cgit v1.2.3 From 2a887a517eaaa2c5324aecf3b919899b7a86ff4a Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 6 Dec 2019 18:30:55 +0100 Subject: QCalendar: Optimize std::vector access As we assert on the size of the vector before accessing it, there is no point in using the checked at() method over operator[]. Besides, if at() throws, what are we going to do with the exception anyway. Incidentally, this also works around a compiler bug causing binary incompatibility in QtQml. Change-Id: I460e7514429daecabc304eb2c5f96ed715008b0a Fixes: QTBUG-80535 Reviewed-by: Volker Hilsheimer --- src/corelib/time/qcalendar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/time/qcalendar.cpp b/src/corelib/time/qcalendar.cpp index d308aeba2b..6a4623ce92 100644 --- a/src/corelib/time/qcalendar.cpp +++ b/src/corelib/time/qcalendar.cpp @@ -100,7 +100,7 @@ struct Registry { if (id == QCalendar::System::User) { byId.push_back(calendar); } else { - Q_ASSERT(byId.at(size_t(id)) == nullptr); + Q_ASSERT(byId[size_t(id)] == nullptr); byId[size_t(id)] = calendar; } if (id == QCalendar::System::Gregorian) { @@ -618,7 +618,7 @@ const QCalendarBackend *QCalendarBackend::fromEnum(QCalendar::System system) if (calendarRegistry.isDestroyed() || system == QCalendar::System::User) return nullptr; Q_ASSERT(calendarRegistry->byId.size() >= size_t(system)); - if (auto *c = calendarRegistry->byId.at(size_t(system))) + if (auto *c = calendarRegistry->byId[size_t(system)]) return c; switch (system) { case QCalendar::System::Gregorian: -- cgit v1.2.3 From 5a660353edde7b9f382ee41ecf278fc4537f38fa Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Wed, 13 Nov 2019 10:20:09 +0100 Subject: Doc: Fix qdoc compilation errors qtbase Task-number: QTBUG-79824 Change-Id: I6557de598de1931fc30556951d35783d02b83abe Reviewed-by: Paul Wicking --- qmake/doc/src/qmake-manual.qdoc | 2 +- src/corelib/doc/src/qtcore-index.qdoc | 2 +- src/corelib/doc/src/resource-system.qdoc | 4 +- src/corelib/global/qendian.cpp | 6 +- src/corelib/io/qresource.cpp | 4 +- src/corelib/thread/qatomic.cpp | 204 ++++++++++++++++--------- src/corelib/thread/qatomic.h | 6 + src/gui/doc/src/qtgui.qdoc | 2 +- src/gui/kernel/qwindow.cpp | 2 +- src/network/ssl/qsslsocket.cpp | 2 +- src/testlib/doc/src/qttest-best-practices.qdoc | 4 +- src/widgets/styles/qstyleoption.cpp | 2 +- 12 files changed, 157 insertions(+), 83 deletions(-) diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc index ed7fe60fdc..0a8326d94a 100644 --- a/qmake/doc/src/qmake-manual.qdoc +++ b/qmake/doc/src/qmake-manual.qdoc @@ -5407,7 +5407,7 @@ \li The exit code of the test will be ignored during \c{make check}. \endtable - Testcases will often be written with \l{QTest} or \l{TestCase}, but + Test cases will often be written with \l{QTest} or \l[QML]{TestCase}, but that is not a requirement to make use of \c{CONFIG+=testcase} and \c{make check}. The only primary requirement is that the test program exit with a zero exit code on success, and a non-zero exit code on failure. diff --git a/src/corelib/doc/src/qtcore-index.qdoc b/src/corelib/doc/src/qtcore-index.qdoc index 40a6584af0..29fc25f69d 100644 --- a/src/corelib/doc/src/qtcore-index.qdoc +++ b/src/corelib/doc/src/qtcore-index.qdoc @@ -56,7 +56,7 @@ \include module-use.qdocinc using qt module \quotefile overview/using-qt-core.cmake - See also the \l[QtDoc]{Building with CMake} overview. + See also the \l[QtDoc]{Build with CMake} overview. \section2 Building with qmake diff --git a/src/corelib/doc/src/resource-system.qdoc b/src/corelib/doc/src/resource-system.qdoc index 69ec5e556b..f9ef317799 100644 --- a/src/corelib/doc/src/resource-system.qdoc +++ b/src/corelib/doc/src/resource-system.qdoc @@ -189,13 +189,13 @@ XML file to indicate a file should be most compressed, regardless of which algorithms \c rcc supports. - \li \c{zstd}: use the \l{Zstandard}{https://zstd.net} library to compress + \li \c{zstd}: use the \l{https://zstd.net}{Zstandard} library to compress contents. Valid compression levels range from 1 to 19, 1 is least compression (least CPU time) and 19 is the most compression (most CPU time). The default level is 14. A special value of 0 tells the \c{zstd} library to choose an implementation-defined default. - \li \c{zlib}: use the \l{zlib}{https://zlib.net} library to compress + \li \c{zlib}: use the \l{https://zlib.net}{zlib} library to compress contents. Valid compression levels range from 1 to 9, with 1the least compression (least CPU time) and 9 the most compression (most CPU time). The special value 0 means "no compression" and should not be used. The diff --git a/src/corelib/global/qendian.cpp b/src/corelib/global/qendian.cpp index 7fd6e13d3b..98dc6a9a4b 100644 --- a/src/corelib/global/qendian.cpp +++ b/src/corelib/global/qendian.cpp @@ -137,7 +137,7 @@ QT_BEGIN_NAMESPACE \sa qToLittleEndian() */ /*! - \fn template T qFromLittleEndian(const void *src) + \fn template inline T qFromLittleEndian(const void *src) \since 4.3 \relates @@ -159,7 +159,7 @@ QT_BEGIN_NAMESPACE \sa qToLittleEndian() */ /*! - \fn template T qFromLittleEndian(T src) + \fn template inline T qFromLittleEndian(T src) \since 4.3 \relates \overload @@ -171,7 +171,7 @@ QT_BEGIN_NAMESPACE unmodified. */ /*! - \fn template T qFromLittleEndian(const void *src, qsizetype count, void *dest) + \fn template inline T qFromLittleEndian(const void *src, qsizetype count, void *dest) \since 5.12 \relates diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 22c22ce711..5cbe49e2f7 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -280,9 +280,9 @@ static inline QStringList *resourceSearchPaths() RCC tool used to compress the payload. \value NoCompression Contents are not compressed - \value ZlibCompression Contents are compressed using \l{zlib}{https://zlib.net} and can + \value ZlibCompression Contents are compressed using \l{https://zlib.net}{zlib} and can be decompressed using the qUncompress() function. - \value ZstdCompression Contents are compressed using \l{zstd}{https://zstd.net}. To + \value ZstdCompression Contents are compressed using \l{https://zstd.net}{zstd}. To decompress, use the \c{ZSTD_decompress} function from the zstd library. diff --git a/src/corelib/thread/qatomic.cpp b/src/corelib/thread/qatomic.cpp index b1a7edad91..5c3ad9412f 100644 --- a/src/corelib/thread/qatomic.cpp +++ b/src/corelib/thread/qatomic.cpp @@ -234,22 +234,26 @@ \sa QAtomicPointer */ -/*! \fn QAtomicInt::QAtomicInt(int value) +/*! + \fn QAtomicInt::QAtomicInt(int value) Constructs a QAtomicInt with the given \a value. */ -/*! \fn QAtomicInteger::QAtomicInteger(T value) +/*! + \fn template QAtomicInteger::QAtomicInteger(T value) Constructs a QAtomicInteger with the given \a value. */ -/*! \fn template QAtomicInteger::QAtomicInteger(const QAtomicInteger &other) +/*! + \fn template QAtomicInteger::QAtomicInteger(const QAtomicInteger &other) Constructs a copy of \a other. */ -/*! \fn template QAtomicInteger &QAtomicInteger::operator=(const QAtomicInteger &other) +/*! + \fn template QAtomicInteger &QAtomicInteger::operator=(const QAtomicInteger &other) Assigns \a other to this QAtomicInteger and returns a reference to this QAtomicInteger. @@ -344,19 +348,22 @@ \sa storeRelaxed(), storeRelease() */ -/*! \fn template bool QAtomicInteger::isReferenceCountingNative() +/*! + \fn template bool QAtomicInteger::isReferenceCountingNative() Returns \c true if reference counting is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template bool QAtomicInteger::isReferenceCountingWaitFree() +/*! + \fn template bool QAtomicInteger::isReferenceCountingWaitFree() Returns \c true if atomic reference counting is wait-free, false otherwise. */ -/*! \fn template bool QAtomicInteger::ref() +/*! + \fn template bool QAtomicInteger::ref() Atomically increments the value of this QAtomicInteger. Returns \c true if the new value is non-zero, false otherwise. @@ -394,7 +401,8 @@ \sa ref(), operator++(), operator--(int) */ -/*! \fn template bool QAtomicInteger::deref() +/*! + \fn template bool QAtomicInteger::deref() Atomically decrements the value of this QAtomicInteger. Returns \c true if the new value is non-zero, false otherwise. @@ -432,18 +440,21 @@ \sa deref(), operator--(), operator++(int) */ -/*! \fn template bool QAtomicInteger::isTestAndSetNative() +/*! + \fn template bool QAtomicInteger::isTestAndSetNative() Returns \c true if test-and-set is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template bool QAtomicInteger::isTestAndSetWaitFree() +/*! + \fn template bool QAtomicInteger::isTestAndSetWaitFree() Returns \c true if atomic test-and-set is wait-free, false otherwise. */ -/*! \fn template bool QAtomicInteger::testAndSetRelaxed(T expectedValue, T newValue) +/*! + \fn template bool QAtomicInteger::testAndSetRelaxed(T expectedValue, T newValue) Atomic test-and-set. @@ -457,7 +468,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template bool QAtomicInteger::testAndSetAcquire(T expectedValue, T newValue) +/*! + \fn template bool QAtomicInteger::testAndSetAcquire(T expectedValue, T newValue) Atomic test-and-set. @@ -472,7 +484,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template bool QAtomicInteger::testAndSetRelease(T expectedValue, T newValue) +/*! + \fn template bool QAtomicInteger::testAndSetRelease(T expectedValue, T newValue) Atomic test-and-set. @@ -487,7 +500,8 @@ re-ordered after the atomic operation. */ -/*! \fn template bool QAtomicInteger::testAndSetOrdered(T expectedValue, T newValue) +/*! + \fn template bool QAtomicInteger::testAndSetOrdered(T expectedValue, T newValue) Atomic test-and-set. @@ -502,19 +516,22 @@ may not be re-ordered. */ -/*! \fn template bool QAtomicInteger::isFetchAndStoreNative() +/*! + \fn template bool QAtomicInteger::isFetchAndStoreNative() Returns \c true if fetch-and-store is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template bool QAtomicInteger::isFetchAndStoreWaitFree() +/*! + \fn template bool QAtomicInteger::isFetchAndStoreWaitFree() Returns \c true if atomic fetch-and-store is wait-free, false otherwise. */ -/*! \fn template T QAtomicInteger::fetchAndStoreRelaxed(T newValue) +/*! + \fn template T QAtomicInteger::fetchAndStoreRelaxed(T newValue) Atomic fetch-and-store. @@ -526,7 +543,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template T QAtomicInteger::fetchAndStoreAcquire(T newValue) +/*! + \fn template T QAtomicInteger::fetchAndStoreAcquire(T newValue) Atomic fetch-and-store. @@ -539,7 +557,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template T QAtomicInteger::fetchAndStoreRelease(T newValue) +/*! + \fn template T QAtomicInteger::fetchAndStoreRelease(T newValue) Atomic fetch-and-store. @@ -552,7 +571,8 @@ re-ordered after the atomic operation. */ -/*! \fn template T QAtomicInteger::fetchAndStoreOrdered(T newValue) +/*! + \fn template T QAtomicInteger::fetchAndStoreOrdered(T newValue) Atomic fetch-and-store. @@ -565,19 +585,22 @@ may not be re-ordered. */ -/*! \fn template bool QAtomicInteger::isFetchAndAddNative() +/*! + \fn template bool QAtomicInteger::isFetchAndAddNative() Returns \c true if fetch-and-add is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template bool QAtomicInteger::isFetchAndAddWaitFree() +/*! + \fn template bool QAtomicInteger::isFetchAndAddWaitFree() Returns \c true if atomic fetch-and-add is wait-free, false otherwise. */ -/*! \fn template T QAtomicInteger::fetchAndAddRelaxed(T valueToAdd) +/*! + \fn template T QAtomicInteger::fetchAndAddRelaxed(T valueToAdd) Atomic fetch-and-add. @@ -591,7 +614,8 @@ \sa operator+=(), fetchAndSubRelaxed() */ -/*! \fn template T QAtomicInteger::fetchAndAddAcquire(T valueToAdd) +/*! + \fn template T QAtomicInteger::fetchAndAddAcquire(T valueToAdd) Atomic fetch-and-add. @@ -606,7 +630,8 @@ \sa operator+=(), fetchAndSubAcquire() */ -/*! \fn template T QAtomicInteger::fetchAndAddRelease(T valueToAdd) +/*! + \fn template T QAtomicInteger::fetchAndAddRelease(T valueToAdd) Atomic fetch-and-add. @@ -621,7 +646,8 @@ \sa operator+=(), fetchAndSubRelease() */ -/*! \fn template T QAtomicInteger::fetchAndAddOrdered(T valueToAdd) +/*! + \fn template T QAtomicInteger::fetchAndAddOrdered(T valueToAdd) Atomic fetch-and-add. @@ -636,7 +662,8 @@ \sa operator+=(), fetchAndSubOrdered() */ -/*! \fn template T QAtomicInteger::operator+=(T value) +/*! + \fn template T QAtomicInteger::operator+=(T value) \since 5.3 Atomic add-and-fetch. @@ -650,7 +677,8 @@ \sa fetchAndAddOrdered(), operator-=() */ -/*! \fn template T QAtomicInteger::fetchAndSubRelaxed(T valueToSub) +/*! + \fn template T QAtomicInteger::fetchAndSubRelaxed(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -665,7 +693,8 @@ \sa operator-=(), fetchAndAddRelaxed() */ -/*! \fn template T QAtomicInteger::fetchAndSubAcquire(T valueToSub) +/*! + \fn template T QAtomicInteger::fetchAndSubAcquire(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -681,7 +710,8 @@ \sa operator-=(), fetchAndAddAcquire() */ -/*! \fn template T QAtomicInteger::fetchAndSubRelease(T valueToSub) +/*! + \fn template T QAtomicInteger::fetchAndSubRelease(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -697,7 +727,8 @@ \sa operator-=(), fetchAndAddRelease() */ -/*! \fn template T QAtomicInteger::fetchAndSubOrdered(T valueToSub) +/*! + \fn template T QAtomicInteger::fetchAndSubOrdered(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -713,7 +744,8 @@ \sa operator-=(), fetchAndAddOrdered() */ -/*! \fn template T QAtomicInteger::operator-=(T value) +/*! + \fn template T QAtomicInteger::operator-=(T value) \since 5.3 Atomic sub-and-fetch. @@ -727,7 +759,8 @@ \sa fetchAndSubOrdered(), operator+=() */ -/*! \fn template T QAtomicInteger::fetchAndOrRelaxed(T valueToOr) +/*! + \fn template T QAtomicInteger::fetchAndOrRelaxed(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -742,7 +775,8 @@ \sa operator|=() */ -/*! \fn template T QAtomicInteger::fetchAndOrAcquire(T valueToOr) +/*! + \fn template T QAtomicInteger::fetchAndOrAcquire(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -758,7 +792,8 @@ \sa operator|=() */ -/*! \fn template T QAtomicInteger::fetchAndOrRelease(T valueToOr) +/*! + \fn template T QAtomicInteger::fetchAndOrRelease(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -774,7 +809,8 @@ \sa operator|=() */ -/*! \fn template T QAtomicInteger::fetchAndOrOrdered(T valueToOr) +/*! + \fn template T QAtomicInteger::fetchAndOrOrdered(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -790,7 +826,8 @@ \sa operator|=() */ -/*! \fn template T QAtomicInteger::operator|=(T value) +/*! + \fn template T QAtomicInteger::operator|=(T value) \since 5.3 Atomic or-and-fetch. @@ -804,7 +841,8 @@ \sa fetchAndOrOrdered() */ -/*! \fn template T QAtomicInteger::fetchAndXorRelaxed(T valueToXor) +/*! + \fn template T QAtomicInteger::fetchAndXorRelaxed(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -819,7 +857,8 @@ \sa operator^=() */ -/*! \fn template T QAtomicInteger::fetchAndXorAcquire(T valueToXor) +/*! + \fn template T QAtomicInteger::fetchAndXorAcquire(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -835,7 +874,8 @@ \sa operator^=() */ -/*! \fn template T QAtomicInteger::fetchAndXorRelease(T valueToXor) +/*! + \fn template T QAtomicInteger::fetchAndXorRelease(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -851,7 +891,8 @@ \sa operator^=() */ -/*! \fn template T QAtomicInteger::fetchAndXorOrdered(T valueToXor) +/*! + \fn template T QAtomicInteger::fetchAndXorOrdered(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -867,7 +908,8 @@ \sa operator^=() */ -/*! \fn template T QAtomicInteger::operator^=(T value) +/*! + \fn template T QAtomicInteger::operator^=(T value) \since 5.3 Atomic xor-and-fetch. @@ -881,7 +923,8 @@ \sa fetchAndXorOrdered() */ -/*! \fn template T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd) +/*! + \fn template T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -896,7 +939,8 @@ \sa operator&=() */ -/*! \fn template T QAtomicInteger::fetchAndAndAcquire(T valueToAnd) +/*! + \fn template T QAtomicInteger::fetchAndAndAcquire(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -912,7 +956,8 @@ \sa operator&=() */ -/*! \fn template T QAtomicInteger::fetchAndAndRelease(T valueToAnd) +/*! + \fn template T QAtomicInteger::fetchAndAndRelease(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -928,7 +973,8 @@ \sa operator&=() */ -/*! \fn template T QAtomicInteger::fetchAndAndOrdered(T valueToAnd) +/*! + \fn template T QAtomicInteger::fetchAndAndOrdered(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -944,7 +990,8 @@ \sa operator&=() */ -/*! \fn template T QAtomicInteger::operator&=(T value) +/*! + \fn template T QAtomicInteger::operator&=(T value) \since 5.3 Atomic add-and-fetch. @@ -1287,17 +1334,20 @@ \sa QAtomicInteger */ -/*! \fn template QAtomicPointer::QAtomicPointer(T *value) +/*! + \fn template QAtomicPointer::QAtomicPointer(T *value) Constructs a QAtomicPointer with the given \a value. */ -/*! \fn template QAtomicPointer::QAtomicPointer(const QAtomicPointer &other) +/*! + \fn template QAtomicPointer::QAtomicPointer(const QAtomicPointer &other) Constructs a copy of \a other. */ -/*! \fn template QAtomicPointer &QAtomicPointer::operator=(const QAtomicPointer &other) +/*! + \fn template QAtomicPointer &QAtomicPointer::operator=(const QAtomicPointer &other) Assigns \a other to this QAtomicPointer and returns a reference to this QAtomicPointer. @@ -1369,18 +1419,21 @@ \sa storeRelaxed(), loadRelaxed() */ -/*! \fn template bool QAtomicPointer::isTestAndSetNative() +/*! + \fn template bool QAtomicPointer::isTestAndSetNative() Returns \c true if test-and-set is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template bool QAtomicPointer::isTestAndSetWaitFree() +/*! + \fn template bool QAtomicPointer::isTestAndSetWaitFree() Returns \c true if atomic test-and-set is wait-free, false otherwise. */ -/*! \fn template bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue) +/*! + \fn template bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1394,7 +1447,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue) +/*! + \fn template bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1409,7 +1463,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue) +/*! + \fn template bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1424,7 +1479,8 @@ re-ordered after the atomic operation. */ -/*! \fn template bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue) +/*! + \fn template bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1439,19 +1495,22 @@ may not be re-ordered. */ -/*! \fn template bool QAtomicPointer::isFetchAndStoreNative() +/*! + \fn template bool QAtomicPointer::isFetchAndStoreNative() Returns \c true if fetch-and-store is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template bool QAtomicPointer::isFetchAndStoreWaitFree() +/*! + \fn template bool QAtomicPointer::isFetchAndStoreWaitFree() Returns \c true if atomic fetch-and-store is wait-free, false otherwise. */ -/*! \fn template T *QAtomicPointer::fetchAndStoreRelaxed(T *newValue) +/*! + \fn template T *QAtomicPointer::fetchAndStoreRelaxed(T *newValue) Atomic fetch-and-store. @@ -1463,7 +1522,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template T *QAtomicPointer::fetchAndStoreAcquire(T *newValue) +/*! + \fn template T *QAtomicPointer::fetchAndStoreAcquire(T *newValue) Atomic fetch-and-store. @@ -1476,7 +1536,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template T *QAtomicPointer::fetchAndStoreRelease(T *newValue) +/*! + \fn template T *QAtomicPointer::fetchAndStoreRelease(T *newValue) Atomic fetch-and-store. @@ -1489,7 +1550,8 @@ re-ordered after the atomic operation. */ -/*! \fn template T *QAtomicPointer::fetchAndStoreOrdered(T *newValue) +/*! + \fn template T *QAtomicPointer::fetchAndStoreOrdered(T *newValue) Atomic fetch-and-store. @@ -1502,19 +1564,22 @@ may not be re-ordered. */ -/*! \fn template bool QAtomicPointer::isFetchAndAddNative() +/*! + \fn template bool QAtomicPointer::isFetchAndAddNative() Returns \c true if fetch-and-add is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template bool QAtomicPointer::isFetchAndAddWaitFree() +/*! + \fn template bool QAtomicPointer::isFetchAndAddWaitFree() Returns \c true if atomic fetch-and-add is wait-free, false otherwise. */ -/*! \fn template T *QAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd) +/*! + \fn template T *QAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd) Atomic fetch-and-add. @@ -1526,7 +1591,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template T *QAtomicPointer::fetchAndAddAcquire(qptrdiff valueToAdd) +/*! + \fn template T *QAtomicPointer::fetchAndAddAcquire(qptrdiff valueToAdd) Atomic fetch-and-add. @@ -1539,7 +1605,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template T *QAtomicPointer::fetchAndAddRelease(qptrdiff valueToAdd) +/*! + \fn template T *QAtomicPointer::fetchAndAddRelease(qptrdiff valueToAdd) Atomic fetch-and-add. @@ -1552,7 +1619,8 @@ re-ordered after the atomic operation. */ -/*! \fn template T *QAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd) +/*! + \fn template T *QAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd) Atomic fetch-and-add. diff --git a/src/corelib/thread/qatomic.h b/src/corelib/thread/qatomic.h index a3b9be0729..aa57ddc610 100644 --- a/src/corelib/thread/qatomic.h +++ b/src/corelib/thread/qatomic.h @@ -50,6 +50,10 @@ QT_BEGIN_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wextra") +#ifdef Q_CLANG_QDOC +# undef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS +#endif + // High-level atomic integer operations template class QAtomicInteger : public QBasicAtomicInteger @@ -194,7 +198,9 @@ public: #ifdef Q_QDOC T *load() const; T *loadAcquire() const; + T *loadRelaxed() const; void store(T *newValue); + void storeRelaxed(T *newValue); void storeRelease(T *newValue); static Q_DECL_CONSTEXPR bool isTestAndSetNative(); diff --git a/src/gui/doc/src/qtgui.qdoc b/src/gui/doc/src/qtgui.qdoc index c4e7d32de1..392b6040cb 100644 --- a/src/gui/doc/src/qtgui.qdoc +++ b/src/gui/doc/src/qtgui.qdoc @@ -62,7 +62,7 @@ \include module-use.qdocinc using qt module \quotefile overview/using-qt-gui.cmake - See also the \l[QtDoc]{Building with CMake} overview. + See also the \l[QtDoc]{Build with CMake} overview. \section2 Building with qmake diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index b71a0c54aa..f701755500 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -1344,7 +1344,7 @@ Qt::WindowStates QWindow::windowStates() const This is a hint to the window manager that this window is a dialog or pop-up on behalf of the transient parent. - In order to cause the window to be centered above its transient parent by + In order to cause the window to be centered above its transient \a parent by default, depending on the window manager, it may also be necessary to call setFlags() with a suitable \l Qt::WindowType (such as \c Qt::Dialog). diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index e302aa1761..4e9e947263 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -1512,7 +1512,7 @@ bool QSslSocket::addDefaultCaCertificates(const QString &path, QSsl::EncodingFor SSL socket's CA certificate database is initialized to the default CA certificate database. - \sa QSslConfiguration::caCertificates(), addCaCertificates() + \sa addCaCertificates() */ void QSslSocket::addDefaultCaCertificate(const QSslCertificate &certificate) { diff --git a/src/testlib/doc/src/qttest-best-practices.qdoc b/src/testlib/doc/src/qttest-best-practices.qdoc index c7fee93c80..8ad67acce6 100644 --- a/src/testlib/doc/src/qttest-best-practices.qdoc +++ b/src/testlib/doc/src/qttest-best-practices.qdoc @@ -278,8 +278,8 @@ \section2 Avoid Fixed Timeouts Avoid using hard-coded timeouts, such as QTest::qWait() to wait for some - conditions to become true. Consider using the \l QtSignalSpy class, - the \l QTRY_VERIFY() or \l QTRY_COMPARE() macros, or the \c QtSignalSpy + conditions to become true. Consider using the \l QSignalSpy class, + the \l QTRY_VERIFY() or \l QTRY_COMPARE() macros, or the \c QSignalSpy class in conjunction with the \c QTRY_ macro variants. The \c qWait() function can be used to set a delay for a fixed period diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index 01cadd9a86..237d496e0e 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -1453,7 +1453,7 @@ QStyleOptionTab::QStyleOptionTab(int version) \value None A normal tab button. \value HasFrame The tab button is positioned on a tab frame - \sa features + \sa QStyleOptionToolBar::features */ /*! -- cgit v1.2.3 From c496fee2a5b65fd1b0672923293db058486e350e Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 11 Oct 2019 14:10:39 -0700 Subject: qSwap: suppress pedantic warning about noexcept being false This warning is not in -Wall or -Wextra, but it happens in a single place, so we can reasonably suppress it. Fixes: QTBUG-79138 Change-Id: Ib5d667bf77a740c28d2efffd15ccb3f62cf8f431 Reviewed-by: Edward Welbourne Reviewed-by: Allan Sandfeld Jensen --- src/corelib/global/qglobal.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index e335916eac..e636a7cf8f 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -944,6 +944,10 @@ QT_WARNING_POP # define Q_DUMMY_COMPARISON_OPERATOR(C) #endif +QT_WARNING_PUSH +// warning: noexcept-expression evaluates to ‘false’ because of a call to ‘void swap(..., ...)' +QT_WARNING_DISABLE_GCC("-Wnoexcept") + namespace QtPrivate { namespace SwapExceptionTester { // insulate users from the "using std::swap" below @@ -963,6 +967,8 @@ inline void qSwap(T &value1, T &value2) swap(value1, value2); } +QT_WARNING_POP + #if QT_DEPRECATED_SINCE(5, 0) Q_CORE_EXPORT QT_DEPRECATED void *qMalloc(size_t size) Q_ALLOC_SIZE(1); Q_CORE_EXPORT QT_DEPRECATED void qFree(void *ptr); -- cgit v1.2.3 From 1dca7087e9a8ae6bdeb46be4f57948549c1f7362 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 12 Dec 2019 09:50:16 +0100 Subject: Account for when qtquickcompiler is used when getting the resources When passing the resources used to the android deployment setting json file it needs to check the variable generated by the qtquickcompiler feature so that it can still find the qrc files originally populated in the resources. This ensures that qmlimportscanner can still scan the original qrc files when determining which QML import plugins are needed. Fixes: QTBUG-80713 Change-Id: I695b289eaaa78cc6c355fa8abd22a8a1031a9f6c Reviewed-by: BogDan Vatra --- mkspecs/features/android/android_deployment_settings.prf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/android/android_deployment_settings.prf b/mkspecs/features/android/android_deployment_settings.prf index e781eb024c..f375a687a9 100644 --- a/mkspecs/features/android/android_deployment_settings.prf +++ b/mkspecs/features/android/android_deployment_settings.prf @@ -63,11 +63,12 @@ contains(TEMPLATE, ".*app"):!build_pass:!android-embedded { QML_ROOT_PATH = $$_PRO_FILE_PWD_ FILE_CONTENT += " \"qml-root-path\": $$emitString($$QML_ROOT_PATH)," FILE_CONTENT += " \"stdcpp-path\": $$emitString($$ANDROID_STDCPP_PATH)," - !isEmpty(RESOURCES) { + !isEmpty(RESOURCES)|!isEmpty(QMLCACHE_RESOURCE_FILES) { # Make sure that qmake generated qrc files are accounted for load(resources_functions) qtFlattenResources() - for(resource, RESOURCES) { + NEWRESOURCES = $$RESOURCES $$QMLCACHE_RESOURCE_FILES + for(resource, NEWRESOURCES) { contains(resource, ".*\\qmake_qmake_immediate.qrc$") { # They will be created for each architecture, since they could be different # we need to account for all of them -- cgit v1.2.3 From f733c1c6e70e14fa64923f6601273d3a7d7f2325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 5 Dec 2019 16:08:11 +0100 Subject: Xcode: Use output directory as SYMROOT when shadow-building Setting the CONFIGURATION_BUILD_DIR variable to tell Xcode where to place the final application bundle confuses Xcode when archiving a project, and the archive ends up without the dSYM files. Unfortunately we can't leave it up to Xcode to place the build artifacts wherever it wants, as Qt Creator's iOS support expects to find the artifacts in a well-defined place. Until we've taught Qt Creator to find the artifacts for deployment where Xcode placed them we need to keep this logic. We now avoid setting the CONFIGURATION_BUILD_DIR variable unless we really need to due to in-source builds. As long as we're dealing with a shadow-build it's okey to set SYMROOT. Change-Id: I9661c1c57725dc8ba5a21f8467b8b61834f2e64d Fixes: QTBUG-74841 Task-number: QTBUG-52474 Reviewed-by: Joerg Bornemann --- qmake/generators/mac/pbuilder_pbx.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp index 24e69444c9..c2f6df7787 100644 --- a/qmake/generators/mac/pbuilder_pbx.cpp +++ b/qmake/generators/mac/pbuilder_pbx.cpp @@ -1629,17 +1629,24 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } } - // The symroot is marked by xcodebuild as excluded from Time Machine - // backups, as it's a temporary build dir, so we don't want it to be - // the same as the possibe in-source dir, as that would leave out - // sources from being backed up. - t << "\t\t\t\t" << writeSettings("SYMROOT", - Option::output_dir + Option::dir_sep + ".xcode") << ";\n"; - - // The configuration build dir however is not treated as excluded, - // so we can safely point it to the root output dir. - t << "\t\t\t\t" << writeSettings("CONFIGURATION_BUILD_DIR", - Option::output_dir + Option::dir_sep + "$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)") << ";\n"; + if (Option::output_dir != qmake_getpwd()) { + // The SYMROOT is marked by Xcode as excluded from Time Machine + // backups, as it's a temporary build dir, but that's fine when + // we are shadow building. + t << "\t\t\t\t" << writeSettings("SYMROOT", "$(PROJECT_DIR)") << ";\n"; + } else { + // For in-source builds we don't want to exclude the sources + // from being backed up, so we point SYMROOT to a temporary + // build directory. + t << "\t\t\t\t" << writeSettings("SYMROOT", ".xcode") << ";\n"; + + // Then we set the configuration build dir instead, so that the + // final build artifacts end up in the place Qt Creator expects. + // The disadvantage of using this over SYMROOT is that Xcode will + // fail to archive projects that override this variable. + t << "\t\t\t\t" << writeSettings("CONFIGURATION_BUILD_DIR", + "$(PROJECT_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)") << ";\n"; + } if (!project->isEmpty("DESTDIR")) { ProString dir = project->first("DESTDIR"); -- cgit v1.2.3 From 14071b5a8e15b1f9ce0bf601a96ae365fa8983aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 21 Jun 2019 13:40:50 +0200 Subject: Clarify call to initializeWidgetFontHash in QApplication::setStyle The call was added in c49c96fbb13912, "Reinitialize system palette when setting a new style", but adding it along with the palette code seems like a mistake. The potentially dirty widget font hash needs to be reset for all style changes. Change-Id: I411f56bb833819213c5485d7585fc5e3e9bd8983 Reviewed-by: Timur Pocheptsov --- src/widgets/kernel/qapplication.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index dfa1bc23b1..b3938df78a 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -1133,12 +1133,18 @@ void QApplication::setStyle(QStyle *style) } else if (QApplicationPrivate::sys_pal) { clearSystemPalette(); initSystemPalette(); - QApplicationPrivate::initializeWidgetFontHash(); } else if (!QApplicationPrivate::sys_pal) { // Initialize the sys_pal if it hasn't happened yet... QApplicationPrivate::setSystemPalette(QApplicationPrivate::app_style->standardPalette()); } + // The default widget font hash is based on the platform theme, + // not the style, but the widget fonts could in theory have been + // affected by polish of the previous style, without a proper + // cleanup in unpolish, so reset it now before polishing the + // new style. + QApplicationPrivate::initializeWidgetFontHash(); + // initialize the application with the new style QApplicationPrivate::app_style->polish(qApp); -- cgit v1.2.3 From 6b06f12da6d5171d02764e9d6636c59731e2289f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 21 Jun 2019 13:45:39 +0200 Subject: Unify system palette initialization during style change We let initSystemPalette() do all the work, instead of leaving the first time initialization of the system palette to the caller, which makes the logic harder to follow. This also means first time initialization of the system palette will pick up a platform theme if available and resolve the palette using that, which was missing from the original logic. Change-Id: I84da557caf8ecedf6d96d87ebee93168ea9d73ba Reviewed-by: Timur Pocheptsov --- src/widgets/kernel/qapplication.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index b3938df78a..37948ecd8c 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -142,16 +142,19 @@ QApplicationPrivate *QApplicationPrivate::self = 0; static void initSystemPalette() { - if (!QApplicationPrivate::sys_pal) { - QPalette defaultPlatte; - if (QApplicationPrivate::app_style) - defaultPlatte = QApplicationPrivate::app_style->standardPalette(); - if (const QPalette *themePalette = QGuiApplicationPrivate::platformTheme()->palette()) { - QApplicationPrivate::setSystemPalette(themePalette->resolve(defaultPlatte)); - QApplicationPrivate::initializeWidgetPaletteHash(); - } else { - QApplicationPrivate::setSystemPalette(defaultPlatte); - } + if (QApplicationPrivate::sys_pal) + return; // Already initialized + + QPalette defaultPalette; + if (QApplicationPrivate::app_style) + defaultPalette = QApplicationPrivate::app_style->standardPalette(); + + auto *platformTheme = QGuiApplicationPrivate::platformTheme(); + if (const QPalette *themePalette = platformTheme ? platformTheme->palette() : nullptr) { + QApplicationPrivate::setSystemPalette(themePalette->resolve(defaultPalette)); + QApplicationPrivate::initializeWidgetPaletteHash(); + } else { + QApplicationPrivate::setSystemPalette(defaultPalette); } } @@ -1130,12 +1133,10 @@ void QApplication::setStyle(QStyle *style) // might call QApplication::setPalette() itself if (QApplicationPrivate::set_pal) { QApplication::setPalette(*QApplicationPrivate::set_pal); - } else if (QApplicationPrivate::sys_pal) { - clearSystemPalette(); + } else { + if (QApplicationPrivate::sys_pal) + clearSystemPalette(); initSystemPalette(); - } else if (!QApplicationPrivate::sys_pal) { - // Initialize the sys_pal if it hasn't happened yet... - QApplicationPrivate::setSystemPalette(QApplicationPrivate::app_style->standardPalette()); } // The default widget font hash is based on the platform theme, -- cgit v1.2.3 From f6a2b81eabae81110f678263be8558c24072c458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 21 Jun 2019 14:04:46 +0200 Subject: Update system palette on application init if needed A style may have been set before the application was created, which would have resulted in setting the system palette based on the style's palette. Once the application is initialized and we have a platform theme we need to reset the system palette. Change-Id: Ia48f57d3983535c8633741d8027f75bc0c214018 Reviewed-by: Timur Pocheptsov --- src/widgets/kernel/qapplication.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 37948ecd8c..f546ec9187 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -555,6 +555,12 @@ void QApplicationPrivate::init() // Must be called before initialize() QColormap::initialize(); + if (sys_pal) { + // Now that we have a platform theme we need to reset + // the system palette to pick up the theme colors. + clearSystemPalette(); + initSystemPalette(); + } qt_init_tooltip_palette(); QApplicationPrivate::initializeWidgetFontHash(); -- cgit v1.2.3 From a9e628e7ec6b9d5bb38e64b7129c68320322033b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 21 Jun 2019 14:17:50 +0200 Subject: Ensure override style properly clears out previous style if set QApplication::setStyle has quite a bit of logic to clean up from the old style before setting a new one. If a style has been set before the application is created, it's not enough to just delete the existing style, we need to treat it like a normal style switch. Change-Id: I2bcc2eb75567bf1bc8a32ac31467b22315a70a0b Reviewed-by: Timur Pocheptsov --- src/widgets/kernel/qapplication.cpp | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index f546ec9187..fc3b73924e 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -434,13 +434,6 @@ void QApplicationPrivate::process_cmdline() if (styleOverride.isEmpty() && qEnvironmentVariableIsSet("QT_STYLE_OVERRIDE")) styleOverride = QString::fromLocal8Bit(qgetenv("QT_STYLE_OVERRIDE")); - if (!styleOverride.isEmpty()) { - if (app_style) { - delete app_style; - app_style = 0; - } - } - // process platform-indep command line if (!qt_is_gui_used || !argc) return; @@ -606,8 +599,20 @@ void QApplicationPrivate::initialize() // needed for widgets in QML QAbstractDeclarativeData::setWidgetParent = QWidgetPrivate::setWidgetParentHelper; - if (application_type != QApplicationPrivate::Tty) - (void) QApplication::style(); // trigger creation of application style + if (application_type != QApplicationPrivate::Tty) { + if (!styleOverride.isEmpty()) { + if (auto *style = QStyleFactory::create(styleOverride.toLower())) { + QApplication::setStyle(style); + } else { + qWarning("QApplication: invalid style override '%s' passed, ignoring it.\n" + "\tAvailable styles: %s", qPrintable(styleOverride), + qPrintable(QStyleFactory::keys().join(QLatin1String(", ")))); + } + } + + // Trigger default style if none was set already + Q_UNUSED(QApplication::style()); + } #if QT_CONFIG(statemachine) // trigger registering of QStateMachine's GUI types qRegisterGuiStateMachine(); @@ -1036,15 +1041,6 @@ QStyle *QApplication::style() // Compile-time search for default style // QStyle *&app_style = QApplicationPrivate::app_style; - - if (!QApplicationPrivate::styleOverride.isEmpty()) { - const QString style = QApplicationPrivate::styleOverride.toLower(); - app_style = QStyleFactory::create(style); - if (Q_UNLIKELY(!app_style)) { - qWarning("QApplication: invalid style override passed, ignoring it.\n" - " Available styles: %s", qPrintable(QStyleFactory::keys().join(QLatin1String(", ")))); - } - } if (!app_style) app_style = QStyleFactory::create(QApplicationPrivate::desktopStyleKey()); -- cgit v1.2.3 From 96d1d44279dc582355c21956fee99d945888fb07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 25 Jun 2019 16:02:17 +0200 Subject: Clean up QApplication::style default style construction Change-Id: I9f01e7cc5fa90fd9b1f5d12c7ce694c231158c32 Reviewed-by: Timur Pocheptsov --- src/widgets/kernel/qapplication.cpp | 49 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index fc3b73924e..1f26e6e41c 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -1030,46 +1030,45 @@ void QApplication::setStyleSheet(const QString& styleSheet) */ QStyle *QApplication::style() { - if (QApplicationPrivate::app_style) - return QApplicationPrivate::app_style; - if (!qobject_cast(QCoreApplication::instance())) { - Q_ASSERT(!"No style available without QApplication!"); - return 0; - } - if (!QApplicationPrivate::app_style) { - // Compile-time search for default style - // - QStyle *&app_style = QApplicationPrivate::app_style; - if (!app_style) - app_style = QStyleFactory::create(QApplicationPrivate::desktopStyleKey()); + // Create default style + if (!qobject_cast(QCoreApplication::instance())) { + Q_ASSERT(!"No style available without QApplication!"); + return nullptr; + } + + auto &defaultStyle = QApplicationPrivate::app_style; - if (!app_style) { + defaultStyle = QStyleFactory::create(QApplicationPrivate::desktopStyleKey()); + if (!defaultStyle) { const QStringList styles = QStyleFactory::keys(); for (const auto &style : styles) { - if ((app_style = QStyleFactory::create(style))) + if ((defaultStyle = QStyleFactory::create(style))) break; } } - if (!app_style) { + if (!defaultStyle) { Q_ASSERT(!"No styles available!"); return 0; } - } - // take ownership of the style - QApplicationPrivate::app_style->setParent(qApp); - initSystemPalette(); + // Take ownership of the style + defaultStyle->setParent(qApp); - if (QApplicationPrivate::set_pal) // repolish set palette with the new style - QApplication::setPalette(*QApplicationPrivate::set_pal); + initSystemPalette(); + + if (QApplicationPrivate::set_pal) // Re-polish set palette with the new style + QApplication::setPalette(*QApplicationPrivate::set_pal); #ifndef QT_NO_STYLE_STYLESHEET - if (!QApplicationPrivate::styleSheet.isEmpty()) { - qApp->setStyleSheet(QApplicationPrivate::styleSheet); - } else + if (!QApplicationPrivate::styleSheet.isEmpty()) { + qApp->setStyleSheet(QApplicationPrivate::styleSheet); + } else #endif - QApplicationPrivate::app_style->polish(qApp); + { + defaultStyle->polish(qApp); + } + } return QApplicationPrivate::app_style; } -- cgit v1.2.3 From da0e7457523a5c6867c2d9b9f0346167738f0323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 25 Jun 2019 16:24:33 +0200 Subject: Explicitly polish palette instead of relying on QApplication::setPalette The only effect calling QApplication::setPalette will have is the polish, so opt for doing it explicitly instead of the weirdly looking no-op assignment. Change-Id: Ia80b3f60e3e513b68c2993ea8417966f9ab6721e Reviewed-by: Timur Pocheptsov --- src/widgets/kernel/qapplication.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 1f26e6e41c..2a1a21596c 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -1057,8 +1057,8 @@ QStyle *QApplication::style() initSystemPalette(); - if (QApplicationPrivate::set_pal) // Re-polish set palette with the new style - QApplication::setPalette(*QApplicationPrivate::set_pal); + if (auto *explicitlySetPalette = QApplicationPrivate::set_pal) + defaultStyle->polish(*explicitlySetPalette); #ifndef QT_NO_STYLE_STYLESHEET if (!QApplicationPrivate::styleSheet.isEmpty()) { @@ -1132,8 +1132,8 @@ void QApplication::setStyle(QStyle *style) // take care of possible palette requirements of certain gui // styles. Do it before polishing the application since the style // might call QApplication::setPalette() itself - if (QApplicationPrivate::set_pal) { - QApplication::setPalette(*QApplicationPrivate::set_pal); + if (auto *explicitlySetPalette = QApplicationPrivate::set_pal) { + QApplicationPrivate::app_style->polish(*explicitlySetPalette); } else { if (QApplicationPrivate::sys_pal) clearSystemPalette(); -- cgit v1.2.3 From 072ca960f517f0cdfcb768dcbeebba2212a6c21e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 20 Jun 2019 14:50:48 +0200 Subject: styles example: Set default style up front, and react to style changes Allows running the example with -style foo or QT_STYLE_OVERRIDE. No changes to documentation needed. Change-Id: Id7cef450f13faabd118badde51afb7273439c9fc Reviewed-by: Timur Pocheptsov --- examples/widgets/widgets/styles/main.cpp | 3 +++ .../widgets/widgets/styles/norwegianwoodstyle.cpp | 1 + examples/widgets/widgets/styles/widgetgallery.cpp | 26 ++++++++++++++++++---- examples/widgets/widgets/styles/widgetgallery.h | 4 ++++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/examples/widgets/widgets/styles/main.cpp b/examples/widgets/widgets/styles/main.cpp index d340719984..471589d3ad 100644 --- a/examples/widgets/widgets/styles/main.cpp +++ b/examples/widgets/widgets/styles/main.cpp @@ -50,12 +50,15 @@ #include +#include "norwegianwoodstyle.h" #include "widgetgallery.h" int main(int argc, char *argv[]) { Q_INIT_RESOURCE(styles); + QApplication::setStyle(new NorwegianWoodStyle); + QApplication app(argc, argv); WidgetGallery gallery; gallery.show(); diff --git a/examples/widgets/widgets/styles/norwegianwoodstyle.cpp b/examples/widgets/widgets/styles/norwegianwoodstyle.cpp index 0f614a2e9a..bbdb626a18 100644 --- a/examples/widgets/widgets/styles/norwegianwoodstyle.cpp +++ b/examples/widgets/widgets/styles/norwegianwoodstyle.cpp @@ -58,6 +58,7 @@ NorwegianWoodStyle::NorwegianWoodStyle() : QProxyStyle(QStyleFactory::create("windows")) { + setObjectName("NorwegianWood"); } //! [0] diff --git a/examples/widgets/widgets/styles/widgetgallery.cpp b/examples/widgets/widgets/styles/widgetgallery.cpp index 7e1616c6c0..d70c503f53 100644 --- a/examples/widgets/widgets/styles/widgetgallery.cpp +++ b/examples/widgets/widgets/styles/widgetgallery.cpp @@ -143,6 +143,7 @@ WidgetGallery::WidgetGallery(QWidget *parent) setLayout(mainLayout); setWindowTitle(tr("Styles")); + styleChanged(); } //! [4] @@ -150,12 +151,10 @@ WidgetGallery::WidgetGallery(QWidget *parent) void WidgetGallery::changeStyle(const QString &styleName) //! [5] //! [6] { - if (styleName == "NorwegianWood") { + if (styleName == "NorwegianWood") QApplication::setStyle(new NorwegianWoodStyle); - } else { + else QApplication::setStyle(QStyleFactory::create(styleName)); - } - changePalette(); } //! [6] @@ -170,6 +169,25 @@ void WidgetGallery::changePalette() } //! [8] +void WidgetGallery::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::StyleChange) + styleChanged(); +} + +void WidgetGallery::styleChanged() +{ + auto styleName = QApplication::style()->objectName(); + for (int i = 0; i < styleComboBox->count(); ++i) { + if (QString::compare(styleComboBox->itemText(i), styleName, Qt::CaseInsensitive) == 0) { + styleComboBox->setCurrentIndex(i); + break; + } + } + + changePalette(); +} + //! [9] void WidgetGallery::advanceProgressBar() //! [9] //! [10] diff --git a/examples/widgets/widgets/styles/widgetgallery.h b/examples/widgets/widgets/styles/widgetgallery.h index 9ee65c21c4..4deee6839a 100644 --- a/examples/widgets/widgets/styles/widgetgallery.h +++ b/examples/widgets/widgets/styles/widgetgallery.h @@ -80,8 +80,12 @@ class WidgetGallery : public QDialog public: WidgetGallery(QWidget *parent = nullptr); +protected: + void changeEvent(QEvent *) override; + private slots: void changeStyle(const QString &styleName); + void styleChanged(); void changePalette(); void advanceProgressBar(); -- cgit v1.2.3 From df69364469c6816dab0f364f0687946a8d566679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 25 Jun 2019 16:53:37 +0200 Subject: Remove QApplicationPrivate::set_pal Its purpose was to track the default palette set by the programmer, but after 8fb881900c this is tracked by the Qt::AA_SetPalette attribute. The palette itself is always reflected 1:1 in the palette tracked by QGuiApplicationPrivate::app_pal. Change-Id: If3e84c8b3ae6070b6c50be7a33adb38799b3f3a5 Reviewed-by: Timur Pocheptsov --- src/widgets/kernel/qapplication.cpp | 18 ++++++------------ src/widgets/kernel/qapplication_p.h | 1 - 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 2a1a21596c..5a21a3a15c 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -382,7 +382,6 @@ QString QApplicationPrivate::styleSheet; // default application styles QPointer QApplicationPrivate::leaveAfterRelease = 0; QPalette *QApplicationPrivate::sys_pal = 0; // default system palette -QPalette *QApplicationPrivate::set_pal = 0; // default palette set by programmer QFont *QApplicationPrivate::sys_font = 0; // default system font QFont *QApplicationPrivate::set_font = 0; // default font set by programmer @@ -803,8 +802,6 @@ QApplication::~QApplication() delete QApplicationPrivate::app_pal; QApplicationPrivate::app_pal = 0; clearSystemPalette(); - delete QApplicationPrivate::set_pal; - QApplicationPrivate::set_pal = 0; app_palettes()->clear(); delete QApplicationPrivate::sys_font; @@ -1057,8 +1054,8 @@ QStyle *QApplication::style() initSystemPalette(); - if (auto *explicitlySetPalette = QApplicationPrivate::set_pal) - defaultStyle->polish(*explicitlySetPalette); + if (testAttribute(Qt::AA_SetPalette)) + defaultStyle->polish(*QGuiApplicationPrivate::app_pal); #ifndef QT_NO_STYLE_STYLESHEET if (!QApplicationPrivate::styleSheet.isEmpty()) { @@ -1132,8 +1129,8 @@ void QApplication::setStyle(QStyle *style) // take care of possible palette requirements of certain gui // styles. Do it before polishing the application since the style // might call QApplication::setPalette() itself - if (auto *explicitlySetPalette = QApplicationPrivate::set_pal) { - QApplicationPrivate::app_style->polish(*explicitlySetPalette); + if (testAttribute(Qt::AA_SetPalette)) { + QApplicationPrivate::app_style->polish(*QGuiApplicationPrivate::app_pal); } else { if (QApplicationPrivate::sys_pal) clearSystemPalette(); @@ -1397,11 +1394,8 @@ void QApplicationPrivate::setPalette_helper(const QPalette &palette, const char* // Send ApplicationPaletteChange to qApp itself, and to the widgets. qApp->d_func()->sendApplicationPaletteChange(all, className); } + if (!className && (!QApplicationPrivate::sys_pal || !palette.isCopyOf(*QApplicationPrivate::sys_pal))) { - if (!QApplicationPrivate::set_pal) - QApplicationPrivate::set_pal = new QPalette(palette); - else - *QApplicationPrivate::set_pal = palette; QCoreApplication::setAttribute(Qt::AA_SetPalette); emit qGuiApp->paletteChanged(*QGuiApplicationPrivate::app_pal); } @@ -1444,7 +1438,7 @@ void QApplicationPrivate::setSystemPalette(const QPalette &pal) else *sys_pal = pal; - if (!QApplicationPrivate::set_pal) + if (!testAttribute(Qt::AA_SetPalette)) QApplication::setPalette(*sys_pal); } diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h index 3167bd423f..79d06ed98c 100644 --- a/src/widgets/kernel/qapplication_p.h +++ b/src/widgets/kernel/qapplication_p.h @@ -162,7 +162,6 @@ public: static QWidgetList *popupWidgets; static QStyle *app_style; static QPalette *sys_pal; - static QPalette *set_pal; protected: void notifyThemeChanged() override; -- cgit v1.2.3 From a3a6f28427de260ab827fc405b53b6f162f1ec90 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Fri, 13 Dec 2019 12:04:14 +0100 Subject: OpenGL: Fix signature of GLDEBUGPROC in qopenglextrafunctions.h The typedef "QOPENGLF_APIENTRYP" was incompatible to the one in "src/opengl/qopengldebug.cpp" which used "QOPENGLF_APIENTRY". Note the misisng "P " ending. The type is meant to be a function pointer, not a pointer to a function pointer, so remove the extra P. Change-Id: I229b73ca8e7367f88a2b48e2728e615605f02da3 Reviewed-by: Laszlo Agocs --- src/gui/opengl/qopenglextrafunctions.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/opengl/qopenglextrafunctions.h b/src/gui/opengl/qopenglextrafunctions.h index a68e269065..faac2dce4e 100644 --- a/src/gui/opengl/qopenglextrafunctions.h +++ b/src/gui/opengl/qopenglextrafunctions.h @@ -54,7 +54,7 @@ // GLES build without having included gl32.h -> GLDEBUGPROC is still need for the protos, define it here #if defined(QT_OPENGL_ES_2) && !defined(QT_OPENGL_ES_3_2) -typedef void (QOPENGLF_APIENTRYP *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (QOPENGLF_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #endif QT_BEGIN_NAMESPACE -- cgit v1.2.3 From 4689e198e76e054ef51254c0724064ba61408625 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Fri, 13 Dec 2019 15:13:39 +0100 Subject: Doc/SQL: update sql driver creation instructions Fix the links, remove section about Q_ODBC_VERSION_2 - it wasn't there since Qt5.0. Change-Id: I571f5c2cf0f0e2df38638299c26814b510d1a8af Reviewed-by: Paul Wicking --- src/sql/doc/src/sql-driver.qdoc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/sql/doc/src/sql-driver.qdoc b/src/sql/doc/src/sql-driver.qdoc index 9c26c4089c..3a0fcfa1e7 100644 --- a/src/sql/doc/src/sql-driver.qdoc +++ b/src/sql/doc/src/sql-driver.qdoc @@ -171,7 +171,8 @@ \section3 How to Build the QMYSQL Plugin on Windows You need to get the MySQL installation files (e.g. - \e{mysql-installer-web-community-8.0.18.0.msi}). Run the installer, + \l {https://dev.mysql.com/downloads/installer/}{mysql-installer-web-community-8.0.18.0.msi}). + Run the installer, select custom installation and install the MySQL C Connector which matches your Qt installation (x86 or x64). After installation make sure that the needed files are there: @@ -192,9 +193,9 @@ When you distribute your application, remember to include libmysql.dll in your installation package. It must be placed in the same folder - as the application executable. libmysql.dll additionally needs the + as the application executable. \e libmysql.dll additionally needs the MSVC runtime libraries which can be installed with vcredist.exe - (\l {https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads}(vcredist.exe) + (\l {https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads}{vcredist.exe} \target QOCI \section2 QOCI for the Oracle Call Interface (OCI) @@ -356,10 +357,6 @@ Windows NT based systems, this is the default. Note that the ODBC driver and the DBMS must also support Unicode. - Some driver managers and drivers do not support UNICODE. To use the - QODBC plugin with such drivers, it has to be compiled with - Q_ODBC_VERSION_2 defined. - For the Oracle 9 ODBC driver (Windows), it is necessary to check "SQL_WCHAR support" in the ODBC driver manager otherwise Oracle will convert all Unicode strings to local 8-bit. -- cgit v1.2.3 From 0edd2e39ad7f959c3d0c56e79abd3c60d9950538 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Wed, 11 Dec 2019 19:48:53 +0100 Subject: Let QItemSelectionModel::columnIntersectsSelection honor the parent QItemSelectionModel::columnIntersectsSelection() should honor the parent according to the docs. For rowIntersectsSelection() this was fixed a long time ago but columnIntersectsSelection() was forgotten. Sync the both functions and use range-based for loops as a drive-by. Fixes: QTBUG-80644 Change-Id: Iaf08f85e2225204d1e6564fa4bb0bc826352ed53 Reviewed-by: Friedemann Kleint Reviewed-by: Richard Moe Gustavsen --- src/corelib/itemmodels/qitemselectionmodel.cpp | 17 +++++++++-------- .../qitemselectionmodel/tst_qitemselectionmodel.cpp | 4 ++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp index c93a4d15b9..ebcc3b10ca 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.cpp +++ b/src/corelib/itemmodels/qitemselectionmodel.cpp @@ -1627,10 +1627,9 @@ bool QItemSelectionModel::rowIntersectsSelection(int row, const QModelIndex &par QItemSelection sel = d->ranges; sel.merge(d->currentSelection, d->currentCommand); - for (int i = 0; i < sel.count(); ++i) { - QItemSelectionRange range = sel.at(i); + for (const QItemSelectionRange &range : qAsConst(sel)) { if (range.parent() != parent) - return false; + return false; int top = range.top(); int bottom = range.bottom(); int left = range.left(); @@ -1661,11 +1660,13 @@ bool QItemSelectionModel::columnIntersectsSelection(int column, const QModelInde QItemSelection sel = d->ranges; sel.merge(d->currentSelection, d->currentCommand); - for (int i = 0; i < sel.count(); ++i) { - int left = sel.at(i).left(); - int right = sel.at(i).right(); - int top = sel.at(i).top(); - int bottom = sel.at(i).bottom(); + for (const QItemSelectionRange &range : qAsConst(sel)) { + if (range.parent() != parent) + return false; + int top = range.top(); + int bottom = range.bottom(); + int left = range.left(); + int right = range.right(); if (left <= column && right >= column) { for (int j = top; j <= bottom; j++) { const Qt::ItemFlags flags = d->model->index(j, column, parent).flags(); diff --git a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp index c74101928a..80e5456306 100644 --- a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp +++ b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp @@ -2037,12 +2037,16 @@ void tst_QItemSelectionModel::rowIntersectsSelection3() QModelIndex parent; QVERIFY(!selectionModel.rowIntersectsSelection(0, parent)); + QVERIFY(!selectionModel.columnIntersectsSelection(0, parent)); parent = model.index(0, 0, parent); QVERIFY(selectionModel.rowIntersectsSelection(0, parent)); + QVERIFY(selectionModel.columnIntersectsSelection(0, parent)); parent = model.index(0, 0, parent); QVERIFY(!selectionModel.rowIntersectsSelection(0, parent)); + QVERIFY(!selectionModel.columnIntersectsSelection(0, parent)); parent = model.index(0, 0, parent); QVERIFY(!selectionModel.rowIntersectsSelection(0, parent)); + QVERIFY(!selectionModel.columnIntersectsSelection(0, parent)); } void tst_QItemSelectionModel::unselectable() -- cgit v1.2.3 From 98f19f00361bf25097281cae5dfa833ba7db8a2f Mon Sep 17 00:00:00 2001 From: Marius Kittler Date: Sat, 7 Sep 2019 20:05:42 +0200 Subject: Use pkg-config to find libjpeg Change-Id: I42d877fbca5d746114cc28f8ee4db3e54754cd24 Reviewed-by: Thiago Macieira --- src/gui/configure.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/configure.json b/src/gui/configure.json index 19312d245d..0202f17b21 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -374,6 +374,7 @@ }, "headers": "jpeglib.h", "sources": [ + { "type": "pkgConfig", "args": "libjpeg" }, { "libs": "-llibjpeg", "condition": "config.msvc" }, "-ljpeg" ] -- cgit v1.2.3