Merge remote-tracking branch 'origin/7.0'

Change-Id: Ic646cdb2a14e5a2638ff88a922067dcf378dde5b
This commit is contained in:
Eike Ziller
2022-02-02 10:47:20 +01:00
191 changed files with 2606 additions and 1601 deletions

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
## Add paths to check for cmake modules:
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
@@ -138,15 +138,8 @@ endif()
add_subdirectory(doc)
# TODO: Remove when cmake_minimum_required greater than 3.12
if (CMAKE_VERSION VERSION_GREATER 3.12)
find_package(Python3 COMPONENTS Interpreter)
set(PYTHONINTERP_FOUND ${Python3_Interpreter_FOUND})
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
else()
find_package(PythonInterp)
endif()
if (NOT PYTHONINTERP_FOUND)
if (NOT Python3_Interpreter_FOUND)
message("No python interpreter found, skipping \"Dependencies\" install component.")
else()
get_target_property(_qmake_binary Qt5::qmake IMPORTED_LOCATION)
@@ -161,7 +154,7 @@ else()
endif()
install(CODE "
execute_process(COMMAND
\"${PYTHON_EXECUTABLE}\"
\"${Python3_EXECUTABLE}\"
\"${CMAKE_CURRENT_LIST_DIR}/scripts/deployqt.py\"
${_llvm_arg}
${_elfutils_arg}

View File

@@ -2,7 +2,7 @@ find_package(Clang CONFIG)
# silence a lot of warnings from building against llvm
if(MSVC AND TARGET libclang)
target_compile_options(libclang INTERFACE /wd4100 /wd4141 /wd4146 /wd4244 /wd4267 /wd4291)
target_compile_options(libclang INTERFACE /wd4267)
endif()
option(CLANGTOOLING_LINK_CLANG_DYLIB "Force linking of Clang tooling against clang-cpp" NO)

View File

@@ -155,20 +155,6 @@ function(add_qtc_library name)
return()
endif()
# TODO copied from extend_qtc_target.
# Instead require CMake 3.11 and use extend_qtc_target for setting SOURCES.
# Requiring cmake 3.11 is necessary because before that add_library requires
# at least one source file.
if (_arg_SOURCES_PREFIX)
foreach(source IN LISTS _arg_SOURCES)
list(APPEND prefixed_sources "${_arg_SOURCES_PREFIX}/${source}")
endforeach()
if (NOT IS_ABSOLUTE ${_arg_SOURCES_PREFIX})
set(_arg_SOURCES_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/${_arg_SOURCES_PREFIX}")
endif()
set(_arg_SOURCES ${prefixed_sources})
endif()
set(library_type SHARED)
if (_arg_STATIC)
set(library_type STATIC)
@@ -177,16 +163,9 @@ function(add_qtc_library name)
set(library_type OBJECT)
endif()
add_library(${name} ${library_type} ${_arg_SOURCES})
add_library(${name} ${library_type})
add_library(QtCreator::${name} ALIAS ${name})
set_public_headers(${name} "${_arg_SOURCES}")
# TODO remove, see above
if (_arg_SOURCES_PREFIX)
target_include_directories(${name} PRIVATE $<BUILD_INTERFACE:${_arg_SOURCES_PREFIX}>)
endif()
if (${name} MATCHES "^[^0-9-]+$")
string(TOUPPER "${name}_LIBRARY" EXPORT_SYMBOL)
endif()
@@ -201,6 +180,8 @@ function(add_qtc_library name)
endif()
extend_qtc_target(${name}
SOURCES_PREFIX ${_arg_SOURCES_PREFIX}
SOURCES ${_arg_SOURCES}
INCLUDES ${_arg_INCLUDES}
PUBLIC_INCLUDES ${_arg_PUBLIC_INCLUDES}
DEFINES ${EXPORT_SYMBOL} ${default_defines_copy} ${_arg_DEFINES} ${TEST_DEFINES}

View File

@@ -1,5 +1,5 @@
if (CMAKE_VERSION VERSION_LESS 3.18)
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_VERSION VERSION_LESS 3.16)
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU)
set(BUILD_WITH_PCH OFF CACHE BOOL "" FORCE)
endif()
endif()
@@ -183,31 +183,6 @@ function(update_cached_list name value)
set("${name}" "${_tmp_list}" CACHE INTERNAL "*** Internal ***")
endfunction()
function(separate_object_libraries libraries REGULAR_LIBS OBJECT_LIBS OBJECT_LIB_OBJECTS)
if (CMAKE_VERSION VERSION_LESS 3.14)
foreach(lib IN LISTS libraries)
if (TARGET ${lib})
get_target_property(lib_type ${lib} TYPE)
if (lib_type STREQUAL "OBJECT_LIBRARY")
list(APPEND object_libs ${lib})
list(APPEND object_libs_objects $<TARGET_OBJECTS:${lib}>)
else()
list(APPEND regular_libs ${lib})
endif()
else()
list(APPEND regular_libs ${lib})
endif()
set(${REGULAR_LIBS} ${regular_libs} PARENT_SCOPE)
set(${OBJECT_LIBS} ${object_libs} PARENT_SCOPE)
set(${OBJECT_LIB_OBJECTS} ${object_libs_objects} PARENT_SCOPE)
endforeach()
else()
set(${REGULAR_LIBS} ${libraries} PARENT_SCOPE)
unset(${OBJECT_LIBS} PARENT_SCOPE)
unset(${OBJECT_LIB_OBJECTS} PARENT_SCOPE)
endif()
endfunction(separate_object_libraries)
function(set_explicit_moc target_name file)
unset(file_dependencies)
if (file MATCHES "^.*plugin.h$")
@@ -293,12 +268,8 @@ function(add_qtc_depends target_name)
check_qtc_disabled_targets(${target_name} _arg_PRIVATE)
check_qtc_disabled_targets(${target_name} _arg_PUBLIC)
separate_object_libraries("${_arg_PRIVATE}"
depends object_lib_depends object_lib_depends_objects)
separate_object_libraries("${_arg_PUBLIC}"
public_depends object_public_depends object_public_depends_objects)
target_sources(${target_name} PRIVATE ${object_lib_depends_objects} ${object_public_depends_objects})
set(depends "${_arg_PRIVATE}")
set(public_depends "${_arg_PUBLIC}")
get_target_property(target_type ${target_name} TYPE)
if (NOT target_type STREQUAL "OBJECT_LIBRARY")

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -176,7 +176,7 @@
\list 1
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol C++ >
\uicontrol Clangd > \uicontrol {Use clangd (EXPERIMENTAL)}.
\uicontrol Clangd > \uicontrol {Use clangd}.
\image qtcreator-options-clangd.png "clangd options"
\li In \uicontrol {Path to executable}, enter the path to clangd
version 13, or later.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -32,7 +32,8 @@
For several programming languages, a \e {language server} is available
that provides information about the code to IDEs as long as they support
communication via the language server protocol (LSP). This enables the
communication via the \l{Language Server Protocol}
{language server protocol (LSP)}. This enables the
IDE to provide the following services:
\list
@@ -145,6 +146,7 @@
the Java language server \c .jar file.
\endlist
\section1 Supported Locator Filters
The locator enables you to browse not only files, but any items defined by
@@ -158,6 +160,49 @@
definitions in your project
\endlist
\section1 Inspecting Language Clients
\QC sends messages (\e Requests) to the language server and receives
responses that contain the requested information if the language server is
capable of handling the requests. To inspect the communication between \QC
and language servers and view server capabilities, select \uicontrol Tools
> \uicontrol {Debug \QC} > \uicontrol {Inspect Language Client}.
\image qtcreator-language-client-inspector-log.png "Language Client Inspector dialog"
The dialog shows a list of running language servers. The value of the
\uicontrol {Startup behavior} field in the language server options
determines when the server is started. The information displayed depends on
the language server.
\uicontrol Log displays additional information about the selected log entry.
You can see the \uicontrol {Content length} and \uicontrol {MIME type} of
a \uicontrol {Client Message} and \uicontrol {Server Message}, as well as
inspect the data sent between \QC and the language server.
To remove old entries, select \uicontrol Clear.
\section2 Capabilities
In \uicontrol Capabilities, you can check whether a language server is
capable of a specific task. You cannot modify the server capabilities
in this dialog.
You can view the \uicontrol Name, \uicontrol Value, and \uicontrol Type
of the capability.
\image qtcreator-language-client-inspector-capabilities.png "Language Client Inspector Capabilities tab"
For some language servers, \uicontrol {Dynamic Capabilities} lists the
\uicontrol Methods and \uicontrol Options available.
\section2 Memory Usage
For a clangd server, you can inspect the total amount of memory used by a
particular component in \uicontrol {Memory Usage}.
\image qtcreator-language-client-inspector-capabilities.png "Language Client Inspector Capabilities tab"
\section1 Reporting Issues
The language service client has been mostly tested with Python and Java.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
@@ -141,3 +141,7 @@
\externalpage https://cmake.org/cmake/help/latest/prop_sf/HEADER_FILE_ONLY.html
\title CMake: HEADER_FILE_ONLY
*/
/*!
\externalpage https://microsoft.github.io/language-server-protocol/
\title Language Server Protocol
*/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -41,6 +41,9 @@
project and a button UI control, and how to modify the files generated by
the wizard templates to wireframe the UI.
You can donwnload the completed project from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui1}{here}.
The \e {Learn More} sections provide additional information about the
tasks performed by the wizards and about other basic tasks and concepts.
@@ -54,24 +57,19 @@
To create a project:
\list 1
\li Select \uicontrol File > \uicontrol {New Project} >
\uicontrol General > \uicontrol {Qt Quick Application - Empty} >
\uicontrol Choose.
\li In the \uicontrol Name field, enter the project name: \e {loginui1}.
When naming your own projects, keep in mind that they cannot be
easily renamed later.
\li In the \uicontrol {Create in} field, enter the path to the folder
where you want to store the project files. You can move project
folders later without problems.
\li Select \uicontrol Next (or \uicontrol Continue on \macos) to
continue to the \uicontrol {Define Project Details} page.
\li In the \uicontrol {Screen resolution} field, select the initial
size of the UI. In this tutorial, we use the predefined size
\e {720 x 1280 (HD)} (portrait) instead of the default size
(landscape). You can easily change the screen size later in
\l Properties.
\li Select \uicontrol Finish (or \uicontrol Done on \macos) to create
the project.
\li Select \uicontrol File > \uicontrol {New Project}.
\li In the \uicontrol Presets tab, select \uicontrol General >
\uicontrol {Empty}.
\li In the \uicontrol Details tab:
\list
\li Enter \e Loginui1 as the name for the project. Keep in mind
that projects cannot be easily renamed later.
\li Select the path for the project files. You can move project
folders later.
\li Set \uicontrol Width to 720 and \uicontrol Height to 1280.
You can change the screen size later in \l Properties.
\endlist
\li Select \uicontrol Create to create the project.
\endlist
Your project should now look something like this in the \uicontrol Design
@@ -92,7 +90,7 @@
\section2 Learn More - Projects and Files
\QDS creates a set of boilerplate files and folders that you need to create
a UI. The files are listed in the \l Projects view.
a UI. The files are listed in the \l{File System} view.
\image loginui1-project-files.png
@@ -112,6 +110,9 @@
Specifically, if you export and import designs using \QB, your main
file is most likely called something else. For more information,
see \l {Exporting from Design Tools}.
\li The \e CMakeLists.txt project configuration file allowing you to
share your project as a fully working C++ application with
developers.
\li The \e {qtquickcontrols2.conf} file specifies the selected
\l {Styling Qt Quick Controls}{UI style} and some style-specific
arguments.
@@ -230,7 +231,7 @@
adds the following \e import statements to the UI files (.ui.qml) that it
creates:
\quotefromfile loginui1/Screen01.ui.qml
\quotefromfile Loginui1/Content/Screen01.ui.qml
\skipto import
\printuntil Controls
@@ -333,7 +334,7 @@
To be able to use the functionality of the Button control, the wizard template
adds the following \e import statements to the \e EntryField.ui.qml file:
\quotefromfile loginui1/EntryField.ui.qml
\quotefromfile Loginui1/Content/EntryField.ui.qml
\skipto import
\printuntil Controls
@@ -364,7 +365,7 @@
to \e 100, to match the width of the tag line.
\li In the \uicontrol Control section, deselect the \uicontrol Hover
check box because we don't want the hover effect for the button.
\li Select the button background in \uicontrol Navigator to display its
\li Select \e buttonBackground in \uicontrol Navigator to display its
properties in \uicontrol Properties.
\li In \uicontrol Rectangle > \uicontrol {Fill color}, set the color to
transparent light gray (\e #28e7e7e7) in \uicontrol Hex. You can
@@ -372,7 +373,7 @@
\li In \uicontrol {Border Color}, select white (\e #ffffff).
\li In \uicontrol Radius, enter \e 50 to give the button
rounded corners.
\li Select the text component in \uicontrol Navigator to display its
\li Select \e textItem in \uicontrol Navigator to display its
properties in \uicontrol Properties.
\li In \uicontrol Character > \uicontrol Font, select
\e {Titillium Web ExtraLight}.
@@ -382,7 +383,7 @@
(\e #ffffff).
\li In \uicontrol {Alignment H}, select the \uicontrol Left button to
align the text horizontally to the left.
\li In the \uicontrol Padding section > \uicontrol Horizontal >
\li In \uicontrol Padding > \uicontrol Horizontal >
\uicontrol Left, set the padding in the field between background
border and text to \e 50.
\image loginui1-text-properties-button.png "Text properties"
@@ -450,13 +451,13 @@
to \e 100.
\li In the \uicontrol Control section, deselect the \uicontrol Hover
check box because we don't want the hover effect for the button.
\li Select the button background in \uicontrol Navigator to display its
\li Select \e buttonBackground in \uicontrol Navigator to display its
properties in \uicontrol Properties.
\li In \uicontrol Rectangle > \uicontrol {Border color}, select the
green used in the logo (\e #41cd52).
\li In \uicontrol Radius, enter \e 50 to give the button rounded
corners.
\li Select the the text component in \uicontrol Navigator to display
\li Select \e textItem in \uicontrol Navigator to display
its properties in \uicontrol Properties.
\li In \uicontrol Character > \uicontrol Font, select
\e {Titillium Web ExtraLight}.

View File

@@ -24,7 +24,7 @@
****************************************************************************/
/*!
\example loginui2
\example Loginui2
\ingroup gstutorials
\previouspage {Log In UI - Components}
\nextpage {Log In UI - States}
@@ -45,7 +45,12 @@
their proper places when you resize the UI on the desktop or on devices
with different screen sizes, you will use anchors and positioners.
These instructions build on \l {Log In UI - Components}.
The starting point for this tutorial is the completed
\l{Log In UI - Components} project. You can download the project from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui1}{here}.
Additionally, you can download the completed project of this tutorial from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui2}{here}.
The \e {Learn More} sections provide additional information about the
task at hand.
@@ -79,6 +84,9 @@
anchor button to anchor \e adventurePage to its
parent in the \uicontrol Target field. This attaches the background
image to the rectangle on all sides.
Note: Selecting the anchor button should automatically select the
four buttons on the left side of it. If it doesn't, refresh
\uicontrol{Form Editor}.
\image loginui2-layout.png "Layout properties"
\li Select \e qt_logo_green_128x128px in \l Navigator.
\li In \uicontrol Properties > \uicontrol Layout, select the

View File

@@ -46,12 +46,12 @@
login page, you will use \e states to show and hide UI components as necessary
when a user selects the \e {Create Account} button.
These instructions build on:
The starting point for this tutorial is the completed
\l{Log In UI - Positioning} project. You can download the project from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui2}{here}.
\list
\li \l {Log In UI - Components}
\li \l {Log In UI - Positioning}
\endlist
Additionally, you can download the completed project of this tutorial from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui3}{here}.
The \e {Learn More} sections provide additional information relevant to the
task at hand.

View File

@@ -46,13 +46,13 @@
\l{Creating Timeline Animations}{timeline animations} that you bind
to states.
These instructions build on:
The starting point for this tutorial is the completed
\l{Log In UI - States} project. You can download the project from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui3}{here}.
Additionally, you can download the completed project of this tutorial from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui4}{here}.
\list
\li \l {Log In UI - Components}
\li \l {Log In UI - Positioning}
\li \l {Log In UI - States}
\endlist
The \e {Learn More} sections provide additional information relevant to the
task at hand.
@@ -94,7 +94,7 @@
\li Select \inlineimage icons/navigator-arrowup.png
to move \e username below \e tagLine in \uicontrol Navigator
to preserve the \l{Arranging Components}{component hierarchy}.
\li Repeat for \e password and \e repeatPassword.
\li Repeat step 3 and 4 for \e password and \e repeatPassword.
\li Select \e fields in \uicontrol Navigator and press \key Delete to
delete it.
\li Select \e username in \uicontrol Navigator to display its properties
@@ -196,8 +196,8 @@
to save your changes.
\endlist
When you move the playhead along the timeline, you can see how the login
button fades out while the repeat password field fades in.
When you move the playhead along the timeline, you can see how the create
account button fades out while the repeat password field fades in.
You will now animate the top anchor margin of the repeat password field
to make it appear to slide down from the password field.
@@ -219,7 +219,7 @@
frame 0, and select the record button for the \e anchors.topMargin
property of \e repeatPassword.
\li In the field next to the property, set a negative value for the
top anchor margin, -40, to place \e repeatPassword on top of
top anchor margin, -100, to place \e repeatPassword on top of
\e password.
\li Move the playhead to frame 1000 and change the top anchor margin
to 20, so that, combined with the change in the \uicontrol Opacity
@@ -312,7 +312,7 @@
the following \e import statement to the UI files where it uses the
components:
\quotefromfile loginui4/Screen01.ui.qml
\quotefromfile Loginui4/Content/Screen01.ui.qml
\skipto QtQuick.Timeline
\printuntil 1.0

View File

@@ -39,8 +39,8 @@
translations from a JSON file.
You need to download the starting project for this tutorial from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/examples/
loginui2}{here} before you start.
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/multi-language%20tutorial/Loginui2}{here}
before you start.
Download the project and open the \e loginui2.qmlproject file in \QDS
to get started.
@@ -48,8 +48,7 @@
This project consists of a login page with a couple of text elements.
Additionally, you will use a JSON translation file in this tutorial.
Download it from \l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/
master/tutorial%20projects/multi-language}{here}.
Download it from \l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/multi-language}{here}.
\section1 JSON Translation File
@@ -133,10 +132,11 @@
First, you need to prepare your project for translation:
\list 1
\li In \uicontrol{Projects}, double-click \e{Screen01.ui.qml} to open it.
\li All text strings that you want to translate need to be of \c
qsTrId type. In this project the text strings are of \c qsTr type so you
need to change them. Open \uicontrol{Text Editor}, find all five
occurrences of \c QsTr and replace them with \c{QsTrId}. For example,
occurrences of \c qsTr and replace them with \c{qsTrId}. For example,
replace:
\code
text: qsTr("Qt Account")
@@ -165,21 +165,14 @@
\li Go to \uicontrol View > \uicontrol Views and select \uicontrol
Translations to open the \uicontrol Translations view. You can
drag it to a workspace to dock it.
When you open the \uicontrol Translations view for the first time, \QDS
prompts you to enable the multi-language database, select
\uicontrol{Yes}.
\image enable-multilanguage.png
\li In \uicontrol Translations, select
\inlineimage icons/select-languages.png
.
When you enable the multi-language database, an SQLite database named
\e translations.db is created in the project folder root.
\li Select the languages that you want to support in your project,
in this case \uicontrol{English - American English} and
\uicontrol{Swedish}.
\li Set \uicontrol English as primary language and select \uicontrol{OK}.
\uicontrol{Swedish - Svenska}.
\li Set \uicontrol{English - American English} as primary language and
select \uicontrol{Ok}.
\li Select \inlineimage icons/import-json-translations.png
and open the \e ml_translations.json file. Now you can see all your
imported translations in the \uicontrol Translations view.

View File

@@ -1,8 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
@@ -49,6 +47,7 @@
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.15
import QtQuick.Controls 2.12
@@ -100,13 +99,16 @@ Button {
when: !control.down
PropertyChanges {
target: textItem
font.family: "Titillium Web ExtraLight"
target: buttonBackground
color: "#00000000"
border.color: "#ffffff"
}
PropertyChanges {
target: buttonBackground
color: "#28e7e7e7"
target: textItem
color: "#ffffff"
font.pixelSize: 34
font.family: "Titillium Web ExtraLight"
}
},
State {
@@ -115,12 +117,14 @@ Button {
PropertyChanges {
target: textItem
color: "#ffffff"
border.color: "#ffffff"
font.family: "Titillium Web ExtraLight"
}
PropertyChanges {
target: buttonBackground
color: "#e7e7e7"
border.color: "#ffffff"
color: "#28e7e7e7"
border.color: "#00000000"
}
}
]

View File

@@ -1,8 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
@@ -49,6 +47,7 @@
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.15
import QtQuick.Controls 2.12
@@ -68,6 +67,7 @@ Button {
text: "My Button"
hoverEnabled: false
enabled: true
background: buttonBackground
Rectangle {
@@ -83,6 +83,8 @@ Button {
contentItem: textItem
Text {
id: textItem
width: 500
height: 100
text: control.text
font.pixelSize: 34
@@ -101,6 +103,14 @@ Button {
PropertyChanges {
target: buttonBackground
color: "#00000000"
border.color: "#41cd52"
}
PropertyChanges {
target: textItem
color: "#41cd52"
font.pixelSize: 34
font.family: "Titillium Web ExtraLight"
}
},
State {
@@ -108,20 +118,17 @@ Button {
when: control.down
PropertyChanges {
target: textItem
color: "#ffffff"
color: "#41cd52"
border.color: "#41cd52"
font.pixelSize: 34
font.family: "Titillium Web ExtraLight"
}
PropertyChanges {
target: buttonBackground
color: "#41cd52"
border.color: "#00000000"
border.color: "#41cd52"
}
}
]
}
/*##^##
Designer {
D{i:0;height:100;width:500}
}
##^##*/

View File

@@ -1,8 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
@@ -49,9 +47,10 @@
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import QtQuick.Controls
import loginui1 1.0
import Loginui1
Rectangle {
width: Constants.width
@@ -70,47 +69,44 @@ Rectangle {
Image {
id: qt_logo_green_128x128px
x: 296
y: 40
y: 0
source: "images/qt_logo_green_128x128px.png"
fillMode: Image.PreserveAspectFit
}
Text {
id: tagLine
width: 541
height: 78
color: "#ffffff"
text: qsTr("Are you ready to explore?")
font.pixelSize: 50
font.family: "Titillium Web ExtraLight"
anchors.verticalCenterOffset: -391
anchors.horizontalCenterOffset: 18
anchors.verticalCenterOffset: -430
anchors.horizontalCenterOffset: 0
anchors.centerIn: parent
}
EntryField {
id: username
x: 128
x: 110
y: 470
text: "Username or Email"
text: qsTr("Username or Email")
}
EntryField {
id: password
x: 128
x: 110
y: 590
text: qsTr("Password")
}
PushButton {
id: login
x: 102
y: 966
x: 101
y: 944
text: qsTr("Continue")
}
PushButton {
id: createAccount
x: 102
id: creteAccount
x: 101
y: 1088
text: qsTr("Create Account")
}
@@ -118,7 +114,7 @@ Rectangle {
/*##^##
Designer {
D{i:0;formeditorZoom:0.33}
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:7}
}
##^##*/

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1,41 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Quick Designer Components.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
ListModel {
id: eventListModel
ListElement {
eventId: "enterPressed"
eventDescription: "Emitted when pressing the enter button"
shortcut: "Return"
parameters: "Enter"
}
}

View File

@@ -0,0 +1,51 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Quick Designer Components.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import QtQuick.Studio.EventSimulator 1.0
import QtQuick.Studio.EventSystem 1.0
QtObject {
id: simulator
property bool active: true
property Timer __timer: Timer {
id: timer
interval: 100
onTriggered: {
EventSimulator.show()
}
}
Component.onCompleted: {
EventSystem.init(Qt.resolvedUrl("EventListModel.qml"))
if (simulator.active)
timer.start()
}
}

View File

@@ -1,2 +1,6 @@
Module Loginui1
singleton Constants 1.0 Constants.qml
EventListSimulator 1.0 EventListSimulator.qml
EventListModel 1.0 EventListModel.qml
DirectoryFontLoader 1.0 DirectoryFontLoader.qml

View File

@@ -1,61 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import loginui1 1.0
Item {
width: Constants.width
height: Constants.height
Screen01 {
}
}

View File

@@ -1,21 +1,69 @@
/* File generated by Qt Creator */
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QmlProject 1.1
import QmlProject
Project {
mainFile: "loginui1.qml"
mainFile: "content/App.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "."
directory: "content"
}
JavaScriptFiles {
directory: "."
directory: "content"
}
ImageFiles {
directory: "."
directory: "content"
}
Files {
@@ -32,9 +80,34 @@ Project {
filter: "*.ttf;*.otf"
}
Files {
filter: "*.wav;*.mp3"
}
Files {
filter: "*.mp4"
}
Files {
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
}
Files {
filter: "*.mesh"
directory: "asset_imports"
}
Environment {
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
QT_LOGGING_RULES: "qt.qml.connections=false"
QT_ENABLE_HIGHDPI_SCALING: "0"
/* Useful for debugging
QSG_VISUALIZE=batches
QSG_VISUALIZE=clip
QSG_VISUALIZE=changes
QSG_VISUALIZE=overdraw
*/
}
qt6Project: true
@@ -43,5 +116,10 @@ Project {
importPaths: [ "imports", "asset_imports" ]
/* Required for deployment */
targetDirectory: "/opt/loginui1"
targetDirectory: "/opt/Loginui1"
qdsVersion: "3.0"
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
widgetApp: true
}

View File

@@ -1,6 +0,0 @@
; This file can be edited to change the style of the application
; Read "Qt Quick Controls 2 Configuration File" for details:
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
[Controls]
Style=Default

View File

@@ -1,6 +1,11 @@
/*
* This file is automatically generated by Qt Design Studio.
* Do not change.
*/
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
@@ -48,14 +53,12 @@
**
****************************************************************************/
import QtQuick
import loginui4 1.0
Item {
width: Constants.width
height: Constants.height
Screen01 {
}
#include <QGuiApplication>
void set_qt_environment()
{
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");
qputenv("QT_LOGGING_RULES", "qt.qml.connections=false");
qputenv("QT_QUICK_CONTROLS_CONF", ":/qtquickcontrols2.conf");
}

View File

@@ -0,0 +1,9 @@
/*
* This file is automatically generated by Qt Design Studio.
* Do not change.
*/
#include <QtQml/qqmlextensionplugin.h>
Q_IMPORT_QML_PLUGIN(contentPlugin)
Q_IMPORT_QML_PLUGIN(Loginui1Plugin)

View File

@@ -0,0 +1,62 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Quick Studio Components.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "app_environment.h"
#include "import_qml_plugins.h"
int main(int argc, char *argv[])
{
set_qt_environment();
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(u"qrc:Main/main.qml"_qs);
QObject::connect(
&engine, &QQmlApplicationEngine::objectCreated, &app,
[url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
},
Qt::QueuedConnection);
engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
engine.addImportPath(":/");
engine.load(url);
if (engine.rootObjects().isEmpty()) {
return -1;
}
return app.exec();
}

View File

@@ -0,0 +1,75 @@
import QmlProject
Project {
mainFile: "content/App.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "content"
}
JavaScriptFiles {
directory: "content"
}
ImageFiles {
directory: "content"
}
Files {
filter: "*.conf"
files: ["qtquickcontrols2.conf"]
}
Files {
filter: "qmldir"
directory: "."
}
Files {
filter: "*.ttf;*.otf"
}
Files {
filter: "*.wav;*.mp3"
}
Files {
filter: "*.mp4"
}
Files {
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
}
Files {
filter: "*.mesh"
directory: "asset_imports"
}
Environment {
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
QT_LOGGING_RULES: "qt.qml.connections=false"
QT_ENABLE_HIGHDPI_SCALING: "0"
/* Useful for debugging
QSG_VISUALIZE=batches
QSG_VISUALIZE=clip
QSG_VISUALIZE=changes
QSG_VISUALIZE=overdraw
*/
}
qt6Project: true
/* List of plugin directories passed to QML runtime */
importPaths: [ "imports", "asset_imports" ]
/* Required for deployment */
targetDirectory: "/opt/Loginui1"
qdsVersion: "3.0"
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
widgetApp: true
}

View File

@@ -1,8 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
@@ -49,9 +47,10 @@
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import QtQuick.Controls
import loginui2 1.0
import Loginui1
Rectangle {
id: rectangle
@@ -69,7 +68,6 @@ Rectangle {
Image {
id: qt_logo_green_128x128px
x: 296
anchors.top: parent.top
source: "images/qt_logo_green_128x128px.png"
anchors.horizontalCenter: parent.horizontalCenter
@@ -78,8 +76,6 @@ Rectangle {
}
Text {
id: tagLine
width: 541
height: 78
color: "#ffffff"
text: qsTr("Are you ready to explore?")
anchors.top: qt_logo_green_128x128px.bottom
@@ -87,11 +83,11 @@ Rectangle {
anchors.topMargin: 40
anchors.horizontalCenter: parent.horizontalCenter
font.family: "Titillium Web ExtraLight"
anchors.horizontalCenterOffset: 0
}
Column {
id: fields
x: 128
anchors.top: tagLine.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 170
@@ -99,7 +95,7 @@ Rectangle {
EntryField {
id: username
text: "Username or Email"
text: qsTr("Username or Email")
}
EntryField {
@@ -110,11 +106,10 @@ Rectangle {
Column {
id: buttons
x: 102
y: 966
y: 944
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottomMargin: 100
anchors.bottomMargin: 50
spacing: 20
PushButton {
@@ -123,7 +118,7 @@ Rectangle {
}
PushButton {
id: createAccount
id: creteAccount
text: qsTr("Create Account")
}
}
@@ -131,7 +126,7 @@ Rectangle {
/*##^##
Designer {
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:4}
D{i:0;formeditorZoom:0.66}D{i:1}D{i:2}D{i:3}D{i:5}D{i:6}D{i:4}D{i:8}D{i:9}D{i:7}
}
##^##*/

View File

@@ -1,26 +0,0 @@
pragma Singleton
import QtQuick
QtObject {
readonly property int width: 720
readonly property int height: 1280
property alias fontDirectory: directoryFontLoader.fontDirectory
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
/* Edit this comment to add your custom font */
readonly property font font: Qt.font({
family: Qt.application.font.family,
pixelSize: Qt.application.font.pixelSize
})
readonly property font largeFont: Qt.font({
family: Qt.application.font.family,
pixelSize: Qt.application.font.pixelSize * 1.6
})
readonly property color backgroundColor: "#c2c2c2"
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
id: directoryFontLoader
}
}

View File

@@ -1,2 +0,0 @@
singleton Constants 1.0 Constants.qml
EventListSimulator 1.0 EventListSimulator.qml

View File

@@ -1,61 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import loginui2 1.0
Item {
width: Constants.width
height: Constants.height
Screen01 {
}
}

View File

@@ -1,47 +0,0 @@
/* File generated by Qt Creator */
import QmlProject 1.1
Project {
mainFile: "loginui2.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "."
}
JavaScriptFiles {
directory: "."
}
ImageFiles {
directory: "."
}
Files {
filter: "*.conf"
files: ["qtquickcontrols2.conf"]
}
Files {
filter: "qmldir"
directory: "."
}
Files {
filter: "*.ttf;*.otf"
}
Environment {
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
}
qt6Project: true
/* List of plugin directories passed to QML runtime */
importPaths: [ "imports", "asset_imports" ]
/* Required for deployment */
targetDirectory: "/opt/loginui1"
}

View File

@@ -1,6 +0,0 @@
; This file can be edited to change the style of the application
; Read "Qt Quick Controls 2 Configuration File" for details:
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
[Controls]
Style=Default

View File

@@ -0,0 +1,75 @@
import QmlProject
Project {
mainFile: "content/App.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "content"
}
JavaScriptFiles {
directory: "content"
}
ImageFiles {
directory: "content"
}
Files {
filter: "*.conf"
files: ["qtquickcontrols2.conf"]
}
Files {
filter: "qmldir"
directory: "."
}
Files {
filter: "*.ttf;*.otf"
}
Files {
filter: "*.wav;*.mp3"
}
Files {
filter: "*.mp4"
}
Files {
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
}
Files {
filter: "*.mesh"
directory: "asset_imports"
}
Environment {
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
QT_LOGGING_RULES: "qt.qml.connections=false"
QT_ENABLE_HIGHDPI_SCALING: "0"
/* Useful for debugging
QSG_VISUALIZE=batches
QSG_VISUALIZE=clip
QSG_VISUALIZE=changes
QSG_VISUALIZE=overdraw
*/
}
qt6Project: true
/* List of plugin directories passed to QML runtime */
importPaths: [ "imports", "asset_imports" ]
/* Required for deployment */
targetDirectory: "/opt/Loginui1"
qdsVersion: "3.0"
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
widgetApp: true
}

View File

@@ -1,8 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
@@ -49,9 +47,10 @@
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import QtQuick.Controls
import loginui3 1.0
import Loginui1
Rectangle {
id: rectangle
@@ -70,7 +69,6 @@ Rectangle {
Image {
id: qt_logo_green_128x128px
x: 296
anchors.top: parent.top
source: "images/qt_logo_green_128x128px.png"
anchors.horizontalCenter: parent.horizontalCenter
@@ -79,8 +77,6 @@ Rectangle {
}
Text {
id: tagLine
width: 541
height: 78
color: "#ffffff"
text: qsTr("Are you ready to explore?")
anchors.top: qt_logo_green_128x128px.bottom
@@ -88,11 +84,11 @@ Rectangle {
anchors.topMargin: 40
anchors.horizontalCenter: parent.horizontalCenter
font.family: "Titillium Web ExtraLight"
anchors.horizontalCenterOffset: 0
}
Column {
id: fields
x: 128
anchors.top: tagLine.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 170
@@ -100,7 +96,7 @@ Rectangle {
EntryField {
id: username
text: "Username or Email"
text: qsTr("Username or Email")
}
EntryField {
@@ -110,17 +106,16 @@ Rectangle {
EntryField {
id: repeatPassword
text: "Repeat Password"
text: qsTr("Repeat Password")
}
}
Column {
id: buttons
x: 102
y: 966
y: 944
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottomMargin: 100
anchors.bottomMargin: 50
spacing: 20
PushButton {
@@ -160,7 +155,8 @@ Rectangle {
/*##^##
Designer {
D{i:0;formeditorZoom:0.5}
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:5}D{i:6}D{i:7}D{i:4}D{i:9}D{i:11}D{i:10}
D{i:8}
}
##^##*/

View File

@@ -1,26 +0,0 @@
pragma Singleton
import QtQuick
QtObject {
readonly property int width: 720
readonly property int height: 1280
property alias fontDirectory: directoryFontLoader.fontDirectory
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
/* Edit this comment to add your custom font */
readonly property font font: Qt.font({
family: Qt.application.font.family,
pixelSize: Qt.application.font.pixelSize
})
readonly property font largeFont: Qt.font({
family: Qt.application.font.family,
pixelSize: Qt.application.font.pixelSize * 1.6
})
readonly property color backgroundColor: "#c2c2c2"
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
id: directoryFontLoader
}
}

View File

@@ -1,2 +0,0 @@
singleton Constants 1.0 Constants.qml
EventListSimulator 1.0 EventListSimulator.qml

View File

@@ -1,61 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import loginui3 1.0
Item {
width: Constants.width
height: Constants.height
Screen01 {
}
}

View File

@@ -1,47 +0,0 @@
/* File generated by Qt Creator */
import QmlProject 1.1
Project {
mainFile: "loginui3.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "."
}
JavaScriptFiles {
directory: "."
}
ImageFiles {
directory: "."
}
Files {
filter: "*.conf"
files: ["qtquickcontrols2.conf"]
}
Files {
filter: "qmldir"
directory: "."
}
Files {
filter: "*.ttf;*.otf"
}
Environment {
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
}
qt6Project: true
/* List of plugin directories passed to QML runtime */
importPaths: [ "imports", "asset_imports" ]
/* Required for deployment */
targetDirectory: "/opt/loginui1"
}

View File

@@ -1,2 +0,0 @@
[Controls]
Style=Default

View File

@@ -0,0 +1,75 @@
import QmlProject
Project {
mainFile: "content/App.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "content"
}
JavaScriptFiles {
directory: "content"
}
ImageFiles {
directory: "content"
}
Files {
filter: "*.conf"
files: ["qtquickcontrols2.conf"]
}
Files {
filter: "qmldir"
directory: "."
}
Files {
filter: "*.ttf;*.otf"
}
Files {
filter: "*.wav;*.mp3"
}
Files {
filter: "*.mp4"
}
Files {
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
}
Files {
filter: "*.mesh"
directory: "asset_imports"
}
Environment {
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
QT_LOGGING_RULES: "qt.qml.connections=false"
QT_ENABLE_HIGHDPI_SCALING: "0"
/* Useful for debugging
QSG_VISUALIZE=batches
QSG_VISUALIZE=clip
QSG_VISUALIZE=changes
QSG_VISUALIZE=overdraw
*/
}
qt6Project: true
/* List of plugin directories passed to QML runtime */
importPaths: [ "imports", "asset_imports" ]
/* Required for deployment */
targetDirectory: "/opt/Loginui1"
qdsVersion: "3.0"
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
widgetApp: true
}

View File

@@ -1,57 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Design Studio.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import QtQuick.Controls
import loginui4 1.0
import Loginui1
import QtQuick.Timeline 1.0
Rectangle {
@@ -71,7 +20,6 @@ Rectangle {
Image {
id: qt_logo_green_128x128px
x: 296
anchors.top: parent.top
source: "images/qt_logo_green_128x128px.png"
anchors.horizontalCenter: parent.horizontalCenter
@@ -80,8 +28,6 @@ Rectangle {
}
Text {
id: tagLine
width: 541
height: 78
color: "#ffffff"
text: qsTr("Are you ready to explore?")
anchors.top: qt_logo_green_128x128px.bottom
@@ -89,30 +35,29 @@ Rectangle {
anchors.topMargin: 40
anchors.horizontalCenter: parent.horizontalCenter
font.family: "Titillium Web ExtraLight"
anchors.horizontalCenterOffset: 0
}
EntryField {
id: username
x: 110
text: "Username or Email"
text: qsTr("Username or Email")
anchors.top: tagLine.bottom
anchors.topMargin: 170
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 170
}
EntryField {
id: password
x: 110
text: qsTr("Password")
anchors.top: username.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 20
anchors.topMargin: 21
}
EntryField {
id: repeatPassword
x: 110
text: "Repeat Password"
opacity: 0
text: qsTr("Repeat Password")
anchors.top: password.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 20
@@ -120,11 +65,10 @@ Rectangle {
Column {
id: buttons
x: 102
y: 966
y: 944
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottomMargin: 100
anchors.bottomMargin: 50
spacing: 20
PushButton {
@@ -148,70 +92,68 @@ Rectangle {
animations: [
TimelineAnimation {
id: toCreateAccountState
duration: 1000
running: false
loops: 1
duration: 1000
to: 1000
from: 0
}
]
endFrame: 1000
startFrame: 0
enabled: true
startFrame: 0
KeyframeGroup {
target: repeatPassword
property: "opacity"
Keyframe {
frame: 0
value: 0
frame: 0
}
Keyframe {
frame: 999
value: 1
frame: 1000
}
}
KeyframeGroup {
target: createAccount
property: "opacity"
Keyframe {
value: 1
frame: 0
}
Keyframe {
frame: 1000
value: 0
frame: 1000
}
}
KeyframeGroup {
target: repeatPassword
property: "anchors.topMargin"
Keyframe {
value: -100
frame: 0
}
Keyframe {
frame: 0
value: -40
value: -100
frame: 4
}
Keyframe {
easing.bezierCurve: [0.39, 0.575, 0.565, 1, 1, 1]
frame: 999
value: 20
frame: 999
}
}
}
states: [
State {
name: "login"
PropertyChanges {
target: timeline
enabled: true
}
PropertyChanges {
target: toCreateAccountState
}
},
State {
name: "createAccount"
@@ -231,6 +173,8 @@ Rectangle {
/*##^##
Designer {
D{i:0;formeditorZoom:0.5}D{i:6}D{i:9}D{i:11}
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:8}D{i:10}D{i:9}D{i:7}
D{i:11}
}
##^##*/

View File

@@ -1,26 +0,0 @@
pragma Singleton
import QtQuick
QtObject {
readonly property int width: 720
readonly property int height: 1280
property alias fontDirectory: directoryFontLoader.fontDirectory
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
/* Edit this comment to add your custom font */
readonly property font font: Qt.font({
family: Qt.application.font.family,
pixelSize: Qt.application.font.pixelSize
})
readonly property font largeFont: Qt.font({
family: Qt.application.font.family,
pixelSize: Qt.application.font.pixelSize * 1.6
})
readonly property color backgroundColor: "#c2c2c2"
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
id: directoryFontLoader
}
}

View File

@@ -1,2 +0,0 @@
singleton Constants 1.0 Constants.qml
EventListSimulator 1.0 EventListSimulator.qml

View File

@@ -1,47 +0,0 @@
/* File generated by Qt Creator */
import QmlProject 1.1
Project {
mainFile: "loginui4.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "."
}
JavaScriptFiles {
directory: "."
}
ImageFiles {
directory: "."
}
Files {
filter: "*.conf"
files: ["qtquickcontrols2.conf"]
}
Files {
filter: "qmldir"
directory: "."
}
Files {
filter: "*.ttf;*.otf"
}
Environment {
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
}
qt6Project: true
/* List of plugin directories passed to QML runtime */
importPaths: [ "imports", "asset_imports" ]
/* Required for deployment */
targetDirectory: "/opt/loginui4"
}

View File

@@ -1,2 +0,0 @@
[Controls]
Style=Default

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -63,12 +63,14 @@
\li \l{Generating Qt Translation Source Files}
\row
\li \inlineimage icons/project-translation-test.png
\li Run project translation test.
\li \l{Running the Project Translation Test}
\li Run translation test for several documents and create a test report.
\li \l{Running Translation Test for Several Documents}
\row
\li \inlineimage icons/qml-translation-test.png
\li Run QML translation test to find missing and elided translations.
\li \l{Running the QML Translation Test}
\li Run translation test for the currently open document. This test
shows translation warnings in \uicontrol{From Editor} and creates a
test report.
\li \l{Running Translation Test for a Single Document}
\row
\li \inlineimage icons/export-translations.png
\li Export all translations used in your project or all translations
@@ -93,8 +95,8 @@
"translation": "Password"
},
{
"language": "sv",
"translation": "Lösenord"
"language": "fi",
"translation": "Salasana"
}
]
}
@@ -120,8 +122,8 @@
"translation": "Password"
},
{
"language": "sv",
"translation": "Lösenord"
"language": "fi",
"translation": "Salasana"
}
]
\endcode
@@ -139,14 +141,14 @@
in the \uicontrol Translations view. The files are generated
in \e{<project-folder>/i18n}.
\section1 Running the QML Translation Test
\section1 Running Translation Test for a Single Document
You can run the QML language test to find missing
and elided translations. Running the QML language test
is a quick way to check the translations in the application you have open in
\uicontrol{Form Editor} as it highlights errors in the UI.
You can run the translation test to find missing translations
and translations where the text exceeds the text element boundaries. Running
the test is a quick way to check the translations in the document you have
open in \uicontrol{Form Editor} as it highlights errors in the UI.
To run the QML translation test:
To run the test for the currently open document:
\list 1
\li In the \uicontrol Translations view, select
@@ -155,12 +157,11 @@
\li Select the tests to run and the highlight color
for each test:
\list
\li \uicontrol{Show Translation Warnings} highlights missing
translations.
\li \uicontrol{Show Found Translations} highlights all translations
that are correct.
\li \uicontrol{Show Elide Warnings} highlights all translations where
the text is too long to fit in the text object and therefore is elided.
\li \uicontrol{Success} highlights translations without any warnings.
\li \uicontrol{Missing translation} highlights translations that are
missing for one or more languages.
\li \uicontrol{Exceeds boundaries} highlights translations where
the text is too long to fit in the text object.
\endlist
\image translation-tester.png
\li Select \uicontrol{Run Tests}.
@@ -205,16 +206,21 @@
The report shows the type of error as well as line and column of the
affected text element in the \e{ui.qml} file.
\section1 Running the Project Translation Test
\section1 Running Translation Test for Several Documents
You can run the project translation test on several \e{.ui.qml} files
at the same time. \QDS runs the same tests as during the
\l{Running the QML Translation Test}{QML Translation Test} and generates the
same test reports but does not highlight errors in the UI.
\l{Running Translation Test for a Single Document}{Translation Test} and
generates the same test reports but does not highlight errors in the UI.
To run the project translation test, select
To run the translation test for several documents:
\list 1
\li Select
\inlineimage icons/project-translation-test.png
in the \uicontrol Translations view.
\li Select the files that you want to include in the test.
\li Select \uicontrol{Run Tests}.
\endlist
\section1 Exporting Translations in Other Ways

View File

@@ -9,7 +9,7 @@
"mac_sha256": "2c3822db1c916655223e5ee8ce0fbf6b73d0b99012045c9dc8eaa6a5736c0c55"
},
"sdk_essential_packages": {
"default": ["platform-tools", "platforms;android-30", "cmdline-tools;latest"],
"default": ["platform-tools", "platforms;android-31", "cmdline-tools;latest"],
"linux": [],
"mac": [],
"windows": ["extras;google;usb_driver"]
@@ -18,7 +18,12 @@
"specific_qt_versions": [
{
"versions": ["default"],
"sdk_essential_packages": ["build-tools;30.0.2", "ndk;21.3.6528147"],
"sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670"],
"ndk_path": "ndk/22.1.7171670"
},
{
"versions": ["5.15.[0-8]", "5.14.[0-2]", "5.13.2"],
"sdk_essential_packages": ["build-tools;31.0.0", "ndk;21.3.6528147"],
"ndk_path": "ndk/21.3.6528147"
},
{

View File

@@ -185,3 +185,16 @@ def qdump__boost__variant(d, value):
dummy, val = value.split('%is{%s}' % (max(4, alignment), realType.name))
d.putItem(val)
d.putBetterType(value.type)
def qdump__boost__container__devector(d, value):
inner_type = value.type[0]
buffer = value["m_"]["buffer"].pointer()
front_idx = value["m_"]["front_idx"].integer()
back_idx = value["m_"]["back_idx"].integer()
start = buffer + (front_idx * inner_type.size())
size = int(back_idx - front_idx)
if size > 0:
d.checkPointer(start)
d.putItemCount(size)
d.putPlotData(start, size, inner_type)

View File

@@ -22,6 +22,7 @@ HEADERS += $$PWD/synchronizecommand.h \ \
$$PWD/clearscenecommand.h \
$$PWD/createinstancescommand.h \
$$PWD/informationchangedcommand.h \
$$PWD/nanotracecommand.h \
$$PWD/pixmapchangedcommand.h \
$$PWD/removeinstancescommand.h \
$$PWD/removepropertiescommand.h \
@@ -54,6 +55,7 @@ SOURCES += $$PWD/synchronizecommand.cpp \
$$PWD/changestatecommand.cpp \
$$PWD/changevaluescommand.cpp \
$$PWD/informationchangedcommand.cpp \
$$PWD/nanotracecommand.cpp \
$$PWD/removeinstancescommand.cpp \
$$PWD/removepropertiescommand.cpp \
$$PWD/reparentinstancescommand.cpp \

View File

@@ -47,6 +47,9 @@ public:
OrientationToggle,
EditLightToggle,
ShowGrid,
ShowSelectionBox,
ShowIconGizmo,
ShowCameraFrustum,
Edit3DParticleModeToggle,
ParticlesPlay,
ParticlesRestart,

View File

@@ -77,7 +77,16 @@
#include "view3dactioncommand.h"
#include "requestmodelnodepreviewimagecommand.h"
#include "nanotracecommand.h"
// Nanotrace headers are not exported to build dir at all if the feature is disabled, so
// runtime puppet build can't find them.
#if NANOTRACE_ENABLED
#include "nanotrace/nanotrace.h"
#else
#define NANOTRACE_INIT(process, thread, filepath)
#define NANOTRACE_SHUTDOWN()
#define NANOTRACE_SCOPE_ARGS(cat, name, ...)
#endif
namespace QmlDesigner {

View File

@@ -30,6 +30,7 @@ IconGizmo {
id: cameraGizmo
property Model frustumModel: null
property bool globalShowFrustum: false
iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png"
@@ -46,8 +47,12 @@ IconGizmo {
frustum.targetNode = targetNode;
frustum.targetNode = Qt.binding(function() {return targetNode;});
frustum.visible = visible || (targetNode && selected && activeScene === scene);
frustum.visible = Qt.binding(function() {return visible || (targetNode && selected && activeScene === scene);});
frustum.visible = (canBeVisible && globalShowFrustum)
|| (targetNode && selected && activeScene === scene);
frustum.visible = Qt.binding(function() {
return (canBeVisible && globalShowFrustum)
|| (targetNode && selected && activeScene === scene);
});
}
onActiveSceneChanged: {

View File

@@ -39,6 +39,9 @@ Item {
property bool showEditLight: false
property bool showGrid: true
property bool showSelectionBox: true
property bool showIconGizmo: true
property bool showCameraFrustum: false
property bool usePerspective: true
property bool globalOrientation: false
property alias contentItem: contentItem
@@ -70,6 +73,9 @@ Item {
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
onGlobalOrientationChanged: _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
onShowGridChanged: _generalHelper.storeToolState(sceneId, "showGrid", showGrid);
onShowSelectionBoxChanged: _generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox);
onShowIconGizmoChanged: _generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo);
onShowCameraFrustumChanged: _generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum);
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
@@ -220,6 +226,21 @@ Item {
else if (resetToDefault)
showGrid = true;
if ("showSelectionBox" in toolStates)
showSelectionBox = toolStates.showSelectionBox;
else if (resetToDefault)
showSelectionBox = true;
if ("showIconGizmo" in toolStates)
showIconGizmo = toolStates.showIconGizmo;
else if (resetToDefault)
showIconGizmo = true;
if ("showCameraFrustum" in toolStates)
showCameraFrustum = toolStates.showCameraFrustum;
else if (resetToDefault)
showCameraFrustum = false;
if ("usePerspective" in toolStates)
usePerspective = toolStates.usePerspective;
else if (resetToDefault)
@@ -250,6 +271,9 @@ Item {
{
_generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
_generalHelper.storeToolState(sceneId, "showGrid", showGrid)
_generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox)
_generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo)
_generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum)
_generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
_generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
@@ -273,6 +297,7 @@ Item {
"geometryName": geometryName});
selectionBoxes[selectionBoxes.length] = box;
box.view3D = Qt.binding(function() {return editView;});
box.visible = Qt.binding(function() {return showSelectionBox;});
}
}
}
@@ -373,11 +398,13 @@ Item {
"selectedNodes": selectedNodes, "scene": scene,
"activeScene": activeScene,
"locked": _generalHelper.isLocked(obj),
"hidden": _generalHelper.isHidden(obj)});
"hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo});
lightIconGizmos[lightIconGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
}
}
@@ -416,12 +443,15 @@ Item {
overlayView,
{"view3D": overlayView, "targetNode": obj,
"selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene,
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj)});
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo, "globalShowFrustum": showCameraFrustum});
cameraGizmos[cameraGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
gizmo.globalShowFrustum = Qt.binding(function() {return showCameraFrustum;});
frustum.viewPortRect = Qt.binding(function() {return viewPortRect;});
gizmo.connectFrustum(frustum);
}

View File

@@ -45,6 +45,8 @@ Item {
property bool hasMouse: false
property bool hidden: false
property bool locked: false
property bool globalShow: true
property bool canBeVisible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
property alias iconSource: iconImage.source
@@ -55,7 +57,7 @@ Item {
hasMouse = false;
}
visible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
visible: canBeVisible && globalShow
Overlay2D {
id: iconOverlay

View File

@@ -30,6 +30,7 @@ IconGizmo {
id: cameraGizmo
property Model frustumModel: null
property bool globalShowFrustum: false
iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png"
@@ -46,8 +47,12 @@ IconGizmo {
frustum.targetNode = targetNode;
frustum.targetNode = Qt.binding(function() {return targetNode;});
frustum.visible = visible || (targetNode && selected && activeScene === scene);
frustum.visible = Qt.binding(function() {return visible || (targetNode && selected && activeScene === scene);});
frustum.visible = (canBeVisible && globalShowFrustum)
|| (targetNode && selected && activeScene === scene);
frustum.visible = Qt.binding(function() {
return (canBeVisible && globalShowFrustum)
|| (targetNode && selected && activeScene === scene);
});
}
onActiveSceneChanged: {

View File

@@ -39,6 +39,9 @@ Item {
property bool showEditLight: false
property bool showGrid: true
property bool showSelectionBox: true
property bool showIconGizmo: true
property bool showCameraFrustum: false
property bool usePerspective: true
property bool globalOrientation: false
property alias contentItem: contentItem
@@ -71,6 +74,9 @@ Item {
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
onGlobalOrientationChanged: _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
onShowGridChanged: _generalHelper.storeToolState(sceneId, "showGrid", showGrid);
onShowSelectionBoxChanged: _generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox);
onShowIconGizmoChanged: _generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo);
onShowCameraFrustumChanged: _generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum);
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
@@ -211,6 +217,21 @@ Item {
else if (resetToDefault)
showGrid = true;
if ("showSelectionBox" in toolStates)
showSelectionBox = toolStates.showSelectionBox;
else if (resetToDefault)
showSelectionBox = true;
if ("showIconGizmo" in toolStates)
showIconGizmo = toolStates.showIconGizmo;
else if (resetToDefault)
showIconGizmo = true;
if ("showCameraFrustum" in toolStates)
showCameraFrustum = toolStates.showCameraFrustum;
else if (resetToDefault)
showCameraFrustum = false;
if ("usePerspective" in toolStates)
usePerspective = toolStates.usePerspective;
else if (resetToDefault)
@@ -241,6 +262,9 @@ Item {
{
_generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
_generalHelper.storeToolState(sceneId, "showGrid", showGrid)
_generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox)
_generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo)
_generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum)
_generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
_generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
@@ -264,6 +288,7 @@ Item {
"geometryName": geometryName});
selectionBoxes[selectionBoxes.length] = box;
box.view3D = Qt.binding(function() {return editView;});
box.visible = Qt.binding(function() {return showSelectionBox;});
}
}
}
@@ -364,11 +389,13 @@ Item {
"selectedNodes": selectedNodes, "scene": scene,
"activeScene": activeScene,
"locked": _generalHelper.isLocked(obj),
"hidden": _generalHelper.isHidden(obj)});
"hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo});
lightIconGizmos[lightIconGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
}
}
@@ -407,12 +434,15 @@ Item {
overlayView,
{"view3D": overlayView, "targetNode": obj,
"selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene,
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj)});
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo, "globalShowFrustum": showCameraFrustum});
cameraGizmos[cameraGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
gizmo.globalShowFrustum = Qt.binding(function() {return showCameraFrustum;});
frustum.viewPortRect = Qt.binding(function() {return viewPortRect;});
gizmo.connectFrustum(frustum);
}
@@ -449,11 +479,13 @@ Item {
"selectedNodes": selectedNodes, "scene": scene,
"activeScene": activeScene,
"locked": _generalHelper.isLocked(obj),
"hidden": _generalHelper.isHidden(obj)});
"hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo});
particleSystemIconGizmos[particleSystemIconGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
}
}
@@ -840,6 +872,13 @@ Item {
camera: viewRoot.usePerspective ? overlayPerspectiveCamera : overlayOrthoCamera
importScene: overlayScene
z: 2
environment: sceneEnv
SceneEnvironment {
id: sceneEnv
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
}
}
Overlay2D {

View File

@@ -45,6 +45,8 @@ Item {
property bool hasMouse: false
property bool hidden: false
property bool locked: false
property bool globalShow: true
property bool canBeVisible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
property alias iconSource: iconImage.source
@@ -55,7 +57,7 @@ Item {
hasMouse = false;
}
visible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
visible: canBeVisible && globalShow
Overlay2D {
id: iconOverlay

View File

@@ -50,6 +50,13 @@ View3D {
thresPerc = (grid_thresholds[thresIdx] - cameraZoomFactor) / (grid_thresholds[thresIdx] - grid_thresholds[thresIdx - 1]);
}
environment: sceneEnv
SceneEnvironment {
id: sceneEnv
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
}
Node {
id: sceneHelpers

View File

@@ -142,6 +142,16 @@ void CameraGeometry::doUpdateGeometry()
if (!QQuick3DObjectPrivate::get(m_camera)->spatialNode) {
// Doing explicit viewport mapping forces cameraNode creation
m_camera->mapToViewport({}, m_viewPortRect.width(), m_viewPortRect.height());
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
if (!m_nodeCreationUpdateDone) {
// Post-node creation update is done only once to avoid infinite loop in case the node
// creation fails.
m_nodeCreationUpdateDone = true;
m_cameraUpdatePending = true;
update();
return;
}
#endif
}
GeometryBase::doUpdateGeometry();

View File

@@ -67,6 +67,9 @@ private:
QQuick3DCamera *m_camera = nullptr;
QRectF m_viewPortRect;
bool m_cameraUpdatePending = false;
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
bool m_nodeCreationUpdateDone = false;
#endif
};
}

View File

@@ -729,7 +729,8 @@ void MouseArea3D::applyFreeRotation(QQuick3DNode *node, const QVector3D &startRo
if (dragVector.length() < 0.001f)
return;
const float *dataPtr(sceneTransform().data());
const auto &transform = sceneTransform();
const float *dataPtr(transform.data());
QVector3D xAxis = QVector3D(dataPtr[0], dataPtr[1], dataPtr[2]).normalized();
QVector3D yAxis = QVector3D(dataPtr[4], dataPtr[5], dataPtr[6]).normalized();
QVector3D finalAxis = (dragVector.x() * yAxis + dragVector.y() * xAxis);
@@ -1029,7 +1030,8 @@ void MouseArea3D::setHovering(bool enable)
QVector3D MouseArea3D::getNormal() const
{
const float *dataPtr(sceneTransform().data());
const auto &transform = sceneTransform();
const float *dataPtr(transform.data());
return QVector3D(dataPtr[8], dataPtr[9], dataPtr[10]).normalized();
}

View File

@@ -72,7 +72,13 @@
#include <requestmodelnodepreviewimagecommand.h>
#include <changelanguagecommand.h>
// Nanotrace headers are not exported to build dir at all if the feature is disabled, so
// runtime puppet build can't find them.
#if NANOTRACE_ENABLED
#include "nanotrace/nanotrace.h"
#else
#define NANOTRACE_SCOPE(cat, name)
#endif
#include <designersupportdelegate.h>
#include <QAbstractAnimation>

View File

@@ -2116,6 +2116,15 @@ void Qt5InformationNodeInstanceServer::view3DAction(const View3DActionCommand &c
case View3DActionCommand::ShowGrid:
updatedState.insert("showGrid", command.isEnabled());
break;
case View3DActionCommand::ShowSelectionBox:
updatedState.insert("showSelectionBox", command.isEnabled());
break;
case View3DActionCommand::ShowIconGizmo:
updatedState.insert("showIconGizmo", command.isEnabled());
break;
case View3DActionCommand::ShowCameraFrustum:
updatedState.insert("showCameraFrustum", command.isEnabled());
break;
#ifdef QUICK3D_PARTICLES_MODULE
case View3DActionCommand::ParticlesPlay:
m_particleAnimationPlaying = command.isEnabled();

View File

@@ -38,7 +38,14 @@
#include <createscenecommand.h>
#include <reparentinstancescommand.h>
#include <clearscenecommand.h>
#include <nanotrace/nanotrace.h>
// Nanotrace headers are not exported to build dir at all if the feature is disabled, so
// runtime puppet build can't find them.
#if NANOTRACE_ENABLED
#include "nanotrace/nanotrace.h"
#else
#define NANOTRACE_SCOPE(cat, name)
#endif
#include <QDebug>
#include <QOpenGLContext>

View File

@@ -241,7 +241,7 @@ int internalMain(QGuiApplication *application)
#endif
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
startCrashpad();
/* startCrashpad(); */
#endif
new QmlDesigner::Qt5NodeInstanceClientProxy(application);

View File

@@ -36,7 +36,9 @@ Item {
property var selectedAssets: ({})
property int allExpandedState: 0
property string delFilePath: ""
property string contextFilePath: ""
property var contextDir: undefined
property bool isDirContextMenu: false
DropArea {
id: dropArea
@@ -67,6 +69,19 @@ Item {
}
}
MouseArea { // right clicking the empty area of the view
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
if (!assetsModel.isEmpty) {
contextFilePath = ""
contextDir = assetsModel.rootDir()
isDirContextMenu = false
contextMenu.popup()
}
}
}
// called from C++ to close context menu on focus out
function handleViewFocusOut()
{
@@ -75,9 +90,139 @@ Item {
selectedAssetsChanged()
}
Dialog {
id: newFolderDialog
title: qsTr("Create new folder")
anchors.centerIn: parent
closePolicy: Popup.CloseOnEscape
modal: true
contentItem: Column {
spacing: 2
Row {
Text {
text: qsTr("Folder Name: ")
anchors.verticalCenter: parent.verticalCenter
color: StudioTheme.Values.themeTextColor
}
StudioControls.TextField {
id: folderName
actionIndicator.visible: false
translationIndicator.visible: false
Keys.onEnterPressed: btnCreate.onClicked()
Keys.onReturnPressed: btnCreate.onClicked()
}
}
Text {
text: qsTr("Folder Name cannot be empty.")
color: "#ff0000"
anchors.right: parent.right
visible: folderName.text === ""
}
Item { // spacer
width: 1
height: 20
}
Row {
anchors.right: parent.right
Button {
id: btnCreate
text: qsTr("Create")
enabled: folderName.text !== ""
onClicked: {
assetsModel.addNewFolder(contextDir.dirPath + '/' + folderName.text)
newFolderDialog.accept()
}
}
Button {
text: qsTr("Cancel")
onClicked: newFolderDialog.reject()
}
}
}
onOpened: {
folderName.text = "New folder"
folderName.selectAll()
folderName.forceActiveFocus()
}
}
Dialog {
id: confirmDeleteFolderDialog
title: qsTr("Folder not empty")
anchors.centerIn: parent
closePolicy: Popup.CloseOnEscape
implicitWidth: 300
modal: true
contentItem: Column {
spacing: 20
width: parent.width
Text {
id: folderNotEmpty
text: qsTr("Folder '%1' is not empty. Are you sure you want to delete it?")
.arg(contextDir ? contextDir.dirName : "")
color: StudioTheme.Values.themeTextColor
wrapMode: Text.WordWrap
width: confirmDeleteFolderDialog.width
leftPadding: 10
rightPadding: 10
Keys.onEnterPressed: btnDelete.onClicked()
Keys.onReturnPressed: btnDelete.onClicked()
}
Text {
text: qsTr("If the folder has assets in use, deleting it might cause the project to not work correctly.")
color: StudioTheme.Values.themeTextColor
wrapMode: Text.WordWrap
width: confirmDeleteFolderDialog.width
leftPadding: 10
rightPadding: 10
}
Row {
anchors.right: parent.right
Button {
id: btnDelete
text: qsTr("Delete")
onClicked: {
assetsModel.deleteFolder(contextDir.dirPath)
confirmDeleteFolderDialog.accept()
}
}
Button {
text: qsTr("Cancel")
onClicked: confirmDeleteFolderDialog.reject()
}
}
}
onOpened: folderNotEmpty.forceActiveFocus()
}
ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
id: assetsView
anchors.fill: parent
interactive: assetsView.verticalScrollBarVisible
Item {
StudioControls.Menu {
@@ -86,7 +231,7 @@ Item {
StudioControls.MenuItem {
text: qsTr("Expand All")
enabled: allExpandedState !== 1
visible: !delFilePath
visible: isDirContextMenu
height: visible ? implicitHeight : 0
onTriggered: assetsModel.toggleExpandAll(true)
}
@@ -94,22 +239,51 @@ Item {
StudioControls.MenuItem {
text: qsTr("Collapse All")
enabled: allExpandedState !== 2
visible: !delFilePath
visible: isDirContextMenu
height: visible ? implicitHeight : 0
onTriggered: assetsModel.toggleExpandAll(false)
}
StudioControls.MenuSeparator {
visible: isDirContextMenu
height: visible ? StudioTheme.Values.border : 0
}
StudioControls.MenuItem {
text: qsTr("Delete File")
visible: delFilePath
visible: contextFilePath
height: visible ? implicitHeight : 0
onTriggered: assetsModel.removeFile(delFilePath)
onTriggered: assetsModel.deleteFile(contextFilePath)
}
StudioControls.MenuSeparator {
visible: contextFilePath
height: visible ? StudioTheme.Values.border : 0
}
StudioControls.MenuItem {
text: qsTr("New Folder")
onTriggered: newFolderDialog.open()
}
StudioControls.MenuItem {
text: qsTr("Delete Folder")
visible: isDirContextMenu
height: visible ? implicitHeight : 0
onTriggered: {
var dirEmpty = !(contextDir.dirsModel && contextDir.dirsModel.rowCount() > 0)
&& !(contextDir.filesModel && contextDir.filesModel.rowCount() > 0);
if (dirEmpty)
assetsModel.deleteFolder(contextDir.dirPath)
else
confirmDeleteFolderDialog.open()
}
}
}
}
Column {
spacing: 2
Repeater {
model: assetsModel // context property
delegate: dirSection
@@ -120,31 +294,35 @@ Item {
Section {
width: assetsView.width -
(assetsView.verticalScrollBarVisible ? assetsView.verticalThickness : 0)
(assetsView.verticalScrollBarVisible ? assetsView.verticalThickness : 0) - 5
caption: dirName
sectionHeight: 30
sectionFontSize: 15
levelShift: 20
leftPadding: 0
topPadding: dirDepth > 0 ? 5 : 0
bottomPadding: 0
hideHeader: dirDepth === 0
showLeftBorder: true
showLeftBorder: dirDepth > 0
expanded: dirExpanded
visible: dirVisible
visible: !assetsModel.isEmpty && dirVisible
expandOnClick: false
useDefaulContextMenu: false
onToggleExpand: {
dirExpanded = !dirExpanded
}
onShowContextMenu: {
delFilePath = ""
contextFilePath = ""
contextDir = model
isDirContextMenu = true
allExpandedState = assetsModel.getAllExpandedState()
contextMenu.popup()
}
Column {
spacing: 5
leftPadding: 15
leftPadding: 5
Repeater {
model: dirsModel
@@ -155,6 +333,25 @@ Item {
model: filesModel
delegate: fileSection
}
Text {
text: qsTr("Empty folder")
color: StudioTheme.Values.themeTextColorDisabled
font.pixelSize: 12
visible: !(dirsModel && dirsModel.rowCount() > 0)
&& !(filesModel && filesModel.rowCount() > 0)
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
contextFilePath = ""
contextDir = model
isDirContextMenu = true
contextMenu.popup()
}
}
}
}
}
}
@@ -222,8 +419,11 @@ Item {
if (currFileSelected)
rootView.startDragAsset(selectedAssetsArr, mapToGlobal(mouse.x, mouse.y))
} else {
delFilePath = filePath
contextFilePath = filePath
contextDir = model.fileDir
tooltipBackend.hideTooltip()
isDirContextMenu = false
contextMenu.popup()
}
}
@@ -263,7 +463,7 @@ Item {
// Placeholder when the assets panel is empty
Column {
id: colNoAssets
visible: assetsModel.isEmpty
visible: assetsModel.isEmpty && !rootView.searchActive
spacing: 20
x: 20
@@ -307,4 +507,13 @@ Item {
wrapMode: Text.WordWrap
}
}
Text {
text: qsTr("No match found.")
x: 20
y: 10
color: StudioTheme.Values.themeTextColor
font.pixelSize: 12
visible: assetsModel.isEmpty && rootView.searchActive
}
}

View File

@@ -173,7 +173,7 @@ Item {
id: leftBorder
visible: false
width: 1
height: parent.height - 15
height: parent.height - bottomPadding
color: header.color
}

View File

@@ -27,29 +27,35 @@
Metadata {
id: metadataFile
defaultVersion: v19
defaultVersion: v20
VersionData {
id: v14
name: "QUL 1.4"
name: "Qt for MCUs 1.4"
path: "qul-14.qml"
}
VersionData {
id: v17
name: "QUL 1.7"
name: "Qt for MCUs 1.7"
path: "qul-17.qml"
}
VersionData {
id: v18
name: "QUL 1.8"
name: "Qt for MCUs 1.8"
path: "qul-18.qml"
}
VersionData {
id: v19
name: "QUL 1.9"
name: "Qt for MCUs 1.9"
path: "qul-19.qml"
}
VersionData {
id: v20
name: "Qt for MCUs 2.0"
path: "qul-20.qml"
}
}

View File

@@ -24,7 +24,7 @@
****************************************************************************/
VersionData {
name: "QUL 1.4"
name: "Qt for MCUs 1.4"
bannedItems: ["QtQuick.AnimatedImage",
"QtQuick.FocusScope",
@@ -34,6 +34,7 @@ VersionData {
"QtQuick.Grid",
"QtQuick.GridView",
"QtQuick.PathView",
"QtQuick.Loader",
"QtQuick.Controls",
"QtQuick.Controls.BusyIndicator",
"QtQuick.Controls.ButtonGroup",

View File

@@ -24,7 +24,7 @@
****************************************************************************/
VersionData {
name: "QUL 1.7"
name: "Qt for MCUs 1.7"
bannedItems: ["QtQuick.AnimatedImage",
"QtQuick.FocusScope",
@@ -34,6 +34,7 @@ VersionData {
"QtQuick.Grid",
"QtQuick.GridView",
"QtQuick.PathView",
"QtQuick.Loader",
"QtQuick.Controls",
"QtQuick.Controls.BusyIndicator",
"QtQuick.Controls.ButtonGroup",

View File

@@ -24,7 +24,7 @@
****************************************************************************/
VersionData {
name: "QUL 1.8"
name: "Qt for MCUs 1.8"
bannedItems: ["QtQuick.AnimatedImage",
"QtQuick.FocusScope",
@@ -34,6 +34,7 @@ VersionData {
"QtQuick.Grid",
"QtQuick.GridView",
"QtQuick.PathView",
"QtQuick.Loader",
"QtQuick.Controls",
"QtQuick.Controls.BusyIndicator",
"QtQuick.Controls.ButtonGroup",
@@ -63,7 +64,11 @@ VersionData {
"QtQuick.Controls.TextArea",
"QtQuick.Controls.TextField",
"QtQuick.Controls.ToolSeparator",
"QtQuick.Controls.Tumbler"]
"QtQuick.Controls.Tumbler",
"QtQuick.Shapes.ConicalGradient",
"QtQuick.Shapes.LinearGradient",
"QtQuick.Shapes.RadialGradient",
"QtQuick.Shapes.ShapeGradient"]
allowedImports: ["QtQuick",
"QtQuick.Shapes",

View File

@@ -24,7 +24,7 @@
****************************************************************************/
VersionData {
name: "QUL 1.9"
name: "Qt for MCUs 1.9"
bannedItems: ["QtQuick.AnimatedImage",
"QtQuick.FocusScope",
@@ -34,6 +34,7 @@ VersionData {
"QtQuick.Grid",
"QtQuick.GridView",
"QtQuick.PathView",
"QtQuick.Loader",
"QtQuick.Controls",
"QtQuick.Controls.BusyIndicator",
"QtQuick.Controls.ButtonGroup",
@@ -63,7 +64,11 @@ VersionData {
"QtQuick.Controls.TextArea",
"QtQuick.Controls.TextField",
"QtQuick.Controls.ToolSeparator",
"QtQuick.Controls.Tumbler"]
"QtQuick.Controls.Tumbler",
"QtQuick.Shapes.ConicalGradient",
"QtQuick.Shapes.LinearGradient",
"QtQuick.Shapes.RadialGradient",
"QtQuick.Shapes.ShapeGradient"]
allowedImports: ["QtQuick",
"QtQuick.Shapes",

View File

@@ -0,0 +1,221 @@
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
VersionData {
name: "Qt for MCUs 2.0"
bannedItems: ["QtQuick.AnimatedImage",
"QtQuick.FocusScope",
"QtQuick.TextInput",
"QtQuick.TextEdit",
"QtQuick.Flow",
"QtQuick.Grid",
"QtQuick.GridView",
"QtQuick.PathView",
"QtQuick.Loader",
"QtQuick.Controls",
"QtQuick.Controls.BusyIndicator",
"QtQuick.Controls.ButtonGroup",
"QtQuick.Controls.CheckDelegate",
"QtQuick.Controls.Container",
"QtQuick.Controls.ComboBox",
"QtQuick.Controls.DelayButton",
"QtQuick.Controls.Frame",
"QtQuick.Controls.GroupBox",
"QtQuick.Controls.ItemDelegate",
"QtQuick.Controls.Label",
"QtQuick.Controls.Page",
"QtQuick.Controls.PageIndicator",
"QtQuick.Controls.Pane",
"QtQuick.Controls.RadioDelegate",
"QtQuick.Controls.RangeSlider",
"QtQuick.Controls.RoundButton",
"QtQuick.Controls.ScrollView",
"QtQuick.Controls.SpinBox",
"QtQuick.Controls.StackView",
"QtQuick.Controls.SwipeDelegate",
"QtQuick.Controls.SwitchDelegate",
"QtQuick.Controls.ToolBar",
"QtQuick.Controls.ToolButton",
"QtQuick.Controls.TabBar",
"QtQuick.Controls.TabButton",
"QtQuick.Controls.TextArea",
"QtQuick.Controls.TextField",
"QtQuick.Controls.ToolSeparator",
"QtQuick.Controls.Tumbler",
"QtQuick.Shapes.ConicalGradient",
"QtQuick.Shapes.LinearGradient",
"QtQuick.Shapes.RadialGradient",
"QtQuick.Shapes.ShapeGradient"]
allowedImports: ["QtQuick",
"QtQuick.Shapes",
"QtQuick.Controls",
"QtQuick.Timeline",
"QtQuickUltralite.Extras",
"QtQuickUltralite.Layers"]
bannedImports: ["FlowView"]
//ComplexProperty is not a type, it's just a way to handle bigger props
ComplexProperty {
prefix: "font"
bannedProperties: ["wordSpacing", "letterSpacing", "hintingPreference",
"kerning", "preferShaping", "capitalization",
"strikeout", "underline", "styleName"]
}
QtQuick.Item {
bannedProperties: ["layer", "opacity", "smooth", "antialiasing",
"baselineOffset", "focus", "activeFocusOnTab",
"rotation", "scale", "transformOrigin"]
}
QtQuick.Rectangle {
bannedProperties: ["gradient", "border"]
}
QtQuick.Flickable {
bannedProperties: ["boundsBehavior", "boundsMovement", "flickDeceleration",
"flickableDirection", "leftMargin", "rightMargin", "bottomMargin", "topMargin",
"originX", "originY", "pixelAligned", "pressDelay", "synchronousDrag"]
}
QtQuick.MouseArea {
bannedProperties: ["propagateComposedEvents", "preventStealing", "cursorShape",
"scrollGestureEnabled", "drag", "acceptedButtons", "hoverEnabled"]
}
QtQuick.Image {
allowChildren: false
allowedProperties: ["rotation", "scale", "transformOrigin"]
bannedProperties: ["mirror", "mipmap", "cache", "autoTransform", "asynchronous",
"sourceSize", "smooth"]
}
QtQuick.BorderImage {
bannedProperties: ["asynchronous", "cache", "currentFrame", "frameCount",
"horizontalTileMode", "mirror", "progress", "smooth", "sourceSize",
"status", "verticalTileMode"]
}
QtQuick.Text {
allowChildren: false
allowedProperties: ["rotation", "scale", "transformOrigin"]
bannedProperties: ["elide", "lineHeight", "lineHeightMode", "wrapMode", "style",
"styleColor", "minimumPointSize", "minimumPixelSize",
"fontSizeMode", "renderType", "renderTypeQuality", "textFormat", "maximumLineCount"]
}
//Padding is not an actual item, but rather set of properties in Text
Padding {
bannedProperties: ["bottomPadding", "topPadding", "leftPadding", "rightPadding"]
}
QtQuick.Column {
bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding"]
}
QtQuick.Row {
bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding",
"effectiveLayoutDirection", "layoutDirection"]
}
QtQuick.ListView {
bannedProperties: ["cacheBuffer", "highlightRangeMode", "highlightMoveDuration",
"highlightResizeDuration", "preferredHighlightBegin", "layoutDirection",
"preferredHighlightEnd", "highlightFollowsCurrentItem", "keyNavigationWraps",
"snapMode", "highlightMoveVelocity", "highlightResizeVelocity"]
}
QtQuick.Animation {
bannedProperties: ["paused"]
}
//Quick Controls2 Items and properties:
QtQuick.Controls.Control {
bannedProperties: ["focusPolicy", "hoverEnabled", "wheelEnabled"]
}
QtQuick.Controls.AbstractButton {
bannedProperties: ["display", "autoExclusive"]
}
QtQuick.Controls.ProgressBar {
bannedProperties: ["indeterminate"]
}
QtQuick.Controls.Slider {
bannedProperties: ["live", "snapMode", "touchDragThreshold"]
}
//Path and Shapes related:
QtQuick.Path {
bannedProperties: ["scale", "pathElements"]
}
QtQuick.PathArc {
bannedProperties: ["relativeX", "relativeY"]
}
QtQuick.PathLine {
bannedProperties: ["relativeX", "relativeY"]
}
QtQuick.PathMove {
bannedProperties: ["relativeX", "relativeY"]
}
QtQuick.PathQuad {
bannedProperties: ["relativeX", "relativeY",
"relativeControlX", "relativeControlY"]
}
QtQuick.PathCubic {
bannedProperties: ["relativeX", "relativeY",
"relativeControl1X", "relativeControl1Y",
"relativeControl2X", "relativeControl2Y"]
}
QtQuick.PathElement {
//nothing
}
QtQuick.PathSvg {
//nothing
}
QtQuick.Shapes.Shape {
bannedProperties: ["asynchronous", "containsMode", "data",
"renderType", "status", "vendorExtensionsEnabled"]
}
QtQuick.Shapes.ShapePath {
bannedProperties: ["dashOffset", "dashPattern",
"fillGradient", "strokeStyle"]
}
}

View File

@@ -33,11 +33,8 @@ import StudioTheme 1.0 as StudioTheme
Rectangle {
id: myRoot
color: baseColor
property bool isBaseState
property bool isCurrentState
property color baseColor
property string delegateStateName
property string delegateStateImageSource
property bool delegateHasWhenCondition
@@ -47,14 +44,14 @@ Rectangle {
property int bottomAreaHeight
property int stateMargin
property int previewMargin
property int columnSpacing
readonly property bool isDefaultState: isDefault
property int closeButtonMargin: 6
property int textFieldMargin: 4
signal delegateInteraction
property int scrollBarH: 0
property int listMargin: 0
function autoComplete(text, pos, explicitComplete, filter) {
var stringList = statesEditorModel.autoComplete(text, pos, explicitComplete)
@@ -65,14 +62,16 @@ Rectangle {
return statesEditorModel.hasAnnotation(internalNodeId)
}
color: isCurrentState ? StudioTheme.Values.themeInteraction
: StudioTheme.Values.themeControlBackgroundInteraction
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: {
focus = true
root.currentStateInternalId = internalNodeId
contextMenu.dismiss() // close potentially open context menu
myRoot.delegateInteraction()
}
}
@@ -89,7 +88,6 @@ Rectangle {
visible: !isBaseState && isCurrentState
onClicked: {
myRoot.delegateInteraction()
if (isDefaultState)
statesEditorModel.resetDefaultState()
@@ -254,9 +252,8 @@ Rectangle {
Rectangle { // separator
width: column.width
height: myRoot.columnSpacing
height: 2
color: StudioTheme.Values.themeStateSeparator
visible: expanded
}
Rectangle {
@@ -264,7 +261,6 @@ Rectangle {
width: myRoot.width - 2 * myRoot.stateMargin
height: myRoot.bottomAreaHeight
color: StudioTheme.Values.themeStateBackground
visible: expanded
Image {
anchors.fill: stateImageBackground

View File

@@ -26,6 +26,7 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuickDesignerTheme 1.0
import Qt.labs.qmlmodels 1.0
import HelperWidgets 2.0
import StudioControls 1.0 as StudioControls
import StudioTheme 1.0 as StudioTheme
@@ -33,27 +34,24 @@ import StudioTheme 1.0 as StudioTheme
FocusScope {
id: root
property int delegateTopAreaHeight: StudioTheme.Values.height + 8
property int delegateBottomAreaHeight: delegateHeight - 2 * delegateStateMargin - delegateTopAreaHeight - delegateColumnSpacing
property int delegateColumnSpacing: 2
property int delegateStateMargin: 16
property int delegatePreviewMargin: 10
property int effectiveHeight: root.expanded ? Math.max(85, Math.min(287, root.height)) : 85 // height of the states area
readonly property int delegateTopAreaHeight: StudioTheme.Values.height + 8
readonly property int delegateBottomAreaHeight: delegateHeight - 2 * delegateStateMargin - delegateTopAreaHeight - 2
readonly property int delegateStateMargin: 16
readonly property int delegatePreviewMargin: 10
readonly property int effectiveHeight: root.height < 130 ? 89 : Math.min(root.height, 287)
readonly property int scrollBarH: statesListView.ScrollBar.horizontal.scrollBarVisible ? StudioTheme.Values.scrollBarThickness : 0
readonly property int listMargin: 10
readonly property int delegateWidth: 264
readonly property int delegateHeight: Math.max(effectiveHeight - scrollBarH - 2 * listMargin, 69)
readonly property int innerSpacing: 2
property int currentStateInternalId: 0
signal createNewState
signal deleteState(int internalNodeId)
signal duplicateCurrentState
property int padding: 2
property int delegateWidth: 264
property int delegateHeight: effectiveHeight
- StudioTheme.Values.scrollBarThickness
- 2 * (root.padding + StudioTheme.Values.border)
property int innerSpacing: 2
property int currentStateInternalId: 0
property bool expanded: true
Connections {
target: statesEditorModel
function onChangedToState(n) { root.currentStateInternalId = n }
@@ -65,92 +63,117 @@ FocusScope {
color: StudioTheme.Values.themePanelBackground
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: function(mouse) {
if (mouse.button === Qt.LeftButton) {
contextMenu.dismiss()
focus = true
} else if (mouse.button === Qt.RightButton) {
contextMenu.popup()
}
}
StudioControls.Menu {
id: contextMenu
StudioControls.MenuItem {
text: root.expanded ? qsTr("Collapse") : qsTr("Expand")
onTriggered: root.expanded = !root.expanded
}
}
}
AbstractButton {
id: addStateButton
buttonIcon: root.expanded ? qsTr("Create New State") : StudioTheme.Constants.plus
iconFont: root.expanded ? StudioTheme.Constants.font : StudioTheme.Constants.iconFont
iconSize: root.expanded ? StudioTheme.Values.myFontSize : StudioTheme.Values.myIconFontSize
iconItalic: root.expanded
buttonIcon: StudioTheme.Constants.plus
iconFont: StudioTheme.Constants.iconFont
iconSize: StudioTheme.Values.myIconFontSize
tooltip: qsTr("Add a new state.")
visible: canAddNewStates
anchors.right: parent.right
anchors.rightMargin: 8
y: (Math.min(effectiveHeight, root.height) - height) / 2
width: root.expanded ? 140 : 18
height: root.expanded ? 60 : 18
anchors.rightMargin: 4
anchors.bottom: parent.bottom
anchors.bottomMargin: statesListView.contentWidth - statesListView.contentX - root.delegateWidth / 2 > statesListView.width ? scrollBarH + 5 : -35
width: 35
height: 35
onClicked: {
contextMenu.dismiss()
root.createNewState()
Behavior on anchors.bottomMargin {
PropertyAnimation {
duration: 700
easing.type: Easing.InOutBack
}
}
Rectangle { // separator lines between state items
color: StudioTheme.Values.themeStateSeparator
x: root.padding
y: root.padding
width: statesListView.width
height: root.delegateHeight
onClicked: root.createNewState()
}
ListView {
id: statesListView
boundsBehavior: Flickable.StopAtBounds
clip: true
x: root.padding
y: root.padding
width: Math.min(root.delegateWidth * statesListView.count + root.innerSpacing * (statesListView.count - 1),
root.width - addStateButton.width - root.padding - 16) // 16 = 2 * 8 (addStateButton margin)
height: root.delegateHeight + StudioTheme.Values.scrollBarThickness
anchors.fill: parent
anchors.topMargin: listMargin
anchors.leftMargin: listMargin
anchors.rightMargin: listMargin
model: statesEditorModel
orientation: ListView.Horizontal
spacing: root.innerSpacing
delegate: StatesDelegate {
id: statesDelegate
property int prevCount: 0
onCountChanged: {
if (count > prevCount)
Qt.callLater(statesListView.positionViewAtEnd)
prevCount = count
}
delegate: DelegateChooser {
role: "type"
DelegateChoice {
roleValue: "state"
StatesDelegate {
width: root.delegateWidth
height: root.delegateHeight
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
anchors.verticalCenterOffset: -.5 * (scrollBarH + listMargin)
isBaseState: 0 === internalNodeId
isCurrentState: root.currentStateInternalId === internalNodeId
baseColor: isCurrentState ? StudioTheme.Values.themeInteraction : background.color
delegateStateName: stateName
delegateStateImageSource: stateImageSource
delegateHasWhenCondition: hasWhenCondition
delegateWhenConditionString: whenConditionString
onDelegateInteraction: contextMenu.dismiss()
columnSpacing: root.delegateColumnSpacing
topAreaHeight: root.delegateTopAreaHeight
bottomAreaHeight: root.delegateBottomAreaHeight
stateMargin: root.delegateStateMargin
previewMargin: root.delegatePreviewMargin
scrollBarH: root.scrollBarH
listMargin: root.listMargin
}
}
DelegateChoice {
roleValue: "add"
Rectangle {
visible: canAddNewStates
width: root.delegateWidth
height: root.delegateHeight
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
anchors.verticalCenterOffset: -.5 * (scrollBarH + listMargin)
color: Qt.lighter(StudioTheme.Values.themeControlBackgroundInteraction, addState.containsMouse ? 1.5 : 1)
ToolTip.text: qsTr("Add a new state.")
ToolTip.visible: addState.containsMouse
ToolTip.delay: 1000
Rectangle { // inner rect
width: parent.width - 30
height: parent.height - 30
anchors.centerIn: parent
color: StudioTheme.Values.themeStateBackground
}
Text {
text: "+"
anchors.centerIn: parent
anchors.verticalCenterOffset: -5
font.pixelSize: parent.height * .5
color: Qt.lighter(StudioTheme.Values.themeControlBackgroundInteraction, addState.containsMouse ? 1.5 : 1)
}
MouseArea {
id: addState
hoverEnabled: true
anchors.fill: parent
onClicked: root.createNewState()
}
}
}
}
ScrollBar.horizontal: HorizontalScrollBar {}

View File

@@ -1,27 +1,19 @@
set(languages cs da de fr hr ja pl ru sl uk zh_CN zh_TW)
set(bad_languages hu) # Fix these before including them in languages!
# TODO: Remove when cmake_minimum_required greater than 3.12
if (CMAKE_VERSION VERSION_GREATER 3.12)
find_package(Python3 COMPONENTS Interpreter)
set(PYTHONINTERP_FOUND ${Python3_Interpreter_FOUND})
set(PYTHON_VERSION_STRING ${Python3_VERSION})
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
else()
find_package(PythonInterp)
endif()
set(json_wizards_h "")
set(custom_wizards_h "")
set(externaltools_h "")
set(snippets_h "")
if (NOT PYTHONINTERP_FOUND OR NOT PYTHON_VERSION_STRING VERSION_GREATER_EQUAL "3.0.0")
message(WARNING "No python3 interpreter found, skipping extraction of data from XML and JSON files.\n *** Please pass -DPYTHON_EXECUTABLE=/path/to/python3 to cmake.")
if (NOT Python3_Interpreter_FOUND)
message(WARNING "No python3 interpreter found, skipping extraction of data from XML and JSON files.\n *** Please pass -DPython3_EXECUTABLE=/path/to/python3 to cmake.")
else()
set(json_wizards_h "${CMAKE_CURRENT_BINARY_DIR}/jsonwizards_tr.h")
add_custom_command(OUTPUT "${json_wizards_h}"
COMMAND "${PYTHON_EXECUTABLE}"
COMMAND "${Python3_EXECUTABLE}"
"${CMAKE_CURRENT_SOURCE_DIR}/extract-jsonwizards.py"
"${PROJECT_SOURCE_DIR}/share/qtcreator/templates/wizards" "${json_wizards_h}"
COMMENT Generate translation data from JSON wizards
@@ -29,7 +21,7 @@ else()
set(custom_wizards_h "${CMAKE_CURRENT_BINARY_DIR}/customwizards_tr.h")
add_custom_command(OUTPUT "${custom_wizards_h}"
COMMAND "${PYTHON_EXECUTABLE}"
COMMAND "${Python3_EXECUTABLE}"
"${CMAKE_CURRENT_SOURCE_DIR}/extract-customwizards.py"
"${PROJECT_SOURCE_DIR}/share/qtcreator/templates/wizards" "${custom_wizards_h}"
COMMENT Generate translation data from XML wizards
@@ -37,7 +29,7 @@ else()
set(externaltools_h "${CMAKE_CURRENT_BINARY_DIR}/externaltools_tr.h")
add_custom_command(OUTPUT "${externaltools_h}"
COMMAND "${PYTHON_EXECUTABLE}"
COMMAND "${Python3_EXECUTABLE}"
"${CMAKE_CURRENT_SOURCE_DIR}/extract-externaltools.py"
"${PROJECT_SOURCE_DIR}/src/share/qtcreator/externaltools" "${externaltools_h}"
COMMENT Generate translation data from external tools definitions
@@ -45,7 +37,7 @@ else()
set(snippets_h "${CMAKE_CURRENT_BINARY_DIR}/snippets_tr.h")
add_custom_command(OUTPUT "${snippets_h}"
COMMAND "${PYTHON_EXECUTABLE}"
COMMAND "${Python3_EXECUTABLE}"
"${CMAKE_CURRENT_SOURCE_DIR}/extract-snippets.py"
"${PROJECT_SOURCE_DIR}/share/qtcreator/snippets" "${snippets_h}"
COMMENT Generate translation data from snippets definitions

View File

@@ -54911,28 +54911,28 @@ Nainstalujte, prosím, jedno SDK s API verze alespoň %1.</translation>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Heslo je OK&lt;/span&gt;</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Heslo k úložišti klíče je příliš krátké&lt;/span&gt;</translation>
<source>Keystore password is too short.</source>
<translation>Heslo k úložišti klíče je příliš krátké.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hesla k úložišti klíče neodpovídají&lt;/span&gt;</translation>
<source>Keystore passwords do not match.</source>
<translation>Hesla k úložišti klíče neodpovídají.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Heslo k certifikátu je příliš krátké&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation>Heslo k certifikátu je příliš krátké.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hesla k certifikátům neodpovídají&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation>Hesla k certifikátům neodpovídají.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Alias certifikátu chybí&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation>Alias certifikátu chybí.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Neplatné číslo země (mezinárodní předvolba)&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation>Neplatné číslo země (mezinárodní předvolba).</translation>
</message>
<message>
<source>Keystore file name</source>

View File

@@ -268,28 +268,28 @@ Minimum API-niveauet krævet af kittet er %1.</translation>
<context>
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore adgangskode er for kort&lt;/span&gt;</translation>
<source>Keystore password is too short.</source>
<translation>Keystore adgangskode er for kort.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore adgangskoder matcher ikke&lt;/span&gt;</translation>
<source>Keystore passwords do not match.</source>
<translation>Keystore adgangskoder matcher ikke.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certifikat adgangskode er for kort&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation>Certifikat adgangskode er for kort.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certifikat adgangskoder matcher ikke&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation>Certifikat adgangskoder matcher ikke.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certifikat-alias mangler&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation>Certifikat-alias mangler.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Ugyldig sprogkode&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation>Ugyldig sprogkode.</translation>
</message>
<message>
<source>Keystore Filename</source>

View File

@@ -19510,28 +19510,28 @@ should a repository require SSH-authentication (see documentation on SSH and the
<context>
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Das Keystore-Passwort ist zu kurz&lt;/span&gt;</translation>
<source>Keystore password is too short.</source>
<translation>Das Keystore-Passwort ist zu kurz.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Die Keystore-Passwörter stimmen nicht überein&lt;/span&gt;</translation>
<source>Keystore passwords do not match.</source>
<translation>Die Keystore-Passwörter stimmen nicht überein.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Das Passwort des Zertifikats ist zu kurz&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation>Das Passwort des Zertifikats ist zu kurz.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Die Passwörter des Zertifikats stimmen nicht überein&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation>Die Passwörter des Zertifikats stimmen nicht überein.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Der Alias des Zertifikats fehlt&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation>Der Alias des Zertifikats fehlt.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Ungültiger Ländercode&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation>Ungültiger Ländercode.</translation>
</message>
<message>
<source>Keystore Filename</source>

View File

@@ -60828,28 +60828,28 @@ Veuillez installer un SDK supérieur à la version %1.</translation>
<translation>&lt;span style=&quot; color:#00ff00;&quot;&gt;Mot de passe correct&lt;/span&gt;</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Le mot de passe du trousseau de clés est trop court&lt;/span&gt;</translation>
<source>Keystore password is too short.</source>
<translation>Le mot de passe du trousseau de clés est trop court.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Les mots de passe du trousseau de clés ne correspondent pas&lt;/span&gt;</translation>
<source>Keystore passwords do not match.</source>
<translation>Les mots de passe du trousseau de clés ne correspondent pas.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Le mot de passe du certificat est manquant&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation>Le mot de passe du certificat est manquant.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Les mots de passe du certificat ne correspondent pas&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation>Les mots de passe du certificat ne correspondent pas.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;L&apos;alias du certificat est manquant&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation>L&apos;alias du certificat est manquant.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Le code de pays est invalide&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation>Le code de pays est invalide.</translation>
</message>
<message>
<source>Keystore file name</source>

View File

@@ -14265,27 +14265,27 @@ The minimum API level required by the kit is %1.</source>
<context>
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<source>Keystore password is too short.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<source>Keystore passwords do not match.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<source>Certificate password is too short.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<source>Certificate passwords do not match.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<source>Certificate alias is missing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<source>Invalid country code.</source>
<translation type="unfinished"></translation>
</message>
<message>

View File

@@ -9625,28 +9625,28 @@ with a password, which you can enter below.</source>
<context>
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation>
<source>Keystore password is too short.</source>
<translation></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation>
<source>Keystore passwords do not match.</source>
<translation></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation></translation>
</message>
<message>
<source>Keystore file name</source>

View File

@@ -21525,28 +21525,28 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS.</translation>
<context>
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<source>Keystore password is too short.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<source>Keystore passwords do not match.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hasło certyfikatu jest zbyt krótkie&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation>Hasło certyfikatu jest zbyt krótkie.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hasła certyfikatu nie zgadzają się&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation>Hasła certyfikatu nie zgadzają się.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Brak aliasu certyfikatu&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation>Brak aliasu certyfikatu.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Niepoprawny kod kraju&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation>Niepoprawny kod kraju.</translation>
</message>
<message>
<source>Keystore Filename</source>

View File

@@ -887,28 +887,28 @@ The files in the Android package source directory are copied to the build direct
<context>
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль связки ключей слишком короткий&lt;/span&gt;</translation>
<source>Keystore password is too short.</source>
<translation>Пароль связки ключей слишком короткий.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неверный пароль связки ключей&lt;/span&gt;</translation>
<source>Keystore passwords do not match.</source>
<translation>Неверный пароль связки ключей.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль сертификата слишком короткий&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation>Пароль сертификата слишком короткий.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неверный пароль сертификата&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation>Неверный пароль сертификата.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Отсутствует алиас сертификата&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation>Отсутствует алиас сертификата.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неверный код страны&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation>Неверный код страны.</translation>
</message>
<message>
<source>Keystore Filename</source>

View File

@@ -32522,28 +32522,28 @@ Please install an SDK of at least API version %1.</source>
<translation type="vanished">&lt;span style=&quot; color:#00ff00;&quot;&gt;Пароль вдалий&lt;/span&gt;</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль сховища ключів закороткий&lt;/span&gt;</translation>
<source>Keystore password is too short.</source>
<translation>Пароль сховища ключів закороткий.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Паролі сховища ключів не співпадають&lt;/span&gt;</translation>
<source>Keystore passwords do not match.</source>
<translation>Паролі сховища ключів не співпадають.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль сертифіката закороткий&lt;/span&gt;</translation>
<source>Certificate password is too short.</source>
<translation>Пароль сертифіката закороткий.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Паролі сертифіката не співпадають&lt;/span&gt;</translation>
<source>Certificate passwords do not match.</source>
<translation>Паролі сертифіката не співпадають.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Відсутній псевдонім сертифіката&lt;/span&gt;</translation>
<source>Certificate alias is missing.</source>
<translation>Відсутній псевдонім сертифіката.</translation>
</message>
<message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неправильний код країни&lt;/span&gt;</translation>
<source>Invalid country code.</source>
<translation>Неправильний код країни.</translation>
</message>
<message>
<source>Keystore file name</source>

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake")
@@ -60,17 +60,9 @@ add_qtc_library(qtcreatorcdbext
qtc_library_enabled(_library_enabled qtcreatorcdbext)
if (_library_enabled)
# TODO: Remove when cmake_minimum_required greater than 3.12
if (CMAKE_VERSION VERSION_GREATER 3.12)
find_package(Python3 3.8 COMPONENTS Development)
set(PYTHONLIBS_FOUND ${Python3_Development_FOUND})
set(PYTHON_LIBRARIES ${Python3_LIBRARIES})
set(PYTHON_INCLUDE_DIR ${Python3_INCLUDE_DIRS})
else()
find_package(PythonLibs 3.8)
endif()
if (NOT ${PYTHONLIBS_FOUND})
if (NOT ${Python3_Development_FOUND})
message(WARNING "PythonLibs (at least version 3.8) not found. qtcreatorcdbext will be built without Python support.")
return()
endif()
@@ -80,7 +72,7 @@ if (_library_enabled)
set(PythonRegex "^(.*)/(.*)/(python([0-9]+)_d)${CMAKE_IMPORT_LIBRARY_SUFFIX}$")
endif()
foreach(lib IN LISTS PYTHON_LIBRARIES)
foreach(lib IN LISTS Python3_LIBRARIES)
if (lib MATCHES ${PythonRegex})
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(PythonZipFileName "python${CMAKE_MATCH_4}_d.zip")
@@ -105,8 +97,8 @@ if (_library_enabled)
endif()
extend_qtc_library(qtcreatorcdbext
DEPENDS "${PYTHON_LIBRARIES}"
INCLUDES "${PYTHON_INCLUDE_DIR}"
DEPENDS "${Python3_LIBRARIES}"
INCLUDES "${Python3_INCLUDE_DIRS}"
DEFINES WITH_PYTHON=1
SOURCES
pycdbextmodule.cpp pycdbextmodule.h

View File

@@ -126,8 +126,8 @@ public:
void setAbortOnMetaChars(bool abort);
void start();
void terminate();
void interrupt();
virtual void terminate();
virtual void interrupt();
static bool startDetached(const CommandLine &cmd, const FilePath &workingDirectory = {},
qint64 *pid = nullptr);
@@ -175,7 +175,7 @@ public:
QByteArray rawStdOut() const;
int exitCode() const;
virtual int exitCode() const;
QString exitMessage();
@@ -195,10 +195,10 @@ public:
void setProcessChannelMode(QProcess::ProcessChannelMode mode);
QProcess::ProcessError error() const;
QProcess::ProcessState state() const;
virtual QProcess::ProcessState state() const;
bool isRunning() const; // Short for state() == QProcess::Running.
QString errorString() const;
virtual QString errorString() const;
void setErrorString(const QString &str);
qint64 processId() const;
@@ -207,14 +207,14 @@ public:
bool waitForReadyRead(int msecs = 30000);
bool waitForFinished(int msecs = 30000);
QByteArray readAllStandardOutput();
QByteArray readAllStandardError();
virtual QByteArray readAllStandardOutput();
virtual QByteArray readAllStandardError();
QProcess::ExitStatus exitStatus() const;
virtual QProcess::ExitStatus exitStatus() const;
void kill();
virtual void kill();
qint64 write(const QByteArray &input);
virtual qint64 write(const QByteArray &input);
void close();
void setStandardInputFile(const QString &inputFile);

View File

@@ -54,3 +54,9 @@ add_qtc_plugin(Android
splashscreencontainerwidget.cpp splashscreencontainerwidget.h
splashscreenwidget.cpp splashscreenwidget.h
)
extend_qtc_plugin(Android
CONDITION WITH_TESTS
SOURCES
android_tst.qrc
)

View File

@@ -120,5 +120,13 @@ Project {
"splashscreenwidget.cpp",
"splashscreenwidget.h"
]
Group {
name: "Unit tests"
condition: qtc.testsEnabled
files: [
"android_tst.qrc",
]
}
}
}

Some files were not shown because too many files have changed in this diff Show More