Error importing "Esri.ArcGISRuntime" to Qt Creator - qt
After running the code an error came:
QQmlApplicationEngine failed to load component
qrc:/main.qml:19:1: module "Esri.ArcGISRuntime" is not installed
I am using Qt Creator 4.11.1 Qt 5.14.1
I am using Ubuntu 20.04
I have already added the path to the LD_LIBRARY_PATH as stated here: https://developers.arcgis.com/qt/install-and-set-up/
I have restarted the Qt Creator and my system but still not working.
Any suggestions?
The code is:
main.qml
import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.14 //error here
Rectangle {
id: rootRectangle
clip: true
width: 800
height: 600
readonly property int initialZoomScale: 8000
property bool trackingEnabled: false
property Point lastPosition: null
// add a mapView component
MapView {
anchors.fill: parent
Map {
Basemap {
initStyle: Enums.BasemapStyleArcGISDarkGray
}
}
// set initial viewpoint near UCLA, Los Angeles
ViewpointCenter {
Point {
x: -13185535.98
y: 4037766.28
}
targetScale: initialZoomScale
}
Button {
id: button
text: trackingEnabled ? "Stop tracking" : "Start tracking"
anchors.horizontalCenter: parent.horizontalCenter
width: 200
onClicked: trackingEnabled =! trackingEnabled
}
SimulationParameters {
id: simulationParameters
velocity: 30
}
locationDisplay {
dataSource: SimulatedLocationDataSource {
id: simulatedLocationDataSource
Component.onCompleted: {
setLocationsWithPolylineAndParameters(polyline, simulationParameters);
simulatedLocationDataSource.start();
}
}
initialZoomScale: initialZoomScale
}
// if tracking is enabled then show location history
locationDisplay.onLocationChanged: {
if (!trackingEnabled)
return;
// clear old route
locationHistoryLineOverlay.graphics.clear();
if (lastPosition !== null) {
polylineBuilder.addPoint(lastPosition);
locationHistoryOverlay.graphics.append(ArcGISRuntimeEnvironment.createObject("Graphic", {geometry: lastPosition}));
}
// update last position
lastPosition = locationDisplay.location.position;
// update the polyline
locationHistoryLineOverlay.graphics.append(ArcGISRuntimeEnvironment.createObject("Graphic", {geometry: polylineBuilder.geometry}));
}
Component.onCompleted: {
// Set the focus on MapView to initially enable keyboard navigation
forceActiveFocus();
locationDisplay.autoPanMode = Enums.LocationDisplayAutoPanModeRecenter;
}
Polyline {
id: polyline
json: {"paths":[[[-13185646.046666779,4037971.5966668758],[-13185586.780000051,4037827.6633333955],
[-13185514.813333312,4037709.1299999417],[-13185569.846666701,4037522.8633330846],
[-13185591.01333339,4037378.9299996048],[-13185629.113333428,4037283.6799995075],
[-13185770.93000024,4037425.4966663187],[-13185821.730000293,4037546.146666442],
[-13185880.996667018,4037704.8966666036],[-13185948.730000421,4037874.2300001099],
[-13185974.130000448,4037946.1966668498],[-13186120.180000596,4037958.896666863],
[-13186264.113334076,4037984.296666889],[-13186336.080000836,4038001.2300002342],
[-13186314.91333415,4037757.8133333195],[-13186272.580000773,4037560.9633331187],
[-13186187.913334005,4037463.59666635],[-13186431.33000092,4037404.3299996229],
[-13186676.863334503,4037290.0299995062],[-13187625.130002158,4038589.6633341513],
[-13187333.030001862,4038756.8800009824],[-13187091.730001617,4038617.1800008402],
[-13186791.163334643,4038805.5633343654],[-13186721.313334571,4038801.3300010278],
[-13186833.49666802,4038195.9633337436],[-13186977.677439401,4037699.8176972247],
[-13186784.921301765,4037820.4541915278],[-13186749.517113185,4038150.8932846226],
[-13186649.860878762,4038288.5762400767],[-13186556.760975549,4038323.9804286221],
[-13186472.839936033,4038481.3323777127],[-13186373.183701571,4038489.1999751539],
[-13186344.335844241,4038242.6819215398],[-13186126.665647998,4038308.245233661],
[-13185814.584282301,4038358.0733508728],[-13185651.987268206,4038116.8003622484],
[-13185203.534213299,4038048.6145176427],[-13184576.748949422,4038150.8932845518],
[-13184251.55492135,4037833.5668537691],[-13184146.653621957,4037524.1080205571],
[-13183949.963685593,4037621.1417224966],[-13183687.71043711,4037781.1162040718],
[-13183480.530370807,4037875.5273735262],[-13182307.629999243,4037859.7460188437],
[-13181376.039484169,4037820.9297473822],[-13180716.162869323,4038364.3575478429],
[-13180182.439136729,4038810.7446696493],[-13178474.523192419,4040237.2426458625],
[-13178321.134040033,4039740.6894803117],[-13177958.020228144,4039140.1550991111],
[-13177073.512224896,4037459.5898928214],[-13177757.842101147,4037589.9384406791],
[-13178386.308314031,4037799.427178307],[-13180095.012208173,4037811.6550856642],
[-13180126.165447287,4036845.9046731163],[-13179806.844746364,4036324.0879179495],
[-13180928.361354485,4035887.9425703473],[-13181598.155995468,4035428.432293402],
[-13182984.47513606,4034447.105261297],[-13182229.264383668,4033222.8051626245],
[-13182058.735615831,4033339.8690072047],[-13181939.035180708,4033691.2477038498],
[-13182116.65518121,4033861.1450956347],[-13181792.305615077,4034085.1007484416],
[-13182027.845180977,4034467.3698799671],[-13181877.254310986,4034644.9898804692],
[-13181630.130832028,4034517.5668366305],[-13181386.868657427,4034424.8955320208],
[-13181228.555178719,4034652.7124891868],[-13181379.14604871,4034942.3103160923],
[-13181267.168222306,4035189.4337950516],[-13181074.103004368,4035015.6750989081],
[-13180807.673003616,4034934.5877073747],[-13180618.469090037,4034814.8872722536],
[-13180599.162568243,4035374.7764042714],[-13181047.073873857,4035494.476839392],
[-13181317.365178969,4035413.3894478586],[-13180765.198655669,4035143.0981427468],
[-13180328.871263131,4034892.1133594285],[-13180270.951697765,4035258.9372735149],
[-13180325.009958787,4035718.4324922049],[-13180707.279090302,4035695.2646660525],
[-13181413.897788007,4035536.9511873648],[-13181618.54691902,4035807.2424924765],
[-13181884.976919774,4036065.949884512],[-13182159.129529245,4035861.3007534989],
[-13182174.57474668,4035668.2355355616],[-13182417.83692128,4035664.374231203],
[-13182784.660835361,4035409.5281435261],[-13182997.032575091,4035255.0759691764],
[-13182618.624747934,4034679.7416197238]]],
"spatialReference":{"latestWkid":3857,"wkid":102100}}
}
GraphicsOverlay {
id: locationHistoryLineOverlay
SimpleRenderer {
SimpleLineSymbol {
color: "lime"
style: Enums.SimpleLineSymbolStyleSolid
width: 2
}
}
}
GraphicsOverlay {
id: locationHistoryOverlay
SimpleRenderer {
SimpleMarkerSymbol {
color: "red"
style: Enums.SimpleMarkerSymbolStyleCircle
size: 3
}
}
}
}
PolylineBuilder {
id: polylineBuilder
spatialReference: SpatialReference { wkid: 3857 }
}
}
I will summarise the issues discussed in the comment thread to bring to an end.
Use Qt 5.15 these days and preferably always the latest bug fix release. Which is currently 5.15.5 for open-source, and not commercial, customers at the time of writing this. Even better to switch to 6.x when possible.
Setting the QML_IMPORT_TRACE environment variable can help debugging these issues.
When using qmake, they seem to suggest including their pri file to your qmake pro file.
Something like a export QML2_IMPORT_PATH=..:$QML2_IMPORT_PATH can also help localising these issues as a quick experiment.
Related
(Qt for WebAssembly) MultiPointTouchArea loses all touchpoints after just one is released
If I run the following code in the browser using Qt for webassembly I can shift points around, but if one of the two is released, shifting no longer works and this console messages appears: qt.pointer.dispatch: skipping QEventPoint(id=1 ts=0 pos=0,0 scn=869,370 gbl=869,370 Updated ellipse=(8x8 ∡ 0) vel=0,0 press=-869,-370 last=-869,-370 Δ 869,370) : no target window import QtQuick Window { visible: true Rectangle { anchors.fill:parent MultiPointTouchArea { anchors.fill: parent touchPoints: [ TouchPoint { id: point1 onPressedChanged: console.log('point1', pressed); }, TouchPoint { id: point2 onPressedChanged: console.log('point2', pressed); } ] } Rectangle { width: 200; height: width; color: "red" x: point1.x y: point1.y } Rectangle { width: 200; height: width; color: "green" x: point2.x y: point2.y } } } I tested it with versions Qt5.15.2, Qt6.4.2, Qt6.5 and different browsers, but the same error occurs all the time. Link "test it yourself" Online live qml wasm I debugged a little and it seems the error is in file: C:\Qt\6.5.0\Src\qtbase\src\gui\kernel\qguiapplication.cpp Line 2924: QPointer<QWindow> window = e->window; // the platform hopefully tells us which window received the event Line 2961: // If we somehow still don't have a window, we can't deliver this touchpoint. (should never happen) if (Q_UNLIKELY(!window)) { qCWarning(lcPtrDispatch) << "skipping" << &tempPt << ": no target window"; continue; } here the window is lost. How can i debug it further? I also tested it with Qt under Windows, Linux, Android using diffrent versions. There everything works as expected (only using WebAssembly in the browser it doesn't)
If you check the signals of MultiPointTouchArea you see that you get passed a touchPoints array as an argument. This array is valid during the signal handler, and, you need to react accordingly. The following code runs in WebAssembly and you can test it out on a multitouch device: import QtQuick import QtQuick.Controls Page { background: Rectangle { color: "#848895" } property list<string> status MultiPointTouchArea { anchors.fill: parent onCanceled: msg(`onCanceled: ${touchPoints.length}`); onPressed: msg(`onPressed: ${touchPoints.length}`); onGestureStarted: msg(`onGestureStarted: ${touchPoints.length}`); onReleased: msg(`onReleased: ${touchPoints.length}`); onTouchUpdated: msg(`onTouchUpdated: ${touchPoints.length}`); onUpdated: msg(`onUpdated: ${touchPoints.length}`); Frame { anchors.centerIn: parent background: Rectangle { } Text { text: status.join('\n'); } } } function msg(str) { status.push(str); if (status.length > 20) status.shift(); } } You can Run it WebAssembly now
QML TypeError: Property 'xx' of object yy is not a function
I have this main.qml: import QtQuick 2.13 import QtQuick.Window 2.13 import QtQuick.Controls 2.5 ApplicationWindow { ... Item { // This Item is to provide needed properties for functionality in the original app that was elided out in this example. // It was left in in case it's relevant to the problem. ... Column { ... Text { text: qsTr("Masked text") SlidingMask { id: testMask anchors.fill: parent ... } } Row { Button { id: btnRevealText text: qsTr("Reveal") ... } Button { id: btnHideText text: qsTr("Hide") ... } } } } Connections { target: btnRevealText onPressed: testMask.reveal() } Connections { target: btnHideText onPressed: testMask.hide() } } And this SlidingMask.qml that's registered in the qml.qrc: import QtQuick 2.0 Rectangle { ... function hide() { ... } function reveal() { ... } } When I run the app and try to press the buttons, I get the following errors: TypeError: Property 'hide' of object SlidingMask_QMLTYPE_7(0x19991132c50) is not a function TypeError: Property 'reveal' of object SlidingMask_QMLTYPE_7(0x19991132c50) is not a function However, if I try changing the Connections to alter a property of the SlidingMask instead of calling a function, it works fine. I've also tested this component previously and didn't run into any problems then, although I wasn't using Connections in that test. I've searched here and on Google for an answer, but nothing I've found seems relevant to my situation. How would I fix this?
Here is a simple example which works properly: //main.qml ApplicationWindow { id: window width: 640 height: 480 visible: true Column{ ItemWithFunction{ id: sc width: 100 height: 100 } Button{ id: btn1 text: 'Test Connection' } } Connections{ target: btn1 onPressed: sc.testFunction(); } } //ItemWithFunction.qml Rectangle{ color: 'red' function testFunction(){ console.log("SOMETHING HAPPENED") } } It seems that you are not putting your functions in SlidingMask root but in one of its child components.
how to regenerate an UI stochastically in QML using a Button on the interface?
I am working on the following QML framework for music apps user-interface prototyping: https://github.com/tiagmoraismorgado/TMM_QML_UI_UX_FRAMEWORK_WIP in the file instiationTest, i need to add a type Button1_1 and then use it to regenerate the whole gui based on combostochasticselector. i know i have to instantiate the randomPicking() function, from the instantiationtest file, on top of the mouseArea Pressed statement of Button1_1, but i am not being able to do so. if anyone could provide me any insight i would be pretty thankful here is the code of the main file (...) Window { id: root width: Screen.width height: Screen.height visible: true visibility: "FullScreen" title: qsTr("instantiationTest") color: "black" CombosStochasticSelector {} } on the combostochasticselector, you can see the following: Item { property var model: model1 anchors.fill: parent id: randomMIDIkeyboardSelector; property var random: 0; function randomSelection(min, max) {(...)} function createMidiKeyboard(itemToBeInstantiated) { var component = Qt.createComponent(itemToBeInstantiated) if (component.status === Component.Ready) { var midiKeyboard = component.createObject(randomMIDIkeyboardSelector, {model: model}); } else if (component.status === Component.Error) { } } function randomPicking() { random = parseInt(randomSelection(1, 13)); if(random == 1) {createMidiKeyboard("./../_Combos/Combo1.qml");} (...) return random; } Component.onCompleted: { randomPicking(); } } on the Button1_1 you can see the following: import QtQuick 2.6 QMLOpenGLToggleButtonPrimitive {} It instantiates a press released kind of button made out of Rectangle QML Primitives kind regards Tiago
changing property of element from other qml file
I know that there is tons of topic similar like this, I try to implement answer from them and I still have no results. I take some sample project from qt creator to play with this. I play with changing visibility of qml files ( treat every file as other screen). After lunching 3rd screen I want to make the second one invisible. Here Is the code where I want change property in it: MyLuncherList.qml import QtQuick 2.0 Rectangle { Item { id:ei visible:false clip: true property url itemUrl onItemUrlChanged: { visible = (itemUrl== '' ? false : true); } anchors.fill: parent anchors.bottomMargin: 40 Rectangle { id:bg anchors.fill: parent color: "white" } MouseArea { anchors.fill: parent enabled: ei.visible //takes mouse events } Loader { focus:true source: ei.itemUrl anchors.fill: parent } } } and here is the code where I want to make a action View2.qml import QtQuick 2.0 Rectangle { width: 100 height: 62 Text { text: "second screen" } MyLuncherList { id:luncherList } Rectangle { x: 50 y: 30 width: 120 height: 60 color: "red" MouseArea { anchors.fill: parent id: mouseAreaWhichHides onClicked: { luncherList.ei.itemUrl = ''; } } } } and I got the error: qrc:///View2.qml:29: TypeError: Type error which point on this line luncherList.ei.itemUrl = ''; Type error says that I make some mismatch with Type, but I’m not even sure, if I do this access process in properly way, so I’m asking how to change property of ei.itemUrl from View2.qml in working way.
The ei element won't be available directly in other QML file. You can use an alias to do it. property alias callUrl: ei.itemUrl and call it from other QML file luncherList.callUrl='file:///home/user/file.jpg'
How to use the setMetadata(key,value) method in QtMultimidia CameraCapture QML Type?
I'm interested in setting GPS location metadata to captured images in QML. I noticed the setMetadata(key,value) method in several qml capture elements but I can't understand how it works, or find any examples. The definition in the documentation states: "Sets a particular metadata key to value for the subsequent image captures." http://qt-project.org/doc/qt-5/qml-qtmultimedia-cameracapture.html Does the method work? if so, please place a simple example. If not, is there any other way to set (or edit) image metadata (even if use of C++ is necessary) in Qt? Update (but not solved): I've tried the following code, the app runs on desktop takes the picture and saves it. After I open it up with Preview (MAC) and check the metadata... and nothing special there (no comment key). Camera { id: camera captureMode: Camera.CaptureStillImage Component.onCompleted: { imageCapture.setMetadata("Comment","My Picture") } imageCapture { resolution: "640x480" onImageCaptured: { console.log("Image Captured Callback : Preview : "+preview) } onImageSaved: { console.log("Image Saved Callback : Save Path : "+path) } onImageMetadataAvailable: { console.log("Image Metadata Callback : "+key+" = "+value) } } }
I think you should use a subset of the keys documented here before you start the capture. edit FWIW, here is a minimal test on Ubuntu, Qt 5.3 - I created an empty application, added a menu command, the camera and viewer import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Window 2.0 import QtMultimedia 5.0 ApplicationWindow { title: qsTr("Hello World") width: 640 height: 480 menuBar: MenuBar { Menu { title: qsTr("File") MenuItem { text: qsTr("Exit") onTriggered: Qt.quit(); } MenuItem { text: qsTr("Capture") onTriggered: { camA.imageCapture.setMetadata("Description", "my comment") camA.imageCapture.captureToLocation("/home/carlo/Pictures/x.jpg") } } } } Camera { id : camA } VideoOutput { source: camA } } and the result seems ok...