From a1e9e6b70bda12d3a5e80733812bcfe9ec4aa97c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 30 Nov 2020 16:48:47 +0200 Subject: [PATCH 01/31] QmlPuppet: Fix preview tooltip image creation for material components There is an unknown issue causing the first premade material from QtQuick3D.Materials library encountered in the scene to fail to load properly as a component. In scene creation this is worked around by falling back on primitive creation, but the same issue prevents loading the component for preview image generation purposes. Luckily, materials can be shared freely between views, so we don't need to actually load the component in this case. We can use the existing material instance just like with non-component materials. As a side effect, this change also fixes the issue where premade custom material previews didn't reflect the changes in material properties, like other materials do. Change-Id: I7f1d6863fe96734a610d725f2f71e252f03a4428 Fixes: QDS-3114 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../instances/qt5informationnodeinstanceserver.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index b59ff161cdf..6879ddacdfe 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -700,7 +700,13 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode3DImageView() renderImage = m_modelNodePreviewImageCache[m_modelNodePreviewImageCommand.componentPath()]; } else { QObject *instanceObj = nullptr; - if (!m_modelNodePreviewImageCommand.componentPath().isEmpty()) { + bool createdFromComponent = false; + ServerNodeInstance instance = instanceForId(m_modelNodePreviewImageCommand.instanceId()); + if (!m_modelNodePreviewImageCommand.componentPath().isEmpty() + && instance.isSubclassOf("QQuick3DNode")) { + // Create a new instance for Node components, as using Nodes in multiple + // import scenes simultaneously isn't supported. And even if it was, we still + // wouldn't want the children of the Node to appear in the preview. QQmlComponent component(engine()); component.loadUrl(QUrl::fromLocalFile(m_modelNodePreviewImageCommand.componentPath())); instanceObj = qobject_cast(component.create()); @@ -708,8 +714,8 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode3DImageView() qWarning() << "Could not create preview component: " << component.errors(); return; } + createdFromComponent = true; } else { - ServerNodeInstance instance = instanceForId(m_modelNodePreviewImageCommand.instanceId()); instanceObj = instance.internalObject(); } QSize renderSize = m_modelNodePreviewImageCommand.size(); @@ -758,7 +764,7 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode3DImageView() ready = QQmlProperty::read(m_modelNode3DImageViewData.rootItem, "ready").value(); } QMetaObject::invokeMethod(m_modelNode3DImageViewData.rootItem, "destroyView"); - if (!m_modelNodePreviewImageCommand.componentPath().isEmpty()) { + if (createdFromComponent) { // If component changes, puppet will need a reset anyway, so we can cache the image m_modelNodePreviewImageCache.insert(m_modelNodePreviewImageCommand.componentPath(), renderImage); delete instanceObj; From 8cbbdacf3e5c3d4b856f01d2ccc0e5010fb9a7c0 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 25 Nov 2020 10:34:18 +0100 Subject: [PATCH 02/31] Doc: Update info about custom components - Describe "Edit Master Component" button in custom component properties. - Organize the different ways of creating custom components under one heading. Fixes: QDS-3164 Change-Id: I4b7c1f42e32c6d615ad5b2d9da26f15e69b2cb69 Reviewed-by: Brook Cronin Reviewed-by: Thomas Hartmann --- .../images/qmldesigner-breadcrumbs.png | Bin 33009 -> 11331 bytes ...mldesigner-custom-component-properties.png | Bin 0 -> 40434 bytes .../src/qtquick/qtquick-components.qdoc | 39 ++++++++++++++---- .../src/qtdesignstudio-components.qdocinc | 11 +++-- 4 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 doc/qtcreator/images/qmldesigner-custom-component-properties.png diff --git a/doc/qtcreator/images/qmldesigner-breadcrumbs.png b/doc/qtcreator/images/qmldesigner-breadcrumbs.png index a3dc471086718b03ea5a45eed4f70b3b9e87f3fb..57c02771445d9935ac124dc19a52056ede776b5d 100644 GIT binary patch literal 11331 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 L)z4*}Q$iB}W(TtH literal 33009 zcmeAS@N?(olHy`uVBq!ia0y~yVEDwqz$nha#K6EH@ujbffq{Xuz$3Dlfr0M`2s2LA z=96Y%U|=ut^mS#w!y>>fz_!@+z8+Y}HKN3^v?L?Hh+*ZrGad{K3_K;S5hX6E#mPmP z1tppJc?`mwipmTO3|t^_=lp`oqRjM+5{5PWXRH_)82G@VMX8A(r3xjPxv31M-}yNi z7#KJ~GQs(2CFO}lsSL3N|3S*RL4q!s#mPB|nYpP&4BHQE>1SYI-~b7SCl=*p=A|r4N+O$1 z>{UAyDsqrpBkrqKAR}|4=kC*KX1+I0UKZZ<`)|RWP1~!}${Z5Do!@=F{pZ(^@bJ)Z z`_fleRtAS2@io6&a<}w)>)}KdMn?fb=Zbmat)FfD1E<939alVbpDFTU!~ z^T|X0VBw;v#z~1v$NG&gXXux*O?17nB~w_IuYL9E)qm^iXKzfNBBAIK7!nmF_3!qD z3kplWW;Q;y*c-S0`s>GkKDFrPt5A8 zvwW6y6y8!?dt0Sy_Jm14c;dM3Cq+(sRypsn#UvHYu1RiPn~%hBw^^=oe*Uy89c>*=mfPOs=)`tKUMtx>YpM?1ENb=EJx zeDls7nYA)%lQ|_ih1*#aePz~e+O(S{1dc)aE7k{9nPGf){T+EiyGRdGWPsZP@SA`ujPK zH*qNTx=o%vTbt*h1>dEImG_<&N%FA$&_1(f;lhVU#p7En7A<0FKDhmU-R|t`>sD-i z!^m;};PcP1<#$V^&2k)cr?7soslT1O{q4QI){iWv=Ja+tc2W ztqn`g`)Kq2Yt?e!*3_c^(IVjg>UUh};f8l7ZGyjFPQRVy)0{7#@iXzUq5GFZb8dRO zcI!+&`5;!K>(DiudCxParPkWX7jPU8TN(2D`ugjyzp}Ej?k;~HrXeD*?)vMiS*C{# z>h{M^(LVp#ZhrsspAHHSKL3g=u*Y7wz+1~cf9=l?{7?Y*APjH z6uTsHNvhjl(Ou9UvfQhEcYVIku1|@RBhz23{G0sx zT9tk6uJ_ui8&9U}`thiH;}34OX6y2IQ}*TO<>eI>6-7oy*46!68N9q9T;}-29qYx- z;%EA#nMj3dg$4ypx|qRoca}oO?EHO}nwpuHm-)u64-es6)50OjoGH`m_WAR9`{~oC zJ3lxo9=|3;>tk$S%1R+7#e)e3GJKnLPJga(0|B;oCQD~N3Yu$C=(PNDrpc`2<9)H! zZ?{^Pz47q&4%V8wFyO`Q{QaqsVQQ02O-$z4RBqb1(NI&f^ZC#C`oC9GjCkd2cKBL9 zzS;W4b&;!cVTPB*%1f6nIX1J&+EiRfF!=KB?(YW&n}c}gCErnP=L;!4`Lr@>@zdI~ ziq~Fm-N3ll$T@w(E?buy@wt-omOb}3QEd6ME^Gg@U53Fc9A3&rey{m`@P4e(Bo&Lk z+@&iNMEosVS<80cHSzua_O>`%X7u*FsdbSp0i~s-X=!QK*Tu^69dBS{-j;u#uZ&M> z>z6l|mOS*dDN*KNI+k^zd+RFhzQ>hv6>J}qd8!oLEBqg>=5lYhkQF$u)Y!7S>CT;) z2PP@KQAc)u5Y*7pSabI5+0xQd7RM`BuUgLaTN@_L)mr!KIJS1yME5s=YdsPs;GQ7Znv%R$3k} zRGYkV*DfhnX(KLUhNz0Y_fG5WUbAVFkm8li>E~m2mvt`cTw_Rd^iwIDih}iV zdmrRyWxe9J|D&*`c45M_TWb}S+Y&jNPMkZ}#;MTJEWJ=8c+P^j_4#>u+it&&-CeeJ z#R?C9e|L_bHFkUB=1-dRsAy+PzRL8|zG{|A8nm`!bZOn)~fj|eX{h*+%4Ou@CO+@ zFT1=WyKM2f!}b5ZEN`@UE|j)^BzZg0!AuK7_A8!H>pzGR}Yv2m~4 zWBK|&7gvX`zjWzRR~OfX=nNHw)FV;Ko}XT=UcYYr`uz{vq_^eVY*H$n=;Y0@Z1IU_ z2R`p{T6kl7{{4x{?k$V1y#C53Zzm(Jut?PgL|_UU(I5Tz5M($XZk;3rj=f8>(3vsXqLafx4PUy zM$Pk5+UA3MHf`DE(fe~%qO$(0nRDvq|JG3&$FxaXstE${`LKR{o`Kqyt}(Z6+^(6mGPs3v>! zLC?u*p7PtH)~a}NWuD#cBh>lkn$7vkCbl&{K79F7!f|B#q)C$ky49Lhyf~aZ7GHc( zvTM&Co4s-QMl*wgf(||0;IvS}rsBgi-Dn@R;H<1wK`Y+RgVjIj!-= zS-^>zov$S*w(zJZhoX$7y}kVM%WI>z=iS}K`QNSPX)%kAZ;Sp9^U~Ls58a&A_jC5l zd95#JWO#9$-W0Za>av%M-TOD`?9RKpE92F~0Dd-(|4wN|J7Y}NDmQgpyRk@#$3&`k z>C&Ya?KU4w=vWcWeNxu>a5ldHU*Ne1k%1m_nl_(h`QP`fc-PErGox&#&EG#o;N=(T zh)s=L3AP=E*;m!p2G*>Xnt1Kd?i(F)hOC*(L|kv?m`y*;>in|oov;vBtCp6Q2$!o# zlsD^hNssKziX67%=N9??l=W9ybm-4ny%+lPCv==Y9+|Xq&vWHSr$-0lz2a1&+;vjk z6!f|kKRGe6{9dK|^2@G|OMWX>X^5;^waUxWv$Or0l8Q^z@dYk_W**D0>Nl2M6u-aj z!K(k?73VA$>8m)`V{##7@y>!dVUHFDXb5l|$xwXTevL!1)k$&sY5(mWok8nvg!C!+kMm)YjDZ%=!K*mmx%vY-)%1& zJn_KnM@~)#5>rm5sCfRW*~dNgCW~W(dh#OfOMM^I*IM@d?!GoR+ zyRI;btIOZ5*4cDFWp=<4z8yCzQr>rZc+MAQVPf1F;}qYA?NreghkyN|BEG^x7 z?NoJ1wL`*2rPt*m-M9Z2d>JP*A$xb}d8=K2A4uBOxg|)r=}kYKVzmCcbfM~|Gj~#7 z@Ln%Je?=+(FMsvx-C_alywnL{Qm#v znf1J~EzxOVfX0#8M%GVLB?VW92sW~aSJ5t(GtO7E> zwmS8=KhZCbTM(cj!qs~EsnAKYnQEy|HoT6pzIOKa;;5N(=T5A7dDL62Sn;=8)QbY3T&qilcVsvWLb-Y;0SWXaF-Gk?|Z*sq-K1-YFZxUNmdhcXX_3|~RSFM)b zk~aC__f^GfFP2}3ViB@dobh@0$(;I{y)R$CFMqf8yJCvY3m3V6=by*t|9O>hPuD!= z`stFQ>wW9@|Eqd_&}ja@Nzr*8Ki{riyMI2z}>Q~TP_&O5IbCH;8Vd9xtEss4Aw^w?ErIO|_p_xz#k?e5jFTyy8y9AAIOFYl&!Cp%jRaD0r>IM8A-FI711@1BH8ONES;i9!D_8b|wo+7q+d^yOET^Tjrb(@%Q{ zT~v|eGjd!Ka;jq9^PdL6bw30W-%OjI{lK%dZ2O-S%cF%XzT8pSGdNiy&0c(Gx17dX zY*X*&*?V90V(9HY2j!MS4-FgzdZ!+5p3bwkJSgA2IAZ^{*uPvTW6!z^}^3R<2;lBHyf@^ur zU$lLkyepgM*{w;Fb)}Bazc04XrH-XZA!AmWgxibwci-pysH{IfJ8y1<;NyuWncDk) z2#T-JS^K)=_EvromX{k|@4ugG?|8?y>XdVs`lflGSY~-`e|M=*u2}lkx8m>7>sS7I zzN=YuIorLWqqUXH!DntU|6Xl)w_+Zf9f=hp8=`Eunmye&?r~e~pz&to zRqH0J#eLs**eWhDp2ZVYI^BDn_s4(xUiWi#-(7xfwX>bR{^b*zD$_sn&HnwTp1n!I zM2h!#;fDUE4`Q0(s}6CvM(Zxm3~is)OQ@9d{G$ z9u#cwlvF$S)$;sWhMqWk~EMP=vmy_ghIH+_0griYxSXv}BJ z>eQ`KZ@>R`G@CnH=3oE9jT$SCIJhaYaZ{(7&%Q@`%)v{9MdBYYwk4i{gHQJUu#{! zxTyJ>><)&)vNDdB4(#XbE9QOw{kONbSH<(twgoqAE-0?G{!lM^Fk!>Wm7K@geSLkM zxJ%i=Vg)^7bEb6nUtub_u!~t-!7Af!Be#I;mUjnOJNTl?A21;sf6?(ZUrfV`1*PnI z4zyCfps2XmS1owartcLtyUX97J8|O1&f?`!YwZdjwH$uiE?o-R8r7Sx zs;Vk$Q!yb?V)ogvu&`x8E5E(F%e}qF?eY8l|K)htbj7?YD|b3AJh0tI?J`J+t990_ zSz20JE!!teo?QR;YxuNOX=!O~ZS7Q}oBL{iKbUqi=idH$`{RXQzkUr34K?xQ&VPG* zd;jyFyLRn*^(w1t(YN>a`L_oJ2iO06D&C}!l??)%O&t}ludEC{6rGuwS^e$JLXB0+ zmMvSit`FS*7R_6_eEIu(duKnkSbTAYz$cbw$NuBamrWc69u`EbzkXQle%bE1J6^3? zy{qKqqzOr_hZEZ%5%{BO{{( z;k?BccT{|Q#3`&+^8TK!2-nG{Mcqe(A|fjO|NUP6?vCWVPgQ%n#dNEFJZwMw(7^Yy z&goru-_`&7JU{t(-`Ufrxm%r#W}eB~TKD5&d->hc@U%3wocvT1DRI3Ri`rjbu3QP3 z=_AJ1KG*NLbpD=?HLZqy}hUF&9y3Bbugh}PmJF6 zE>UeY-&s>;&647457nCLqgMU-toi)PXEU!{38^^svgF)s^Za*rc3REl`;?WJSNC*k z_`K?OI~^1R_}WvAB7=i3|9-#!{|V)OiC#AgjYCh1_Wpji`@G%nHBJjBoJ?VHToJPB z=jZ485gQIOz#pRbHBO-p> zDL$WRB6VW*!i9-PyF`uC&$Udx@T6#Gj9&fArPHVBM!N~H%{BxRqeBJlE<=}z{I9O7QNa^=AU0mYQ9QRca~zI-^$|F}d) z?DRC<=w&`Lo1EX2{eC{b-md!Fn>SJDpr9ayCF|C`yX4V@rPIokBmitgi*?g39HxdlWIRR z&-V8*>3kWRiVX%SFD@($k1ZAD)6~(Cv8gEd|LHfOEEsBTRcz6H#bh_}w z9LwT1etA8e^LKU@w}TmzRK3^jez&VzZNVr{p32X8 z`~Q~dhzmGe*hFG|Q35E9F@D^z`(8Nn^JeznfUO z-|hMAcjuX6%9|S-@9r))m+FnM+M=xz6csFTb$kB(Lx&CtD!Xw!eZ($bQ*c^$`-54f zJ7fO;y1w77SE@Dg>YY1#Dn34{e!o||{^+x3&$i#I%6@dD^M|(8+;jDy+<&a+;Qcc% zOV&kgeRaLkL6)RqxRG)w3vBv7FyHZY0T0XDJOCl&D!Xo>c z&L3SVDXC}Y=Kg-Qdi^5{US8hfXJQ7{dyW24Z>wHde>)}X1DRl&YC)vRej0B317aH+_-z;ZQ1(h?RhUQEKJ)xGf|>t z!r_OYBHO)RZtlE!e7_nlzl_;g^z?4|{kan-9^9mJywGfR?%7$Ui`{y?e0^K@$nYJ% zwKe;AkEC+S&t0XjkM+rFUr`EM6JeNoN^5{tCf$)}q+Sdi=hZ%VxLiI(}MzzfH~!gN5%5tG~Tjy?$TR zit0VT-|fC0Q{3zEeaEv|*)4njzqz^Dy+=avitV#AGmAf;HIJ`)xm4$L+u?@=7B=PY z?i_4p|NiEtu?QDy^FarNfRK=qpHHWkzr1wx`RAWCcI&V2PB}S=k(sUJ)s>TvKkkUp zn|^w0!ojB1>-X(iu;9Ssj}?34=ASpuzqjZ0`u+Q&x92rFCJpads zhfa5sUtU^zxSe18m7J@qD~KV*|LpvH`?5C?iE*EwpO-h!n-lQ5;@!^Y3+`?+SGgo4 z#MQbc?DeOorvtm+6<+o=PvjLU>3?{*-TCY!m6=nfeED`ezhBy%uio{7?XiCO{-=BI z=GDJmyZzn1-+2-ui^Y5&_gTL?u%2^M@tGNh3d=RSF1;+t-}CX9Gr#SXwbAA|&J7dv zVs|l|Tod;CcK&|b#6v6wI}2pkFO__GadGC%nJb>2IiJ7(Z`p?j2Y2q=sWp{LM^RN( zwQ6tN;)^X#iqld#n=0P#{q9iIEPL!>frzN6?@S}sZ(CG7g--ps;LPtR)1=^FU-@LB zyMtBJ-bYiz<0?NM72l|npOX`_A>rVgo0~VX5gU_^PEd6AQJZ`= z?Q+&u70)Q0Y3%Yf8|wf6^IAG-kw%Na`Onj1%OveGxPo3^UoYR{(9GF>xLZuuiKEp? zu`TgWUA?dGS=;Y-lFeqXUbRZ2>r>TUY4bc8!z7l7cOH{Utme+I`}J~$Ve*+Y;}_~; z-Kn3SopqYKd*#ZPd%xeCZB@Ez!evm?Y;nKctVxrCqNBT6cC}BqobXWaQ|aq#YyEA% ziu5U8we_28wKePNs`Po4ZHW?_Z`MqEQD8Rl#7l|3$4rd}zFv?2e@r@`N7Be;h2ox{ z&t{w7t5|%ZXv*x_+FQau*sQ<)y48yLcp+PJ;)4T?33A62ow^xYI@~OO{`~p(_jmSW z*3+9726(K${{7uuYXJ@ep2G$`*I%1T@HDgWUV2$_^5n^vFJGo@-Wk0;@8{2-2QnwA zIIij9^A~Pw$T_Aob6Munpp{p%c9*=IG=2K=pp{>$Y-d=f8b#*yM?GeMtp&)_`@+ew zu)t!@q)AM+oPImQ*T*^CRhHpPPfzDA<)4;XTvP;Vjx;#RIvE)ox9(zZdGL|#O4j{- zwXI>(3oPc$pRa$#E$!SK%gRqr-re0jecH5j(cAe}e|;|bw%lsj#*G`@`{kVO9)4N! z?{)ltDZ`|e6GbkQRJO4npKRpuTH=6+qNkC$xwwTaU%T@{fq$+Xfg($d5zC}SRTl)Gk9DAlPH!^sMD zv1#+>#dp`PUOn5o{N3&R{cA736mUA;CmX#X!SQ&BkG24dRjF4vevSXo2}VN`*?Kz-qP1=w{ulr+RT?= z{De=7{mjGWWv2`0#H|n4nwqs$N}~9kmk@u(EI)sLe_!9PReR<7m#`>#xo1{Cq4-;qkRw z&!#bZd-TiMCNNYTThDMPV*T~+FE1~z{{GIyw>kFC^UsDn%EzY3PUp?o65SkTd$|3q@0;y_;_Kv+@Uh7mJ4TQ8sD$^ z?3CN)c>Y;)>Zv75R2E;?qp z_hP5sOKke{;^JZzPcab@1D?kP7PHodt-tH{`m2hk*3?sGk=0SFY&<7P^}4MM%Ql(y z>eZ`b$K1ek2(4`HKSDJ`7M<#03^=psZf-_K#HN&!r}g)*30nE5ZvXxF{TIE2J6QaW zXKcNdc(^Um&zOh#^DZa;O~!1`v@>KEFoTEk^NePiNS)1$y#J{4+Ujuq46}y?5eoxm zWJHxcXn1zc+IeAshRCY5YfYtk6QXUk8EQ}Fm`U@rojT>U`|i81RhE6s&750qY@RCa zv|{1Hhnvsa%{EHy@><#?urz4q3R9Mi6Fs6n+svOhQSr-DP{k})@u0C=f8USy%X?}a zBd77QHS-*o&sBZ+yq!${yl7$U$^twtc+g=?&pLX%zATm_4Jb|TH4y& zY|U9)rH+`%MIAAg>g)LR>(`=1i*9aC*PiMnvnl1|B-d`SwQ+lYy%+f{qd0MzK$F6O zMnwS*o!DJpp3TnxH+zoQEbD|td~eEm4omQ~ty!bf>QuPvzUi!szETHYf35rf_xsnc zU-$q0CT*hCq>^gVEAXjmue$%dJ>PC+_sd$VnS>qj`&r`6QGfZ;rK)dlRtBxSlV?8T zzk}v4Yq3eMUcJ%`UdCa$x9;z+mBGt*#jI0y@0;V;^jwNFPPX{Zk3w)(a_^OD&Aq{~ zP|`SUj$_k-%z~u}633o@-g)<3g29Ygvt~`2#B|T&qFm44y-T+ou4GK;vNkpj)|)Qf zdo00#}b znVnBYZ|`~0(}YVW?CJAWQ%WWMm{ zNs;B5?6P-vEbZ<0SATyOyQ_q8dia@q1(PX?W;>Uj?N>RuW{u9y7{0f?ptVs60-fhF zro_a@|Nr@XzW-b+(cfm7TW?9!1#-GHE&bZeZ&z_tH2i_UhYFj!TMK7g&^gV<#JK|xavNA8PQ<4_bIn`5th^@DpmO6X(?DF^b{@yLWfA#ux>$!gY$C=kVT;3A5o;|oQ zI9QnHZjGJ%nVu6FQWw88FfxC8d)xi;meWs-BzPi%i+0~-=a>8QxZi$?*V2Ot9-f{% zpG@+0>yw!|eY*ObP)3iFcb8c?PEyGcWHf&Jz_v-CiC61F<~Qcn)>crw$Gz?om}Q*a z=e6{Z_NCkWLON@|zq!eLeL=O)Y_qppo}F*q#U8QDR?c5T{b#n$bYPy3YM$m@IAA-ijlMpuxA$jq5D71mmpzq_+G+WgY% zrJ1u-Pu|YoAG`SClqpl5JbfCeBbL!vAtfJHd2r2>hlktke?FOfZ*MiftksuE-g+lb zp1hc0@?e2dko2O$D5*RXsb06_+}yQy^RB-vx#1+V->m4>m6c1qr|U&*V35A+Ki4WW zB;?DV&*#O(#Eu0YelE#5ua7acIdR6KMT?^I_kQiM^ zdYPyFu&Jr(?d|#hUoM~TU7hpx|KUsZ&LK z56}Mg=H}*w3mX$9)`oG{c6VGeNM#OQc)U+mTTk!YsZ&xW83H<|SlaW~)OYWYj?Ovk zk{lOz@8o24Sw8l8L9A)VlP|4Xy?VA)sn)ZS*x0+`@iiY`Ebebg6Ro$MZ>~~dbu4S^ zC!7CgjL-Xk64bkoHukl@zJQjwecSBB#n$XN|NQgszpKBzm^f)tQPkyjrK>VxjrBjD zPQSf9fBnjpj83aVv}W9$a5Ciw(~X``)=4T?vrG>gJS>P<8FI-)R)xbwfJ1TCvQRD2 z)0^0u6$Lmrxckp)&banqiwIY%l(aNxZ0fSVeQepyRM7b6_Po0rq_whMMn5uNeL7{+ zn>TM}&62v{wxG+wGdoyu=a);~t(xLuVs`(2Jhrs7-2d-ac5ZHNyO2`b*|gcF+1EhB z7*DqxO=6rsLBij&l;0p(R7B)KEXyqxeZ#A*P77zvngtp-{e0g3dxgz|)9bHhHJ)Nv zXe}5Jx#C~j;l!>*3QSHMf-G_~8}Bsv9z=l6&2mEOYrqI!=7IfrKO<7 znH66yx;I{4kzDHIa$t$4pWnHa!OI`$zwvE!Zc*T1`lc&z%l1GgkK&X`lO|1{-kw`& zbKcu_w(BJh>)sZpg|A+{0*%g|pJ$u5U3zn*N48If;1Z_U&ns=Dlv&D5CaEmURp4A} z_&|Tny`wqDyd^ScZHv%Z9lrkF-skz+IhmrRskt#~ZPi}6 zvf2arE`cIfHh)PzJI}WI-k!?H$ViKnr>CaMUW(%BTExaD!(p1Y`KH~E2hF?R?OGkY z+)uFft>+|`hnjs+}dw#uIEnoLT z(QHOoNQh3%j)HS@Ed6ahy0mY}V>S5TJI6vW?D(CE$GwLnZ*?3fVX5bze%duK#Lv$! zC*S|#7p@-e!w(B`bKkb{N^i@%E5*Tb;LXwyt&P`>Hv60aR?mmMwlLujeK|z}`E-vz&ZN}Q{7@Do3s(QEJFmLUzFM%2& zB_bU}OfxPlc=9AAQ89CtUBQC`i(I?6 z<=lK!w!2kMO>lKzzHO|RfJ<3fSz4M}h0DRd;24qR6Sddx5qiH%kgxsu+1cM8H1mUM zO#u!InZEtUn~IxQykGzS^W0vnJN40#&IrF|v!eU8-#s5Ee`TJtd~Y0RnW)Kb&HGhF z5_X~`$L0E;Kc8Q(r=ydTm&casyfjENN@4nGP-IrG(2Lu%W8p$al~t}vGR%rkK2|jB zh~RW&^5%GRXTjAhr}CEk#ega_kk) zU(XX>-pb;C{K=CiJd#E%pdrzkPbbx#+xd>}o|XKdpLZGm_S?B8QpwgE9_Mq$bHAUv zA@}ySt=ZSDWcbdcU9dgyb)EvpiKge3Tcdib|7UCw`xL!2s8Htl*Q%vn90Au73=$rB zS?WGA*En*)G*E;!OmN@Pa86|bj+{F?CO-dJ{eG{xt}buLTZ`~>r=Na$^X5(R@xGrm zb`@Nw1TGo`g@%6pcwBz}heO;EPbZ&DskocB+o@@JvIrOJHQR*ZUBBP$=6~PU-YDv8 zaSwN6o|pBDYta(i3u>Q$>gRoE2#>6&s} z$yZ#jV&3)$ovOWYJCga%e|F(s9;!9<_+vw<-XPB2sOY{{@!#LyZ@>Lk#Z%6zgk$TB znXVjc&9lw(zy1CztnPQ_+&Q*>*Tg16oq1}LIeqF3R039C4Y;i|QJ#nG`T6E~qL z2n+GBsr%29;cC70Fzx{7yuO3-C$qNJeYxn)Z}Xuc#4ov2pve!S+ChX z=$Q8P_4W1f`{zBjNaZ$I+gi2u{(Jk14+|z7S=60jByE=Py=rg$MJdHiM-Ln~;5pO4 zl^)cxDYBxG<=VT)$NLX!C9g`YRMOlymz}9`{r-Qu7A{PDc4p>-Zs}xuEydHEO(#yD zF1DKMw|ugSXRjOcYcsxDk~fB`s>`mvoCaQ2wk#r<;$JV=N+E2Zq1rMPbT}vRXk)}e!23^jg7|X2P~bN z!jDgxKE2&(p=-Ao=XqPsR;L?6N+$6K+DsP)XxQ4y`j@ye|7$Tga%W@m@m-~_YwYGb zF(oX#lAzAp!#mT5jhm^VhU0JQcDAV9F?v(IL=C5B+;rt>cj#J_Vl=bh7Ka{a1@YGG z>rrd3B^YqL>G4Pvy!f@M*3FHLgYRYY^!Pf4psf8JvxmpT67wzfQ(?MNqZPygz^bSh$)N+#0vCP{_pZiwiGP5!_9te-GJz99@$;ruy z9==DuNF3zVH#Zl*v&mMDzs@x9$)-)4%ex z!=T)JxQ(~Du(Ke8wQhOTS~EF+k2T%wOpT8oJ-WI&yn1ikn_G>4r!5J7H04N+xU^F@ zixbB*gKb)!4{kmF$il?#nqx=jiKOAIl{rvnu;DasK zUtfJ$;*?rRUxLBCVcK@C1Z)aKZLZBu`abfE`xg|%^)OmV>6Ar&_h!j}Cu&}0E zs7c_F#k!R%Jx`r8d%E$9lZeOVEglJ{LG$pRJ|35sx2-anbw(^ys-;<7*y7hC$Mnd^ zn_pgD4qp?|7_K*M+BCoUcC{ZL9qqie+15K3wp5$MJMcSm#9qhrC>1YPrO6lW}B_%nUk%X4$ByO*iA@Nl&s zzEK)B#qWsDt(Jf;?)1kWv!_j)wl04Ey@v%IF8Y&rBnuU%dZiW>8NE=faJ!qem8-PB ztE8DnvpHt=f4^KlZ}(g0naN=T9^utDIH{fx&fCT{2vR9dRgRkF*~Kw{0>wXMoc z|3tc)Qdu|@w?^H)aifFZ@X*T6O#-n;_-8Hq7|`#D%3{t5c06brv;mUM<-+(>(v)mdwi7mH1Z7Rq{j5;XSl_zRbvHw|MMUzC zX{z=I6ABKu@!D2@dvkTQ_!+w(!@rv=LF*N*=AKL2EXZ>3v&{^hhbz0fy7=vWB%GUL zY2w>l?>(E_PN<2+|F}YnTfbZ{Xil-atLxp4$9;eP)SL;Ne?HwrYH?}Vp?M-{CnVc` zKJK^w_V%`V>BPhPmVM-~PgD$yZs&K@4-5}yKc`aPs@x*LRHmk?${8MgbcI-A+@kvu z452Px_L=xbuf4W5dV817&5frgOr6T=ZL&e`P+?4N?%VMATGP^3AvqCSZol22A71U; zv^+Uu*0J=vzyAJPKEJN&(h|?VzrG%pX+5f6q5MkXz@e2ZS7tsw)@yKEJ;_Wg#Bhbo zV<)aeMvkV2&pZa19oJ@8-*{WLG)OZfJ=ypT&yU`jx^q~bR@QxgcX$8)f7Wu=$Igkf zY`d6oWSSjlh4KAQPfs83m+uch{-b6eXdbfG@3_j11MRv$zkdD7Ev8fP>*ex9@z@$Z zHalYmSNW$8ejH4=@U*D*@7L?0p`l8ht@dV`hMdB=H?J4CwYYp2_}l9+OYH8f=amIT zT|c-i{&wW@Ojm!j{z{S3oJ;IGV%F*J`*A2~uGt^Ow1?;bzXVsB_JN!@JV8Vr$C4RF^IA6<| znwtLqdA@#`-`p${soOCZrUC`c$p95-R9?&>#tka{wn$4&(VHZ z@UPrbDULV0x7Yvwck5Qv9oE++yVU2`6n%PfviwdVd!1R*_ul-@MV&^yGprjFIGPVK zcyas@jdXf&=1#}?u1o!G9X8Y2o$|w`SSD6S+iy(O}A9^`0#25ue8~Y zn04v%D%sA*9^4lZyxfm9s@az-k8?lcGp@4B+$>CAzkanYd*i^7D7Z94>-YEf??3;1 z@WO9KWRJ(|43~W29U%p~dJiUK9KAB_(kB~vzV=+RXfH3X*60fi76k|1mOZ}Jp!Mqh{{3OAMYk2a zJbj2&W_@#P=<3z0L5plsPl@PcXmn-G-`vAFuTRlas9$Pt+B!{rzyEt8at%h#Xgv*E6kzv=a> zSNHyUwHmbg$Ip+C=U>7!?;X~qE}ZO9TkpTOFL=;!HA}Se#bgyu&(^~aJ6^SKFu16p zmpWs`eTIfDVXLo3Y*~Db&2IbcT%(ywewEC=B(?Qj!~~bUVt-jTu{Ar+d+ynIoZB_f zZvOl2_v?zS=04~bu#WG0eCg7qKXvt3 zO_{uFzW)B(+S;0YtmoyGmBJY!3^x{<+RP(`DhknZjqPbWI9icGAQzj;glPrv=YjJ!OysO_2j z6Hh;t>OJ(sm zih1Q$a}T|oAu&O$t$)kO#t>b>m+FGKxB1#1|M>Vg;br%X#T%{`%A}jke)uFOgH3OG z_R~{Sh1GmcoH&uOeRZ->&I4~hKhVThLa1iQqm{wSr|Co*mA#3Wq|&-NL8*>G;BDRh z|3^B7zkdCCF~)Q0-I6&%QM0Of8qC*hNLS}zigprkidq}CV}_R5Y*)oYN}W5pSt1u) zo6~pgMERQ=jDA;dd<~h>ZSeZZlP3uV9J_Z;n>rP=R`2t(v&{W^5wgO&rNBY)=g;T! z$;bOdqnto1+#dIuFI%?k(9D^ambaKZs- zP#|*eXzljvucu1&+)gQWsdH}*$>G*!yzZZyn;RP|JHhnW6&?q*$ty!vB^X3RM()hL zz0Gs7+QY_W2NN>p?<#G&Zgj8i_glBc8+YxR^}KTW>95D6^Y4^ikImZp>&nXD*j*(n z*RL1nQe5b*Zq^VWa`ncIh`>O_Uv-DNElxADC`GNQXgM&aUFBE96m}NJ3=^r9cU*OI zn6C#Ymb;4Qb`@M~HOLk@$|teWZ%NtcGC6487zy0=GueABO z`S$k4#=?89zAgLht-sgh@|J@M9h=+EOAG0&Eq{B9b@Aa@vu1%7ipkr{mC16jHJkVz zzV@`Cz(OaRw?LM!{cvb#=!WC2JYSjTE@Nv-(z>Q0B$&93bzAk*Xl=y;Ugv1dY-O&@ z%)~`^yH*q|ezD8ca}v+t17g?h=JPK*-s+RxDJYsO>xO}}$&5sW~Jv;?>nm;Zw*t8}4Se^3HrAw6>MFcl; z3pHP3st7Pb~(X`0Ifm6>zqtO?L~us-DVQwzWK*N+RF6#RKt?XhxGhsiX7u-3~j zTX;1$3UjBZgl_emv_#|8yWQ`P$*oFFO?`cRef_(g&kxM0+Lda}@3BF3$(l81-j?nE z^=kF^yXEoQ^X~o-i>>_q?QO~zTkenS4QD^~$yh4=%~`HJb*cDrP)T>?3JaT^U6As^ z%v%o&w#?+4^o8e8kyr3DRX3rRTc_OY?d|pT^}TUM{C3;j<^J=xY%vjdZZ`Yv+U@tM z-fTP$D)sF%H@BU)7usW`Ccv>KYHQY~Cnp24WsaMgndRNt@$ud6_kDkL?kBOWT)ld8 zgidaj!lmQ>-^KntahZ~9?lH+^_SppfgZU@62Xuk<|F~Q>T$DX0&}5f4xA4Zl4~iDO zSnM|Y?6n&=IOh4}`ZXM`G+!9-;>1K{X|o&+9i5hod*ar=|L~x@2ed8N+FCl})%V}~ ze?02`_xJbmWy_9A=kiPoF-G-j-AO>7@Eb|Bk~CHFR}* zHyb<`=DcS(b=gZf+o}WQMLT2O@A-UgMd0F!dF{>{lWaP46~k7Wig0!AlkC$>HT&Qu z(dX>)CHJ$_3?>zh>WPk4cJuom{7leb+0&>hXf?Mlf9-y^9FDv7)uTWVs$ z^R`Q`e<`%DRb+!e;@w@Po72zxd3!TAFF2Z1`E+Wy)w1Lx3p7@Rua7H;jgS9-(Ote* z-u_;KL4b(p;k$zMu>np}Qc_L}1tg0@y?aVp>TjPhlzNzOQ(nSq!N!j^^*=r&stIId zWHd;Aois^EXKk&W{Pm(kZZ6lnBxN?*Y>W@!SefT5&~i6VJdaIC`QT)A|GeAV-hMnT zfBj{Nz|Rj44}&^`-1>Vi7|JTMo!$g$t7hF)2Q3zTuv(5^`D2m9?z?=qXM3-d=@(M+ zGHWa85$lM$vzxOiU}cES`NMu}%xpXpPNrneoN2K2%I@;_4hjrq*;Bn#V@^s>ylmK| zqFeUoy~dl%vu4fu@NC7#`Hw8}4z+NyI5uSHYir-$ka+maOk-a);kdZF>n8lzoIJW19Q& z%P+tEtYLXrV)d{IE77hShbShmqyX_u(-tQ8+W>$cDPsGEG}#wqF3o80^5{=TpO z|NGnR{KNmmigxaKe5Tki;pxv46O}h_-t4?kz=`8r>h7=Cq9;$9bZd#}i)#-HEZk%! z8gzRkiDYhRkynYbvFf;1W-HSd)nanIFl+0r_uprqeKt|q{n^u}fg-J-ovm6^xq6N) zm@Tw6{HBNMx)2-p)y^01n*G#$q^F~BXpt4$+NVX8p`lkBnc3xPzg+xg$*SzqRGPi~ za;JY=nbq9W({y(~offS$?~xXZT;@TQNE@N3Dn->JlF9-c4e#e&&H7ql^Y~aVbGF{? zrX@?3*wy};arW7>XK4=$CF|uEed><0j7qt3=s|!+OTOo0j)Mkgrs+n5n#+?WF)8x$ z^7h;P($Hvp%gY((#_+F~W8tq~zf7~Q^+=oRo%8F>pJ{Xa`C+D=sYa1?b#?3G_I}V3 zec2pj=CatE$1d@>`Ml=`9a$BZglPT#@^bQ&DI$5i;3ZcFJUNyqA2!JSWLoCw(zvKx zByO_G%-OTKA32K%?~XaX?(L*WlX7owv;A_xc|(z$V#$jO3qf7wzu)h_x5zWml4y(E zTlLk~{O*)_^UirMYf5HFQH(kK{N=5!uZ8_>KFX;ve3ZIO+Ce+86Qrt*&bd zu9QSYNqJ6M!yC>l))`eRXleg$BVeR|DC73KGB4YFDgmS3Q;4uXOskIWNn0pFVXe$!4ksXd>|a_iU3{pat6h{`}->J(Rb-dEWPj z?egbl8oNtKPP=pE}JLOCimt=cIVtBDck2GmmedGu@Bl z+F>DG_rAj#0$t*Tf4H(QIUM`_w{8QQmo)#rW6z#+JhF^hEwGQ{NoYU-!@gzA?0kQ| z-Og`y4bl)fdGh4Sl`GXIbDC+i%w=(n=j!vw&B|JoDfR2Bq;Z-kXG0WMyS-%fFvzHv9XV zo6V6&-6aLxmTWE1>1eE!F_dY3yn~sY@5{Tp(QCuHKpb$@>qK0bEz^mYyF@joo~lSo5p;T3uw&o8eM^=+nOFVpVClRmQ$hj)ECQ4pWV$!mnC(IGflYiDpO;w3Y*^!VL-6ogGfPF6BR_L(f<*p3 zTJz9iPp`DOn7H`vyYCzn7@}9m+Sk>bo~FAnz++*+1YK$Uk4<^%WqpgfJ9xyLLZVtG zoPVC3mp9Fh`}v&37Hr0T%Zs0%o4fsPnY7)6-78nVyqP|K?Yeb&pOfd-t3*V-zqy%x z-Rjk=!`DWcrk)ZJ+1piUVYcrPZ%j*kcfa$4t(i-oML*dX@=-vv^LeF#QPaIOAzE|& zK$A7|CQX_&ZJOKVEoakKuUOH*%h>wfZ>vnF^v0G&`wtZ)Zd7)f<#A+5!08!|J52Nz zeOR|<&7Ixl@8_1^phj9AI;>q`|q(K@9z3|dyw0;wX}9UpI3b* z?eogu!Ep8o3g1dY#xijl$-n+D?Ad%9KN5w&NZc5={VgEiH=AW$Q zyD36vo{GXAcEh!ao1;{IRvhY! zzH$0^o5`$@`yDG<4ix!Rv?y@wjNyA8BGK!%_~MG|uT7qu6a*S#H=Ie^eExZJ)bF3q=ck{Uq1dbcO2ZS>e|1|dxca)Gz+wptClhD)99xz+ z7YX)%P2Y5MHf&HaoFb5Da#6b@PW>47wn%B4^XaLnj>*EDIhs2;n+hysR6M6mo%;6f z?(%DEA`R|c&Dxsl$2nhlgU;*kzprMQ&dEFvS~lF!%Nm%p)bz@G+wXUnZ!bC&^DcdU z?X{i7&nvz?WHIiznRCp}StBT4PW`d#bq%4+C4vFnUsxL%`LrI~XS#lkqYXM!YPtn)~$W)7-k1 z#f;l;=Nd?C+Ppb9IGC5MIcja$&X^w=^H?rNt-kv0#YN_SQERWUa*Nsg`EWQgGBQ{1 z4~uHcvdkZ5LAH)v67f-2et$OPRk*b0!|MsUvweznqkXwc3v0Ml%6U{(+$xuBU$i%H zi`0SZ3WAR!ZO?t)b2jbw%jNTr^~q+N&3?G_)vH%R6=gk_U+QRRFsK_}ImG^E!K4Sg zq6z*AO$w`4t-4qL|F8P|8lfp&H`)Ueyg7U?Tg}y*C8YFs!lIG_pNH{Rt|e$kS#+s9 z@Yi14;koeI+~yBXvy2>WaV$+$<8WFU)aYt-OsU=>H}~y4+v<0FzsKG9I7^{pv3viz zxV=`5>BkFX)Nhq-nJPDs|MVsFoh9PgXcq?OMZ{_~eFcNKnwElPQOOs~z9gzCow@YH0Yw zx%W<=KK=ju{{OzSOit#QC9|I?Ydtbw_VR@bAFc%ZpPgw8S|WNNr2qKl%Fk*0wz4=) zVy)b8!)0yQ_ZJtHXFU?^*HYpYSt(hgqUs_QdF!HkFhfgYjLK4{62aLEoEC@$%I;>f z=sSJlgon3xv$0Q7etqlqwkER+H*V}Gdwc8TWcAr+pRv5UwsGQvmov6zU$5GG541o` zQ_j|uTd-kkIrk!Q?G))n%{^P>c_2xFRlP67LimvLK z(d(XO5F=b0ex>RbtEXCIfQp$rPv+!PN-oMKlO{w|>DJ1`e{OP(F|1Ob_gs|A)yu0Z zMz38lIp?m_wkWpp>3@HJ_n%`SSiP`NhCOZmw>B2<*Q-`(&GZS2j6C_drna^=G4WwD zza0nr!8taSK`Q#K>Ngt&@4fzdDrJ*{LO?)3KuiqJu>_mTjsh&FH(h8il2MOcaBl0G zqV|5@Ef#Yh#Z(+@a(&1;$)iN^?qbcAN@864iwvb*7n-UUq=_7Bye@JsfMdO3h*oG- z)voi;o7d_+6wq9hD%y>YNdEoplZR)q34RMOBq`iK*DtL+nd$uYPxX`}=nJx{9Aq zr$4+Q+_i{L#$rR()m7i`*UQhJaAnWZaF3})obcx5J=t{W!bp9)#H1E zzy+Ux)18isKDop&Derv{y;^=zx5fR~3c-)&O0$*CI1?8ijbi^Ns;Q{JdL_&Bf>gB4 zBGIkewr%sCuJ@qVBQV6(_2{Lg-uJ6s>u!z8-F{nmhn1RJu6hKgqG!?FU8Vi@|19Rz zxd^z_*8aV=Hu`v@+D&cp!<9u0=Ra5I%zp54#-&S_Zs+fpJ-1qgqbYGl>FaB~ z5{633%FT;3+7Bz=)_-iR!f)U8c? zq!HBJ6_K#8qK|i`&$P*tnHNQ=P2Os`|Hhp=JWbAe)2C0L4mzUX@^b&CJ`Z4Q6lbNOY9=x)3D z{uPf_a3r*cX^2Sms;R3#|8!da{-)G!kM9C+cQh#7Ox^i|M?r9{{POI3V)sNZn!7bS zuASK{z2w59gImp-JKiWN?B8AbdfNQ?>#t^oYKdO3YGXT87*kki*c12a)hoNdUoM;9 zuMwUv5FHj~R`|$eTI%m_Z>1mCo);{!iq#NVwPJ-rRE)B*vGGP%i-Z5J?Jj@c_IlN- zRp;$~zu9{_Ak4KiA>v?=eCjHz@R^4}8 zCm!|0#~k3jlkOJCevH*EB*iVJKqk6no9AZJ>e*_!mrQasS$CQ1W^OjQ{rB(3Is5KU zpS{#^;+NC!>;9eCSy}Xc_Uzfu?Y@7uyR9wMX=G${fT6#?pPz?EMP1QhJu6dVgihSP zno2)EzS?)2B{r?(;^Nw%B5Kz3=w-|rUthgWZkuOI+K>Fr3Oeya^vUbg>9N}q4l+&j zaEarxn;#z)HEaHSeG#sc4m`|1xT^QwyLd5hVZe<`mp&a8j|Z)+a#|?x?c(dNzrVi+ z#iiuE1Kn&M-seu7nBbuj85ucq=FA#9`S~@onx9{fEthpV@%*!_MZtq_xAW)Q)mjPU z6%>B>`6qa}pK4`5(pk3dpqQANw_C5fb!ytrKVSc#k^SG7<@UKZHZb10kYJnOv*E(e z&9`?*FL{^bv+R{7YpR5^tFXUtcX#*ueZSwi%h!T-mWgw)M7&RAQxf1XVD6l2KKXgg zvon(W@9PV2Ec2bcE%9*MnKM2+9t3>+dP2G1W${Iod#g;8&OV&+>({S&^WkDvL z$ndc|59A3wAU)a2VT0iU;olCEJ_`iNRWoh0nw!z=xJ+3{0SimPA6x&MN(U*8KUiXKCr_-A9u;Ruv>&b9-F0^8&Bv9vPud z6?^-5t*M9RCK%1+lehbGN_)M--1ggVue~hU@c$_LlsOMec@k6eELNNRUc30BMgjkX zAAkRW=7I0-Ds^>rO-@cWV0{1X-M&X%+Cr8a4qoQ@spz!Oz}~+8>Z;J*-rl_Jvlp#! zQ220CeZGi@h{H))ANhwW1O=fRoT-DR;#q+N5Yjr`v zhspkSjf=`(B%FQzIecA==0uMJAFRP1w%TTzzB} zxAWIzQ|qw($)R&nq3%%@7(fxm2bCR-;jLjWy!l+TeGvww7rXuhr~R%dGluFj}H%hXPX_YnO5Ra zyz|avb$_*o1r?7p1UOuj0>i?tU0Uj$xK!1u@wM{0IUh~tU+FViR?>NI*$)3Vd{3?) zz0{+!;QZIFCr_V(j!%qO9^9!@R$AIPnbGFX*RNmO`DCm9e!afYFMI1Pe)~V5SeP>_ z`}mT}QSOTaci-(3`1G^p{r>;|YQNuQmlg1gQxxE6aZ2>}@4x-lFXTzjTaEtX!d$IF zol6!hNI2RhdiU;KWo6|b`YJowy9~QD+|C#LviT==>BzCCawng6|A^u1G=9Ql4xbASH) zdEq|Krh0dG_q}oYu7PjgzGdf^tNCPpC7mXw=qPEm96RXs>ucd z^Upso+L>^+vWEY`{Uo#5+1c6K^Y8Qd`nf0x&U@#tx#VWl{i4&l<#$WP->JU*S`}aa z_iOI$ZJ;IL7c)dAg&a-V7^3yH!p3iT@vSYHop(HM6gVvov70Z?)mr!K^89&LrK@)D zw*I#N$SIa!x15CwCG{-0Hk@VSRQt$d+I#iojvSSfwhek zmpV+MU!Oa7uJZG-KGLZ*SqylmsoF$+feV zfmW)Xj{o=R!$VMszQO-ax~%+T7>o=DsY7 zQa?WBg>aJqXd+?%|9{2jZP|Hd&x$CKa~D{sw|MK;(vlLBiw##?7PEf%?x`~A&Ye4( zHf@^!|Ic%QLpJ&bQ`E#R7EiXn`15&7!rD|GZ!d{1Y1`?x$4mPQEaqgd+nM(C)YO|d zZ&obpNI%eNVlCBcW?~W`!rH^?u4F0GcQonetJUj0=9blt7%NAUgTDrG~ zAt-Hc-23eHd%xXC?l-iG4t7zS?4mT$Lxq`{*>8FA(JoQXGm1_e6_&o2H+*{DC91tA z?)^k%cctgkjxAWC=`OOdEIB6ISE%IGorIK_tBEg4?&$mGt@Yg88#<>ibA83rsp0pE zPU||XTo{?HWx2xE*7oh&w?QkX9DnS1NOGBcYilcL|H8GG*RF*v4XXTpw|x8d?d7GV z5BshMvuE-hZ#n!>Slw^WheO=?`~RBl%To87Q}OYr`2Fhlwr8A`CU&?eP4rs&`0?Yi z-L=oo%=id^2L(v z!9`p9{C>DST4m~c*?YR)-?#bo+7mrKefqR%^X89R^mj)6uCZHvRjSvmxVSiT7MoJv z;@3}#;?}NR`~Tnf{fXCR%%5*>df4z~NOspE8@cn1%iC=XQrh1BqW^O>Y-9}+1H%4*>R?i*vyDi6BkxW@UV0EwupW# zwh5c0!}MP=1Jr;HW&a z<04b@mKi>3Q@vQNdeuI;-PoFZ&e25b?c29^_g0(tZSLvqeS2^3?~ljj)s^)ZED&&H z2{JS>xpM8=wv3C5o?QL&!y)Hh-p;3DeC@?wUIdyf4Dy`z_Xytvk+r5>*Og{jUH5c4 z{$aw4ow9oE$wR+vJo9FA;id`;b-qEnz>BrB@8@V!l#z zu=t0Fc0uN>ZxuFIuU?hmV}E4oaQnm)yBn8ZmehSZscv2N=0M7^mnC_(xABJknD=G> zz7sRFvX3)-zp=Ae{V+pv=|dlpne9#s*R0XG@Fw%}GF5$F_E?s5`2zk~%kuYpbZd0@ za5X&MFw2I~#CQ7CsZ*y<=jY-1^H~0W!v!hdBT|`3rzFDHPM&crV(zlXhSf#M&(6$z z`t+%!q$E3^Oo7$h8KnuE=gyoN85RcGr|)FP^TI@Lzi*x0!hjVkSDt+RRZLvGS$;yv zt3+P2nLb%tf1OmHpW+c$^>XR<`*qeAA7r}BTKkpP{7!?KjpFU?`TeuMItu;`EWBeV zz`?`A^P*&zY4$Y(sY6D6t{jbLmvt`qerl@r(x8{=^J}kNzutb>@M7nT)AIj5uvcs| zGcl2|F6%MAD6VxaYVqgqEpw)C?Q>gf|NrOt@HG(!9~St{wR&2#vmj2+Ht;y8?WZ5T zO~=|=dI$THpyihsSQM{ZzWlhvYH5&WS^n{|SuPx+;^LESPenyXH};m4mR8!x?cw@$ z#c|f!tzoNk^YhvFvu|U`&CS){|L4=b+TS1M6-?cDu&q>dfm5*3#F*ldg8m$wm*AuIrAe&(6%O*u8Y=)64$$cQ+=py9Ndqf3=$O zZELcClYHHehwEZ@e<;n#%=~$M|G%x-*Y%40vy`lyFPkh=dJG1-y1JEX16@-X802So zx;TbZR`xu#Jy}2HpqoJAznwAf-fq7i7Z9K@{dA#n^{i!2iz@y7&)>Kq@#I&+W_LkZ z4fRxoCzcnU?{W;Vk(<;J9liD%XeVs*!OP42liwYD{BfFo{65HOM5(E%jluHg1tsq& zudD0t=~;0#>%pUnu9J^HE^?XW@Fvi0v7ptmL(6OI?2oo4>Kk2>>2u_`TYkUx@^b(7 z+!LHPHzvCm78+(g5m@LW;3(4Rvf}?q0dlA}@F&s##^{R=4Me*9LN3lTy5L>5`N1zX@yBtcm~s>-y*C z=h=_9M(Bujx;&VFY^G1)e(}TazrX(a>)yS4ixw%(NNQR<>-ghVr-d$7cW>QV6}I~Q z&gXJA|36mPEccr`t7&h;WtqN4wtW|V?cTikGsw{&kBV<>VQD`cxuZbw&(?OD4>&+UBfdd8nOBO@bMhp*Su*1r6*gw#4oSLvVM`F9Af(+l}aAgs$OcSZqS7*(iFVENR?(VMH)fBcrMlW1J;7IKI zn@JmMKA$zO|Nr~G=gHsi_n&V|p0PlK>v-(#+qd`s`}KNl^ma9S7P<8g-cR;WS-^NP zW6S#W=MzB7vQ^?Eq}1;>KIg75%i(5eGR?krW`?2j`s=gLKHHpr{@B?9C(dO(FYdJ4 z`Ci`t&UC)7GjcSYFw~n$&+2L*J*2NHbxuT+sjW|s^YA! z@p3bhq6iNgFPn34aBv+6*a=9)u(=7|;}`N;8l*NER3jc10`F?yo_~K|=4G{O2g~^u zU0iYbr3*)IZ?CLHLBiu>y*s9Jm02HYQnI!JSk%>P*Vy*1ymjjqQ=`L_4A-V} z$D@>6#K0SFPR%q}>PLm6gfK$-cg4mHTZj-M)P~DqAh#t;8AI4S$Yw3jhB0w)$bK_#?U2(us>S zB0A;%Rr9r9zI{77GID3y*;$JgEqe0buz>T!n?o`puhbOPjm^!!v)lhTxOV$Jt?8#{ z&zjZN)|Rlc`N=h@x!D`~Wv!nTSQr@_$LfjibA8D&Pe3Gjt)iV#`MWz;SBIaUYd!t& z!-iZjuGWHi8(v&nlFHbzW3s7~Z*8sZ4m*WUPRmSGJ*5;^n@dSa+5LFXe0O)bGUx=c zn-467Cwe@2aIiW3{5;j2?$OcFuCA^{W=->_3P>L>URhvq=kn#n0UFoVL{6SN_v{RH z!vl(5J0GlPJuW~0Jo{e3PM7^Z&*tatc*wTLVG*B-bSH>dl)Y z`$be|=r5WPne66vtcjI7?fksjqoUzw=30y2&tGui!k#HPre>L0a&sJZoB{YUHOdap1!`i9}nB5&GY75 zIn4iG!$&~zHS-lK89shKzEdfiuC5L@u2C*zZ{&R=aWFH~X`#S1IkE1e#_8u|Bqd+I zeQR6zs3mOm+t;t1UH&S0t+~c?#7Mv;BD-smijZey4yd@{keHLIa5xiL~qYKI!|Ezb!#J|Lsd@a994ue z^YV_hZkLsn{r&yD{}Ee>1s#vHUmR@sKf9-==ia@0pz3GY?7Ug#`S+G|&pz3z$;r!;laTmOwbyR``S;(Cr?F1j<#aE$ zLb`a~pFe+Cxy7bTo92|Qz2W$R3p0fk!~bW+{#{`*m*Oj?$5{L!Is}1DW82P5z}}7+BG)QUn}MNX6iX{WM#eR zWT;RPl9Z4L&=8U9Pk(u7>B^X@n#l>#952Nd)ErDO5a2kV-GBV_`SbeP+MlcT*4EZK zJ3Gg%zyALF?z`_UUJTrSpTGK$F5?oW+p!TZ)vT?p?d{_g1U!~rdU<)d|7(%NArRk?bwXVLq zySx0&4a1iY#pN^kj(_>~O{wMFJloR`d~`6Wn2$T4H`@yCttS$T9nJPXix^7-en
}TD-Syn9Ay} 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 xj$Mk4ekPhm=T%%TD \uicontrol {New File or Project} > @@ -224,7 +232,12 @@ \li Edit its properties in \uicontrol Properties. - The available properties depend on the QML type. + \image qmldesigner-custom-component-properties.png + + The available properties depend on the QML type. You can + \l{Specifying Dynamic Properties}{add properties for + components} in the \uicontrol Properties tab of the + \uicontrol {Connection View}. \endlist @@ -246,7 +259,7 @@ \include qtdesignstudio-components.qdocinc creating studio components \endif - \section1 Moving Components into Separate Files + \section2 Moving Components into Separate Files An alternative way of creating reusable components is to move them into separate QML files. Right-click a component in the \uicontrol Navigator @@ -267,14 +280,24 @@ \section1 Moving Within Components - Components can consist of several other components. To view the component - hierarchy as a bread crumb path when you edit a component in - \uicontrol {Form Editor}, select \uicontrol {Go into Component} or press - \key F2. Click the component names in the path to navigate to them. You - can easily navigate back to the top level when you are done editing the + The QML files that specify components can contain instances of other + components specified in separate QML files. You can open the QML file + that specifies a component in different ways from different views: + + \list + \li In \uicontrol {Form Editor} or \uicontrol Navigator, + right-click an instance of a component and then select + \uicontrol {Go into Component} in the context-menu or + press \key F2. + \li In \uicontrol Properties, select \uicontrol {Edit Master Component}. + \endlist + + The component hierarchy is displayed as a bread crumb path, where you can + click the component names to open the respective files. This enables you + to easily navigate back to the top level when you are done editing the component. - \image qmldesigner-breadcrumbs.png "Go into Component command" + \image qmldesigner-breadcrumbs.png "Component hierarchy" \section1 Merging Files with Templates diff --git a/doc/qtdesignstudio/src/qtdesignstudio-components.qdocinc b/doc/qtdesignstudio/src/qtdesignstudio-components.qdocinc index 1cf4f4df8fa..789d0defb42 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-components.qdocinc +++ b/doc/qtdesignstudio/src/qtdesignstudio-components.qdocinc @@ -25,9 +25,9 @@ //! [creating studio components] - \section1 Creating Custom Controls + \section2 Creating Custom Controls - You can use the project wizard to create a starting point for a custom + You can use project wizard templates to create a starting point for a custom \l [QtQuickControls2] {Button}, \l [QtQuickControls2] {Pane}, \l [QtQuickControls2] {StackLayout}{Stacked Layout}, \l [QtQuickControls2] {SwipeView}{Swipe View}, or @@ -43,8 +43,13 @@ with a capital letter. \li Edit component properties in the \uicontrol Properties view. - The available properties depend on the QML type. + The available properties depend on the QML type. You can + \l{Specifying Dynamic Properties}{add properties for components} in + the \uicontrol Properties tab of the \uicontrol {Connection View}. \endlist + For an example of using the \uicontrol Button template to create a button, + see \l{Creating a Push Button} in the \l{Log In UI - Part 1} tutorial. + //! [creating studio components] */ From 21f16c8d3d60bcfff2fe5e6ef52954107679ee46 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 18 Nov 2020 17:52:08 +0100 Subject: [PATCH 03/31] Doc: Add text properties Fixes: QDS-2849 Change-Id: Id1fc33208bb5bfea10947b2c699ce2c9fb14250f Reviewed-by: Johanna Vanhatapio Reviewed-by: Thomas Hartmann --- .../images/icons/textarea-icon16.png | Bin 0 -> 133 bytes .../images/icons/textfield-icon16.png | Bin 0 -> 147 bytes ...qtquick-designer-text-input-properties.png | Bin 0 -> 20257 bytes .../qtquick-designer-text-properties.png | Bin 0 -> 49594 bytes doc/qtcreator/src/qtcreator-toc.qdoc | 1 + .../src/qtquick/library/qtquick-shapes.qdoc | 2 +- .../src/qtquick/library/qtquick-text.qdoc | 303 ++++++++++++++++++ .../src/qtquick/qtquick-components.qdoc | 27 +- .../src/qtquick/qtquick-positioning.qdoc | 4 - .../src/qtdesignstudio-toc.qdoc | 1 + 10 files changed, 307 insertions(+), 31 deletions(-) create mode 100644 doc/qtcreator/images/icons/textarea-icon16.png create mode 100644 doc/qtcreator/images/icons/textfield-icon16.png create mode 100644 doc/qtcreator/images/qtquick-designer-text-input-properties.png create mode 100644 doc/qtcreator/images/qtquick-designer-text-properties.png create mode 100644 doc/qtcreator/src/qtquick/library/qtquick-text.qdoc diff --git a/doc/qtcreator/images/icons/textarea-icon16.png b/doc/qtcreator/images/icons/textarea-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..4afc1fbab56a1466a0bab865a88d16c252da0a0d GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdu#id_r6q7#LO{fn!=iQ49N7@};wdIT;uj6g^!WLpZJ{7c?@l>F}hhDg-FTy0B*THF4{;ZEoNy^JZMT XSe_|6TK6Rb0|SGntDnm{r-UW|dgdcK literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/icons/textfield-icon16.png b/doc/qtcreator/images/icons/textfield-icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a62a6582b38f7eeefa997a6110515444ef2ebb GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdu#id_r6q7#LO{fn!=iQ49N7@};wdIT;uj^gUf1LpY+76BL+sI50ME?(W_^Y0@OF=E<8U2?sQ_9z5yF nI`^Rti*RA1!Gl|!3=9Hqxh6O09l686z`)??>gTe~DWM4fV)`vK literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtquick-designer-text-input-properties.png b/doc/qtcreator/images/qtquick-designer-text-input-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..ab88caacef5d805c881c8e3cdc7a211b05abaa76 GIT binary patch literal 20257 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 L)z4*}Q$iB}>0F-Z literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtquick-designer-text-properties.png b/doc/qtcreator/images/qtquick-designer-text-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..7d348aa266c65a733d3843497b4dafb5a1c2e65f GIT binary patch literal 49594 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index 5dd5e5c76ff..6e813743efa 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -98,6 +98,7 @@ \list \li \l{Editing 2D Content} \li \l{Shapes} + \li \l{Text} \li \l{Images} \li \l{User Interaction Methods} \li \l{Lists and Other Data Models} diff --git a/doc/qtcreator/src/qtquick/library/qtquick-shapes.qdoc b/doc/qtcreator/src/qtquick/library/qtquick-shapes.qdoc index 1bf9458a03a..bce7dce955d 100644 --- a/doc/qtcreator/src/qtquick/library/qtquick-shapes.qdoc +++ b/doc/qtcreator/src/qtquick/library/qtquick-shapes.qdoc @@ -26,7 +26,7 @@ /*! \page quick-shapes.html \previouspage qtquick-form-editor.html - \nextpage quick-buttons.html + \nextpage quick-text.html \title Shapes diff --git a/doc/qtcreator/src/qtquick/library/qtquick-text.qdoc b/doc/qtcreator/src/qtquick/library/qtquick-text.qdoc new file mode 100644 index 00000000000..4c7ca9492e3 --- /dev/null +++ b/doc/qtcreator/src/qtquick/library/qtquick-text.qdoc @@ -0,0 +1,303 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Creator documentation. +** +** 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 Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** +****************************************************************************/ + +/*! + \page quick-text.html + \previouspage quick-shapes.html + \nextpage quick-images.html + + \title Text + + You can use several different text types to add read-only or editable text + to a UI, such as titles or labels and text input fields with placeholder + text. The \l Text type adds formatted text, the \l TextEdit type adds a + multiline line edit, and the \l TextInput type adds a single editable line + field. + + You can select the font to use and specify extensive properties for each + text string, such as size in points or pixels, style name, emphasis, + alignment, and spacing. + + For an example of editing the Text type, watch + \l{https://www.youtube.com/watch?v=yOUdg1o2KJM} + {Qt Design Studio QuickTip: Text Element}. + + To create a label with a background, use the \l Label type from the + Qt Quick Controls module. + + \section1 Typography + + For each string that you enter in the \uicontrol Text field, you can + select the font to use in the \uicontrol Font field and specify the + size, emphasis, aligment, and spacing of the text. Specify the font + size in either points or pixels in the \uicontrol Size field. + + \image qtquick-designer-text-properties.png "Text type properties" + + To display custom fonts in the list of available fonts in the + \uicontrol Font field, add them in the \uicontrol Assets tab + of \uicontrol Library. For more information, see \l {Assets}. + + You can use the buttons in the \uicontrol {Font style} group to emphasize + text by making it bold, italic, underlined, or strikethrough. + + Alternatively, select a font variant to use in the \uicontrol {Style name} + field, such as \uicontrol Regular or \uicontrol Bold. + + The value of the \uicontrol Word field in the \uicontrol Spacing group + changes the default spacing between individual words, whereas the value + of the \uicontrol Letter field changes the spacing between individual + letters in a word. A positive value increases the spacing by a + corresponding amount of pixels, while a negative value decreases it. + + The value of the \uicontrol {Line height} field sets the line height + for the text. In the \uicontrol {Line height mode} field, select + \uicontrol FixedHeight to set the line height in pixels or + \uicontrol ProportionalHeight (default) to set the spacing proportionally + to the line (as a multiplier). For example, set to 2 for double spacing. + + \section1 Text Alignment + + You can align text items horizontally and vertically. By default, text is + vertically aligned to the top. Horizontal alignment follows the natural + alignment of the text. By default, left-to-right text like English is + aligned to the left side of the text area, whereas right-to-left text + like Arabic is aligned to the right side of the text area. + + You can align text to the left, right, top, or bottom, and center it + horizontally or vertically. You can justify horizontal text. + + For a single line of text, the size of the text is the area of the text. + In this common case, all alignments are equivalent. To center a text in + its parent, use \l{Setting Anchors and Margins}{anchoring} or bind the + width of the text item to that of the parent. For more information, see + \l{Setting Bindings}. + + \section1 Text and Style Colors + + You can set the color of the text itself and a secondary color used by + text styles. + + The color that you pick in the \uicontrol {Style color} field is used as + the outline color for outlined text, and as the shadow color for raised + or sunken text. You set the font style in the \uicontrol Style field of + the \uicontrol Font section. + + For the \uicontrol {Text Edit} and \uicontrol {Text Input} types, you + can also set the color of selected text and the text highlight color + that is used behind selections in the \uicontrol {Selected text color} + and \uicontrol {Selection color} fields. + + For more information about selecting colors, see \l{Picking Colors}. You + can only set solid colors for text items. + + \section1 Advanced Text Properties + + The height and width of a text item are determined automatically depending + on the values of the properties you set, to accommodate the length of the + string that you specify in the \uicontrol Text field and the font size, for + example. + + The value of the \uicontrol {Font size mode} field specifies how the font + size of the displayed text is determined. Select \uicontrol FixedSize to + use the size specified in the \uicontrol Size field in pixels or points. + Select \uicontrol HorizontalFit or \uicontrol VerticalFit to use the largest + size up to the size specified that fits the width or height of the item. + Select \uicontrol Fit to use the largest size up to the size specified that + fits within the width and height of the item. The font size of fitted text + has a minimum bound specified by the \uicontrol {Minimum size} field and + maximum bound specified by the \uicontrol Size field. + + In the \uicontrol {Wrap mode} field, you can wrap the text to the text + item's width. The text will only wrap if you set an explicit width for + the text item. By default, text is not wrapped. Select \uicontrol WordWrap + to restrict wrapping to word boundaries only. Select \uicontrol WrapAnywhere + to enable wrapping at any point on a line, even if it occurs in the middle + of a word. Select \uicontrol Wrap to wrap at a word boundary, if possible, + or at the appropriate point on the line, even in the middle of a word. + + You can use the \uicontrol Elide property with the \uicontrol Wrap + option to fit a single line of plain text to a set width. Select + \uicontrol ElideRight, and set the \uicontrol {Maximum line count} + or the text item height (in the \uicontrol H field). If you set both, + the maximum line count will apply unless the lines do not fit in the + height allowed. + + If the text is a multi-length string, and you set the \uicontrol Elide + property value to something else than \uicontrol ElideNone, the first + string that fits will be used, otherwise the last will be elided. + + Multi-length strings are ordered from longest to shortest, separated by the + Unicode \e {String Terminator} character \c U009C. + + \section1 Advanced Font Properties + + In the \uicontrol {Font weight} field, you can select the font weight from + list predefined values that range between extra-light and extra-bold. + + In the \uicontrol {Font capitalization} field, select \uicontrol MixedCase + for normal text rendering where no capitalization changes are applied. You + can also set the text in all upper or lower case, or use small caps. The + \uicontrol Capitalize option renders the first character of each word as an + uppercase character. + + \section1 Developer Text Properties + + Text can be either in plain text or rich text format, depending on the + value you set in the \uicontrol Format field. If you select + \uicontrol AutoText and the the first line of text contains an HTML tag, + the text is treated as rich text. Rich text supports a subset of HTML 4 + described on the \l {Supported HTML Subset}. Note that plain text offers + better performance than rich text. + + In the \uicontrol {Render type} field, you can override the default + rendering type for a text item. Select \uicontrol NativeRendering if + you prefer text to look native on the target platform and do not + require advanced features such as \l {Managing 2D Transformations} + {transformation} of the text. Using rotation or scaling in combination + with native rendering leads to poor and sometimes pixelated results. + + \section1 Text Input + + You can use the \uicontrol {Text Edit} and \uicontrol {Text Input} types to + add text fields where users can enter text. + + The Text Input type displays a single line of editable plain text, whereas + the Text Edit type displays a block of editable, formatted text. Both types + are used to accept text input. + + \image qtquick-designer-text-input-properties.png "Text input field properties" + + In the \uicontrol {Mouse selection mode} field, you can specify whether + individual characters or whole words are selected when selecting text. + + In the \uicontrol {Input mask} field, you can create an input mask that + contains mask and meta characters and separators between them. When created + or cleared, the text edit or input is filled with a copy of the input mask + string, where the meta characters have been removed, and the mask characters + have been replaced with the blank character. For example, in an input field + for an IP address, you could use the following mask (with the underscore as + the blank character): \c {000.000.000.000;_}. For more information about + creating input masks, see the documentation for \l QLineEdit::inputMask. + + In the \uicontrol {Echo mode} field, select \uicontrol Password to display + platform-dependent password mask characters instead of the actual characters + that users enter. Select \uicontrol PasswordEchoOnEdit to display characters + as users enter them. The mask character is displayed in the + \uicontrol {Pass. char} field. + + In the \uicontrol {Maximum length} field, set the maximum number of + characters that users can enter. + + The value of the \uicontrol {Auto scroll} check box determines whether the + text edit or input should scroll when the text is longer than the width of + the input field. + + If the \uicontrol {Overwrite mode} check box is selected, existing text is + overwritten, character-for-character by new text. Otherwise, new text is + inserted at the cursor position, displacing existing text. By default, new + text does not overwrite existing text. + + To prevent users from changing the text, select the \uicontrol {Read only} + check box. + + The value of the \uicontrol {Set active focus on press} check box determines + whether the text edit or input should gain active focus on a mouse press. + + By default, the cursor becomes visible when the text edit or input gains + active focus, so that other properties can be bound to whether the cursor + is currently shown. Because the value of the \uicontrol {Cursor visible} + property gets set and unset automatically, any value you set yourself may + be overwritten. + + If the \uicontrol {Persistent selection} check box is selected, a text edit + or input keeps its selection when active focus moves to another item. + + To use a pointer device for selecting text, select the + \uicontrol {Select by mouse} check box. + + \section1 Padding + + The values of the properties in the \uicontrol Padding section specify the + padding around the content. The individual padding properties adopt the + value of the \uicontrol Padding field, unless you set them explicitly. + + \note If you explicitly set the width or height of a text edit or input, + ensure that it is large enough to accommodate the padding values. If the + text does not have enough vertical or horizontal space in which to be + rendered, it will appear clipped. + + \section1 Summary of Text Components + + The following table lists the QML types that you can use to add text to + UIs. The \e Location column contains the tab name where you can find the + type in \uicontrol Library. The \e MCU column indicates which types are + supported on MCUs. + + \table + \header + \li Icon + \li Name + \li Location + \li MCU + \li Purpose + \row + \li \inlineimage icons/label-icon16.png + \li \l [QtQuickControls]{Label} + \li Qt Quick - Controls 2 + \li + \li A text label with inherited styling and font. + \row + \li \inlineimage text-icon16.png + \li \l [QtQuick]{Text} + \li Qt Quick - Basic + \li \inlineimage ok + \li Formatted read-only text. + \row + \li \inlineimage icons/textarea-icon16.png + \li \l [QtQuickControls]{TextArea}{Text Area} + \li Qt Quick - Controls 2 + \li + \li Multiple lines of editable formatted text. + \row + \li \inlineimage text-edit-icon16.png + \li \l [QtQuick]{TextEdit}{Text Edit} + \li Qt Quick - Basic + \li + \li A single line of editable formatted text that can be validated. + \row + \li \inlineimage icons/textfield-icon16.png + \li \l [QtQuickControls]{TextField}{Text Field} + \li Qt Quick - Controls 2 + \li + \li A single line of editable plain text. + \row + \li \inlineimage text-input-icon16.png + \li \l [QtQuick]{TextInput}{Text Input} + \li Qt Quick - Basic + \li + \li A single line of editable plain text that can be validated. + \endtable +*/ diff --git a/doc/qtcreator/src/qtquick/qtquick-components.qdoc b/doc/qtcreator/src/qtquick/qtquick-components.qdoc index 8874c7c3d6e..e54e3ca020e 100644 --- a/doc/qtcreator/src/qtquick/qtquick-components.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-components.qdoc @@ -119,37 +119,12 @@ \list \li \l Shapes + \li \l Text \li \l Images \li \l {User Interaction Methods} \li \l {Lists and Other Data Models} \endlist - \section2 Basic QML Types - - You can use the following QML types to create components: - - \list - \li \l [QtQuick]{AnimatedImage}{Animated Image} provides a way to play - animations stored as images containing a series of frames, such - as those stored in GIF files. - \li \l [QtQuick]{BorderImage}{Border Image} uses an image as a border or - background. - \li \l [QtQuick]{Image} adds a bitmap to the scene. You can stretch and - tile images. - \li \l [QtQuick]{Item} is the most basic of all visual types in QML. Even - though it has no visual appearance, it defines all the properties - that are common across visual types, such as the x and y position, - width and height, anchoring, and key handling. - \li \l [QtQuick] {Rectangle} adds a rectangle that is painted with a solid - fill color and an optional border. You can use the radius property - to create rounded rectangles. - \li \l [QtQuick]{Text} adds formatted read-only text. - \li \l [QtQuick]{TextEdit}{Text Edit} adds a single line of editable - formatted text that can be validated. - \li \l [QtQuick]{TextInput}{Text Input} adds a single line of editable - plain text that can be validated. - \endlist - \include qtquick-animation-types.qdocinc qtquick animation types \if defined(qtdesignstudio) diff --git a/doc/qtcreator/src/qtquick/qtquick-positioning.qdoc b/doc/qtcreator/src/qtquick/qtquick-positioning.qdoc index 757d03d4e67..2c426214a86 100644 --- a/doc/qtcreator/src/qtquick/qtquick-positioning.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-positioning.qdoc @@ -446,10 +446,6 @@ \li \inlineimage icons/groupbox-icon16.png \li \l [QtQuickControls]{GroupBox}{Group Box} \li A titled visual frame around a group of controls. - \row - \li \inlineimage icons/label-icon16.png - \li \l [QtQuickControls]{Label} - \li A text label with inherited styling and font. \row \li \inlineimage icons/page-icon16.png \li \l [QtQuickControls]{Page} diff --git a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc index c883a14dc1e..450332556ba 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc +++ b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc @@ -82,6 +82,7 @@ \list \li \l{Editing 2D Content} \li \l{Shapes} + \li \l{Text} \li \l{Images} \li \l{User Interaction Methods} \li \l{Lists and Other Data Models} From 5c5c02330490ec8ab725c61e2031f0b2fa3d181c Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 30 Nov 2020 15:59:19 +0100 Subject: [PATCH 04/31] Update 4.14 changes file Change-Id: I3fae8dfeacc19ad027090bc112d888efbc780f19 Reviewed-by: Leena Miettinen --- dist/changes-4.14.0.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/dist/changes-4.14.0.md b/dist/changes-4.14.0.md index d37f2e23db8..bc71160425e 100644 --- a/dist/changes-4.14.0.md +++ b/dist/changes-4.14.0.md @@ -20,6 +20,7 @@ Help ---- * Made `litehtml` rendering backend the default +* Fixed that Qt 5 documentation was not available if Qt 6 is installed Editing ------- @@ -40,7 +41,7 @@ Editing * Added highlighting for structured bindings (QTCREATORBUG-24769) * Restricted completion for second argument of `connect` calls to signals (QTCREATORBUG-13558) * Fixed crash of backend with multiline `Q_PROPERTY` declarations (QTCREATORBUG-24746) -* Fixed duplicate items appearing in include completion (QTCREATORBUG-24515) +* Fixed issues with include completion (QTCREATORBUG-21490, QTCREATORBUG-24515) * Fixed missing namespace when generating getters and setters (QTCREATORBUG-14886) * Fixed missing `inline` when generating method definitions in header files (QTCREATORBUG-15052) @@ -73,6 +74,7 @@ Editing * Fixed issues with `Move Component into Separate File` (QTCREATORBUG-21091) * Fixed crash with malformed `property` (QTCREATORBUG-24587) +* Fixed `qmldir` parsing with Qt 6 (QTCREATORBUG-24772) ### GLSL @@ -88,6 +90,7 @@ Projects * Fixed issue when environment changes after appending or prepending path (QTCREATORBUG-24105) * Fixed `Embedding of the UI Class` option for widget applications (QTCREATORBUG-24422) * Fixed shell used for console applications (QTCREATORBUG-24659) +* Fixed issue with auto-scrolling compile output (QTCREATORBUG-24728) ### qmake @@ -102,6 +105,12 @@ Projects * Added option to unselect multiple configuration variables simultaneously (QTCREATORBUG-22659) +* Fixed missing run of CMake when saving `CMakeLists.txt` files in + subdirectories +* Fixed that changing build directory to existing build ran CMake with initial + arguments +* Fixed that configuration changes were lost when done before triggering a first + build (QTCREATORBUG-24936) ### Meson @@ -110,6 +119,7 @@ Projects Debugging --------- +* Updated various pretty printers for Qt 6 * Fixed disabling and enabling breakpoints (QTCREATORBUG-24669) * Fixed setting source mappings with variables (QTCREATORBUG-24816) @@ -120,6 +130,7 @@ Debugging ### CDB * Fixed debugging when `PYTHONPATH` is set (QTCREATORBUG-24859) +* Fixed pretty printer of containers with signed chars Analyzer -------- @@ -153,6 +164,10 @@ Test Integration Platforms --------- +### Linux + +* Fixed initial directory when opening Konsole (QTCREATORBUG-24947) + ### macOS * Fixed type display when debugging with newest LLDB @@ -164,6 +179,11 @@ Platforms * Added support for setting preferred screen orientation * Added missing Android variables to completion in `.pro` and `.pri` files * Fixed passing command line arguments to application (QTCREATORBUG-23712) +* Fixed fetching of logcat output when application crashes + +### iOS + +* Fixed persistence of signing settings (QTCREATORBUG-24586) ### MCU From 7048a89fa1769abcd836a9b606b53cb88747cac8 Mon Sep 17 00:00:00 2001 From: Michael Winkelmann Date: Mon, 30 Nov 2020 16:29:02 +0100 Subject: [PATCH 05/31] FormEditor: Return correct bounding rect for rendered QPicture The bounding rect is calculated by union of all child item boundings rect of all FormEditorItems. Change-Id: I908e9d08b581671436bc7334b3b7eb0a5cd25aa8 Reviewed-by: Marco Bubke --- .../qmldesigner/components/formeditor/formeditorwidget.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index e858ae56376..63c7e05d603 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -512,8 +512,13 @@ QPicture FormEditorWidget::renderToPicture() const QPainter painter{&picture}; const QTransform viewportTransform = m_graphicsView->viewportTransform(); - const QRectF boundingRect = rootItemRect(); + auto items = m_formEditorView->scene()->allFormEditorItems(); + QRectF boundingRect; + for (auto &item : items) + boundingRect |= item->childrenBoundingRect(); + + picture.setBoundingRect(boundingRect.toRect()); m_graphicsView->render(&painter, boundingRect, viewportTransform.mapRect(boundingRect.toRect())); return picture; From cb2a241e02d8ef8e878959c07490703c02d82007 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 30 Nov 2020 15:11:30 +0100 Subject: [PATCH 06/31] Utils: Filter adjacent carriage returns in OutputFormatter It shouldn't change the semantics, and it helps on some systems with strange line endings. Fixes: QTCREATORBUG-24556 Change-Id: I8158ddda458e5500bce6ce7b9ff4d5d981f88d7d Reviewed-by: Alessandro Portale --- src/libs/utils/synchronousprocess.cpp | 7 ++++++- src/plugins/coreplugin/outputwindow.cpp | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/synchronousprocess.cpp b/src/libs/utils/synchronousprocess.cpp index 16e911eb8a1..81a29d14d2a 100644 --- a/src/libs/utils/synchronousprocess.cpp +++ b/src/libs/utils/synchronousprocess.cpp @@ -39,6 +39,7 @@ #include +#include #include #include @@ -803,7 +804,11 @@ QString SynchronousProcess::locateBinary(const QString &path, const QString &bin QString SynchronousProcess::normalizeNewlines(const QString &text) { QString res = text; - res.replace(QLatin1String("\r\n"), QLatin1String("\n")); + const auto newEnd = std::unique(res.begin(), res.end(), [](const QChar &c1, const QChar &c2) { + return c1 == '\r' && c2 == '\r'; // QTCREATORBUG-24556 + }); + res.chop(std::distance(newEnd, res.end())); + res.replace("\r\n", "\n"); return res; } diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index 8766305885e..ae0cb36c003 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -627,7 +627,7 @@ private: void Internal::CorePlugin::testOutputFormatter() { const QString input = - "B to be handled by B\r\n" + "B to be handled by B\r\r\n" "not to be handled\n\n\n\n" "A to be handled by A\n" "continuation for A\r\n" From 4f45319e80371ec4284164ba2cf9b4f71993c579 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 27 Nov 2020 16:40:54 +0100 Subject: [PATCH 07/31] QmlDesigner: Fix warnings Change-Id: I818bd2d6a7512609ee7f7c1345ba314ab304850d Reviewed-by: Thomas Hartmann --- .../qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp | 4 ++++ .../qmldesigner/components/connectioneditor/bindingmodel.cpp | 1 + .../designercore/instances/baseconnectionmanager.cpp | 1 + 3 files changed, 6 insertions(+) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp index 620ed0352b3..f95f69cb84f 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp @@ -259,6 +259,8 @@ bool Qt5NodeInstanceServer::initRhi(RenderViewData &viewData) // redirect Qt Quick rendering into our texture viewData.window->setRenderTarget(QQuickRenderTarget::fromRhiRenderTarget(viewData.texTarget)); +#else + Q_UNUSED(viewData) #endif return true; } @@ -294,6 +296,8 @@ QImage Qt5NodeInstanceServer::grabRenderControl(RenderViewData &viewData) rd->cb->resourceUpdate(readbackBatch); viewData.renderControl->endFrame(); +#else + Q_UNUSED(viewData) #endif return renderImage; } diff --git a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp index 0470798aeca..f14acc16396 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp @@ -101,6 +101,7 @@ void BindingModel::bindingRemoved(const BindingProperty &bindingProperty) void BindingModel::selectionChanged(const QList &selectedNodes) { + Q_UNUSED(selectedNodes) m_handleDataChanged = false; resetModel(); m_handleDataChanged = true; diff --git a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp index 76d641fe30f..794c1a436c0 100644 --- a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp +++ b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp @@ -38,6 +38,7 @@ void BaseConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServe ProjectExplorer::Target *, AbstractView *view) { + Q_UNUSED(view) m_nodeInstanceServer = nodeInstanceServer; m_isActive = true; } From 68e20abfef5ab7814b95e44e060430a0f1cfdd62 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Mon, 30 Nov 2020 10:32:33 +0200 Subject: [PATCH 08/31] Android: partially revert 4035fc24331c0c7ffd28542dc2d2d73745a26033 The links for the new sdk tools were using a different folder structure in the zip archive which are different from the previous packages and from what QC expects. Fixes: QTCREATORBUG-25017 Change-Id: Id288d5cc59a3bad87ce2c795fba28b7ebfa027e5 Reviewed-by: Alessandro Portale --- share/qtcreator/android/sdk_definitions.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/share/qtcreator/android/sdk_definitions.json b/share/qtcreator/android/sdk_definitions.json index 056b425f6ca..f1545c2ad69 100644 --- a/share/qtcreator/android/sdk_definitions.json +++ b/share/qtcreator/android/sdk_definitions.json @@ -1,12 +1,12 @@ { "common": { "sdk_tools_url": { - "linux": "https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip", - "linux_sha256": "87f6dcf41d4e642e37ba03cb2e387a542aa0bd73cb689a9e7152aad40a6e7a08", - "windows": "https://dl.google.com/android/repository/commandlinetools-win-6858069_latest.zip", - "windows_sha256": "d2f6c9bb7db0362995c0b8dd2fd5949ce23c1dccb7f9392350b5e29b6d5fec7d", - "mac": "https://dl.google.com/android/repository/commandlinetools-mac-6858069_latest.zip", - "mac_sha256": "58a55d9c5bcacd7c42170d2cf2c9ae2889c6797a6128307aaf69100636f54a13" + "linux": "https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip", + "linux_sha256": "89f308315e041c93a37a79e0627c47f21d5c5edbe5e80ea8dc0aac8a649e0e92", + "windows": "https://dl.google.com/android/repository/commandlinetools-win-6609375_latest.zip", + "windows_sha256": "40bba20275180194bebf89bb58c74d712bb93cc401f36bd2f8f32383acf9826c", + "mac": "https://dl.google.com/android/repository/commandlinetools-mac-6609375_latest.zip", + "mac_sha256": "2c3822db1c916655223e5ee8ce0fbf6b73d0b99012045c9dc8eaa6a5736c0c55" }, "sdk_essential_packages": { "default": ["platform-tools", "platforms;android-30", "cmdline-tools;latest"], From 35380afb93c4899e4b265ce968cd727c8a46f906 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 30 Nov 2020 17:28:37 +0100 Subject: [PATCH 09/31] QmlDesigner: Disable rich text for TextInput TextInput does not support rich text. Task-number: QDS-2769 Change-Id: I6ae9862f65c866cce2975f7f53cb2683f41f0d9a Reviewed-by: Alessandro Portale --- .../propertyEditorQmlSources/QtQuick/TextEditSpecifics.qml | 1 + .../propertyEditorQmlSources/QtQuick/TextSpecifics.qml | 1 + .../imports/HelperWidgets/StandardTextSection.qml | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextEditSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextEditSpecifics.qml index 6a09b44a29c..2703191cda0 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextEditSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextEditSpecifics.qml @@ -34,6 +34,7 @@ Column { StandardTextSection { showVerticalAlignment: true showFormatProperty: true + richTextEditorAvailable: true } Section { diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextSpecifics.qml index 7b79e76f0c3..96a36c16b18 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextSpecifics.qml @@ -37,6 +37,7 @@ Column { showElide: true showFontSizeMode: true showLineHeight: true + richTextEditorAvailable: true } Section { diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml index c15f1268113..cbd6fe9d650 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml @@ -40,6 +40,8 @@ Section { property bool showFormatProperty: false property bool showFontSizeMode: false property bool showLineHeight: false + property bool richTextEditorAvailable: false + id: root SectionLayout { @@ -61,9 +63,10 @@ Section { onClicked: { richTextDialogLoader.show() } + visible: root.richTextEditorAvailable } - RichTextEditor{ + RichTextEditor { onRejected: { hideWidget() } From dda67753250c57c85b3f005aa27c28117555aadd Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 1 Dec 2020 08:11:07 +0100 Subject: [PATCH 10/31] Debugger: Fix crash in GdbMi::parseValue with Qt 6 QString::begin/end may be null in Qt 6. Fixes: QTCREATORBUG-25018 Change-Id: If50cb79c58096d5fa68e494e33bea131063968fb Reviewed-by: Jarek Kobus --- src/plugins/debugger/debuggerprotocol.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp index 30250f27d76..8a751aa4879 100644 --- a/src/plugins/debugger/debuggerprotocol.cpp +++ b/src/plugins/debugger/debuggerprotocol.cpp @@ -198,6 +198,9 @@ QString GdbMi::parseCString(const QChar *&from, const QChar *to) void GdbMi::parseValue(const QChar *&from, const QChar *to) { + if (from == to) + return; + //qDebug() << "parseValue: " << QString(from, to - from); switch (from->unicode()) { case '{': From e556463dc7918f1c2a345ccc83296f82c226a2ac Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 30 Nov 2020 13:14:11 +0100 Subject: [PATCH 11/31] Debugger: Fix value endianness of register data with LLDB Fixes: QTCREATORBUG-25009 Change-Id: I4de44cee6ef322791e3f4058a369548bfb210e77 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/lldbbridge.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 1a114704f53..2b9078db218 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -1309,7 +1309,11 @@ class Dumper(DumperBase): result = 'registers=[' for group in frame.GetRegisters(): for reg in group: - value = ''.join(["%02x" % x for x in reg.GetData().uint8s]) + data = reg.GetData() + if data.GetByteOrder() == lldb.eByteOrderLittle: + value = ''.join(["%02x" % x for x in reversed(data.uint8s)]) + else: + value = ''.join(["%02x" % x for x in data.uint8s]) result += '{name="%s"' % reg.GetName() result += ',value="0x%s"' % value result += ',size="%s"' % reg.GetByteSize() From 9d44df05d0a0e29c7fb4ba209257dd73cb52a8ec Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 24 Nov 2020 12:31:50 +0100 Subject: [PATCH 12/31] clang support: Make qmake aware of libclang-cpp Newer clang releases do not use the static tooling libs anymore. Change-Id: Ia0766dce9ccf79266ec8a3fd0b0f9c638fc41ced Reviewed-by: Christian Stenger --- src/shared/clang/clang_installation.pri | 30 ++++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/shared/clang/clang_installation.pri b/src/shared/clang/clang_installation.pri index 20e7cc14dca..28c2d0d3263 100644 --- a/src/shared/clang/clang_installation.pri +++ b/src/shared/clang/clang_installation.pri @@ -131,11 +131,6 @@ defineReplace(extractWarnings) { return($$result) } -CLANGTOOLING_LIBS=-lclangTooling -lclangIndex -lclangFrontend -lclangParse -lclangSerialization \ - -lclangSema -lclangEdit -lclangAnalysis -lclangDriver -lclangDynamicASTMatchers \ - -lclangASTMatchers -lclangToolingCore -lclangAST -lclangLex -lclangBasic -win32:CLANGTOOLING_LIBS += -lversion - BIN_EXTENSION = win32: BIN_EXTENSION = .exe @@ -208,12 +203,17 @@ isEmpty(LLVM_VERSION) { isEmpty(QTC_CLANG_BUILDMODE_MISMATCH)|!equals(QTC_CLANG_BUILDMODE_MISMATCH, 1) { CLANGFORMAT_MAIN_HEADER = $$LLVM_INCLUDEPATH/clang/Format/Format.h exists($$CLANGFORMAT_MAIN_HEADER) { - CLANGFORMAT_LIBS=-lclangFormat -lclangToolingInclusions -lclangToolingCore -lclangRewrite -lclangLex -lclangBasic - ALL_CLANG_LIBS=-lclangFormat -lclangToolingInclusions -lclangTooling -lclangToolingCore \ - -lclangRewrite -lclangIndex -lclangFrontend -lclangParse -lclangSerialization \ - -lclangSema -lclangEdit -lclangAnalysis -lclangDriver -lclangDynamicASTMatchers \ - -lclangASTMatchers -lclangAST -lclangLex -lclangBasic - win32:CLANGFORMAT_LIBS += -lversion + exists($$LLVM_LIBDIR/*clangBasic*) { + CLANGFORMAT_LIBS=-lclangFormat -lclangToolingInclusions -lclangToolingCore -lclangRewrite -lclangLex -lclangBasic + ALL_CLANG_LIBS=-lclangFormat -lclangToolingInclusions -lclangTooling -lclangToolingCore \ + -lclangRewrite -lclangIndex -lclangFrontend -lclangParse -lclangSerialization \ + -lclangSema -lclangEdit -lclangAnalysis -lclangDriver -lclangDynamicASTMatchers \ + -lclangASTMatchers -lclangAST -lclangLex -lclangBasic + win32:CLANGFORMAT_LIBS += -lversion + } else { + CLANGFORMAT_LIBS = -lclang-cpp + ALL_CLANG_LIBS = -lclang-cpp + } } } win32:ALL_CLANG_LIBS += -lversion @@ -240,6 +240,14 @@ isEmpty(LLVM_VERSION) { isEmpty(QTC_CLANG_BUILDMODE_MISMATCH)|!equals(QTC_CLANG_BUILDMODE_MISMATCH, 1) { QTC_ENABLE_CLANG_REFACTORING=$$(QTC_ENABLE_CLANG_REFACTORING) !isEmpty(QTC_ENABLE_CLANG_REFACTORING) { + exists($$LLVM_LIBDIR/*clangBasic*) { + CLANGTOOLING_LIBS=-lclangTooling -lclangIndex -lclangFrontend -lclangParse -lclangSerialization \ + -lclangSema -lclangEdit -lclangAnalysis -lclangDriver -lclangDynamicASTMatchers \ + -lclangASTMatchers -lclangToolingCore -lclangAST -lclangLex -lclangBasic + win32:CLANGTOOLING_LIBS += -lversion + } else { + CLANGTOOLING_LIBS = -lclang-cpp + } !contains(QMAKE_DEFAULT_LIBDIRS, $$LLVM_LIBDIR): LIBTOOLING_LIBS = -L$${LLVM_LIBDIR} LIBTOOLING_LIBS += $$CLANGTOOLING_LIBS $$LLVM_STATIC_LIBS } From 990aa5e45b63a1136609d44aa14c2254feb4673b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 30 Nov 2020 17:43:33 +0100 Subject: [PATCH 13/31] CppTools: Adapt autotest Amends 370804c2ab. Change-Id: I054a44948cd4a473ae22284d7669c4a7adb2fc86 Reviewed-by: Christian Stenger --- .../unit/unittest/compileroptionsbuilder-test.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/unit/unittest/compileroptionsbuilder-test.cpp b/tests/unit/unittest/compileroptionsbuilder-test.cpp index ba12feb9065..5cc01800a4a 100644 --- a/tests/unit/unittest/compileroptionsbuilder-test.cpp +++ b/tests/unit/unittest/compileroptionsbuilder-test.cpp @@ -582,7 +582,8 @@ TEST_F(CompilerOptionsBuilder, AddDefineFunctionMacrosMsvc) compilerOptionsBuilder.addDefineFunctionMacrosMsvc(); - ASSERT_THAT(compilerOptionsBuilder.options(), Contains(QString{"-D__FUNCTION__=\"\""})); + ASSERT_THAT(compilerOptionsBuilder.options(), + Contains(QString{"-D__FUNCTION__=\"someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580\""})); } TEST_F(CompilerOptionsBuilder, AddProjectConfigFileInclude) @@ -683,9 +684,9 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptionsCl) "/std:c++17", "-fms-compatibility-version=19.00", "-DprojectFoo=projectBar", - "-D__FUNCSIG__=\"\"", - "-D__FUNCTION__=\"\"", - "-D__FUNCDNAME__=\"\"", + "-D__FUNCSIG__=\"void __cdecl someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580(void)\"", + "-D__FUNCTION__=\"someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580\"", + "-D__FUNCDNAME__=\"?someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580@@YAXXZ\"", "-I", IsPartOfHeader("wrappedQtHeaders"), "-I", IsPartOfHeader(toNative("wrappedQtHeaders/QtCore").toStdString()), "-I", toNative("/tmp/path"), @@ -723,9 +724,9 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptionsClWithExceptions) "-fexceptions", "-fms-compatibility-version=19.00", "-DprojectFoo=projectBar", - "-D__FUNCSIG__=\"\"", - "-D__FUNCTION__=\"\"", - "-D__FUNCDNAME__=\"\"", + "-D__FUNCSIG__=\"void __cdecl someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580(void)\"", + "-D__FUNCTION__=\"someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580\"", + "-D__FUNCDNAME__=\"?someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580@@YAXXZ\"", "-I", IsPartOfHeader("wrappedQtHeaders"), "-I", IsPartOfHeader(toNative("wrappedQtHeaders/QtCore").toStdString()), "-I", toNative("/tmp/path"), From 2c2c7255b9623704372bcf8a85997609d7507335 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 30 Nov 2020 14:42:33 +0100 Subject: [PATCH 14/31] SSH: Do not use sftp -b The -b option turns on "pure batch mode", i.e. users won't get asked for a password. This does not seem to be overridable. Therefore, we use input file redirection instead. Fixes: QTCREATORBUG-24979 Change-Id: Id1f703ffd61a7b8d194437ee89676770990d0efa Reviewed-by: Oliver Wolff --- src/libs/ssh/sftptransfer.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libs/ssh/sftptransfer.cpp b/src/libs/ssh/sftptransfer.cpp index 853907eaa0d..02391943348 100644 --- a/src/libs/ssh/sftptransfer.cpp +++ b/src/libs/ssh/sftptransfer.cpp @@ -180,9 +180,8 @@ void SftpTransfer::doStart() + QtcProcess::quoteArgUnix(sourceFileOrLinkTarget).toLocal8Bit() + ' ' + QtcProcess::quoteArgUnix(f.targetFile).toLocal8Bit() + '\n'); } - d->sftpProc.start(sftpBinary.toString(), - QStringList{"-b", QDir::toNativeSeparators(batchFile.fileName())} - << d->connectionArgs); + d->sftpProc.setStandardInputFile(batchFile.fileName()); + d->sftpProc.start(sftpBinary.toString(), d->connectionArgs); emit started(); } From b9886a4b0416951a54484b23370c1fbb0cd771c0 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 27 Nov 2020 18:21:33 +0100 Subject: [PATCH 15/31] Doc: Fix the \youtube macro for use with liteHTML help backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Create a common directory for extra image files, and move the video thumbnails there. This folder structure is required to work around the fact that relative image paths passed to qhp..extraFiles are not resolved correctly when loading the generated help project. Change-Id: Iff5583a9a318670571b7f706182723e54e0ec466 Reviewed-by: Leena Miettinen Reviewed-by: Topi Reiniö --- doc/config/macros-online.qdocconf | 4 ++++ doc/config/macros.qdocconf | 6 ++---- doc/qtcreator/config/qtcreator-project.qdocconf | 3 +-- .../images/extraimages/images}/9ihYeC0YJ0M.jpg | Bin .../images/extraimages/images/RfEYO-5Mw6s.jpg | Bin 0 -> 6513 bytes .../images/extraimages/images}/SsFWyUeAA_4.jpg | Bin .../images/extraimages/images}/ZzbucmQPU44.jpg | Bin .../images/extraimages/images}/aV6kFxH3Xws.jpg | Bin .../images/extraimages}/images/commercial.png | Bin .../images/extraimages/images/yOUdg1o2KJM.jpg | Bin 0 -> 9726 bytes .../extraimages/qtcreator-extraimages.qdocconf | 4 ++++ .../qtdesignstudio-extraimages.qdocconf | 8 ++++++++ doc/qtcreator/qtcreator-online.qdocconf | 3 +++ doc/qtcreator/src/qtquick/qtquick-designer.qdoc | 3 +++ .../config/qtdesignstudio.qdocconf | 9 ++------- .../qtdesignstudio-online.qdocconf | 3 +++ 16 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 doc/config/macros-online.qdocconf rename doc/{qtdesignstudio/images/videoicons => qtcreator/images/extraimages/images}/9ihYeC0YJ0M.jpg (100%) create mode 100644 doc/qtcreator/images/extraimages/images/RfEYO-5Mw6s.jpg rename doc/{qtdesignstudio/images/videoicons => qtcreator/images/extraimages/images}/SsFWyUeAA_4.jpg (100%) rename doc/{qtdesignstudio/images/videoicons => qtcreator/images/extraimages/images}/ZzbucmQPU44.jpg (100%) rename doc/{qtdesignstudio/images/videoicons => qtcreator/images/extraimages/images}/aV6kFxH3Xws.jpg (100%) rename doc/{config => qtcreator/images/extraimages}/images/commercial.png (100%) create mode 100644 doc/qtcreator/images/extraimages/images/yOUdg1o2KJM.jpg create mode 100644 doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf create mode 100644 doc/qtcreator/images/extraimages/qtdesignstudio-extraimages.qdocconf diff --git a/doc/config/macros-online.qdocconf b/doc/config/macros-online.qdocconf new file mode 100644 index 00000000000..c6f370a7d76 --- /dev/null +++ b/doc/config/macros-online.qdocconf @@ -0,0 +1,4 @@ +macro.youtube.HTML = "
\n\n" \ + "
\n" diff --git a/doc/config/macros.qdocconf b/doc/config/macros.qdocconf index d2e02d06784..0d9e14ffa0a 100644 --- a/doc/config/macros.qdocconf +++ b/doc/config/macros.qdocconf @@ -55,10 +55,8 @@ macro.emptyspan.HTML = "" # HTML.extraimages += images/dQw4w9WgXcQ.jpg # qhp.ProjectName.extraFiles += images/dQw4w9WgXcQ.jpg # -macro.youtube.HTML = "
\n\n" \ - "
\n" + "\n" diff --git a/doc/qtcreator/config/qtcreator-project.qdocconf b/doc/qtcreator/config/qtcreator-project.qdocconf index cff09e5c3bc..479d17ed8b2 100644 --- a/doc/qtcreator/config/qtcreator-project.qdocconf +++ b/doc/qtcreator/config/qtcreator-project.qdocconf @@ -43,8 +43,7 @@ imagedirs = ../images \ exampledirs = ../examples examples.fileextensions += *.qml *.svg -HTML.extraimages = ../../config/images/commercial.png -qhp.QtCreator.extraFiles = ../../config/images/commercial.png +include(../../qtcreator/images/extraimages/qtcreator-extraimages.qdocconf) depends += qtandroidextras\ qtwidgets \ diff --git a/doc/qtdesignstudio/images/videoicons/9ihYeC0YJ0M.jpg b/doc/qtcreator/images/extraimages/images/9ihYeC0YJ0M.jpg similarity index 100% rename from doc/qtdesignstudio/images/videoicons/9ihYeC0YJ0M.jpg rename to doc/qtcreator/images/extraimages/images/9ihYeC0YJ0M.jpg diff --git a/doc/qtcreator/images/extraimages/images/RfEYO-5Mw6s.jpg b/doc/qtcreator/images/extraimages/images/RfEYO-5Mw6s.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fecd5b70efee20789e4de00e6ca42dfea5d50431 GIT binary patch literal 6513 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf b/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf new file mode 100644 index 00000000000..91688081176 --- /dev/null +++ b/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf @@ -0,0 +1,4 @@ +{HTML.extraimages,qhp.QtCreator.extraFiles} += \ + images/commercial.png \ + images/RfEYO-5Mw6s.jpg \ + images/yOUdg1o2KJM.jpg diff --git a/doc/qtcreator/images/extraimages/qtdesignstudio-extraimages.qdocconf b/doc/qtcreator/images/extraimages/qtdesignstudio-extraimages.qdocconf new file mode 100644 index 00000000000..6578308433a --- /dev/null +++ b/doc/qtcreator/images/extraimages/qtdesignstudio-extraimages.qdocconf @@ -0,0 +1,8 @@ +{HTML.extraimages,qhp.qtdesignstudio.extraFiles} += \ + images/commercial.png \ + images/SsFWyUeAA_4.jpg \ + images/9ihYeC0YJ0M.jpg \ + images/aV6kFxH3Xws.jpg \ + images/ZzbucmQPU44.jpg \ + images/RfEYO-5Mw6s.jpg \ + images/yOUdg1o2KJM.jpg diff --git a/doc/qtcreator/qtcreator-online.qdocconf b/doc/qtcreator/qtcreator-online.qdocconf index 2a0ace23128..b96e6e53979 100644 --- a/doc/qtcreator/qtcreator-online.qdocconf +++ b/doc/qtcreator/qtcreator-online.qdocconf @@ -16,5 +16,8 @@ HTML.footer = \ include($QT_INSTALL_DOCS/global/qt-html-templates-online.qdocconf) +# Override macros for online use +include(../config/macros-online.qdocconf) + # Add an .html file with sidebar content, used in the online style HTML.stylesheets += config/style/qt5-sidebar.html diff --git a/doc/qtcreator/src/qtquick/qtquick-designer.qdoc b/doc/qtcreator/src/qtquick/qtquick-designer.qdoc index 98059facac7..b64db4fdf5e 100644 --- a/doc/qtcreator/src/qtquick/qtquick-designer.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-designer.qdoc @@ -108,4 +108,7 @@ You can move the views anywhere on the screen and save them as \e workspaces, as instructed in \l {Managing Workspaces}. + Watch a video about using the Design mode views: + + \youtube RfEYO-5Mw6s */ diff --git a/doc/qtdesignstudio/config/qtdesignstudio.qdocconf b/doc/qtdesignstudio/config/qtdesignstudio.qdocconf index 56c602c2540..cdb97676c2a 100644 --- a/doc/qtdesignstudio/config/qtdesignstudio.qdocconf +++ b/doc/qtdesignstudio/config/qtdesignstudio.qdocconf @@ -39,6 +39,8 @@ imagedirs = ../images \ ../../../src/plugins/qmldesigner/qtquickplugin/images \ ../../../src/plugins/texteditor/images +include(../../qtcreator/images/extraimages/qtdesignstudio-extraimages.qdocconf) + excludefiles += ../../qtcreator/src/qtcreator.qdoc \ ../../qtcreator/src/qtcreator-toc.qdoc @@ -69,13 +71,6 @@ exampledirs = ../examples/ \ ../../qtcreator/examples examples.fileextensions += *.qml *.svg *.ts *.qm -{HTML.extraimages,qhp.qtdesignstudio.extraFiles} += ../../config/images/commercial.png \ - ../images/videoicons/SsFWyUeAA_4.jpg \ - ../images/videoicons/9ihYeC0YJ0M.jpg \ - ../images/videoicons/aV6kFxH3Xws.jpg \ - ../images/videoicons/ZzbucmQPU44.jpg - - depends += qtwidgets \ qtcore \ qtqml \ diff --git a/doc/qtdesignstudio/qtdesignstudio-online.qdocconf b/doc/qtdesignstudio/qtdesignstudio-online.qdocconf index 27121048cb6..5fc198cc452 100644 --- a/doc/qtdesignstudio/qtdesignstudio-online.qdocconf +++ b/doc/qtdesignstudio/qtdesignstudio-online.qdocconf @@ -3,6 +3,9 @@ include($QT_INSTALL_DOCS/global/qt-html-templates-online.qdocconf) include(config/html-online.qdocconf) include(config/qtdesignstudio.qdocconf) +# Override macros for online use +include(../config/macros-online.qdocconf) + # Add an .html file with sidebar content, used in the online style HTML.stylesheets += config/style/qt5-sidebar.html From 9a33333849d5901746a0721d0f4faa46c6bbedba Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Tue, 1 Dec 2020 13:05:05 +0100 Subject: [PATCH 16/31] Test: Debugger: Gui: Compile fix for Qt6 Change-Id: I9c3c4b49e458c16115fead38255cfe197308916b Reviewed-by: hjk --- tests/manual/debugger/gui/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/manual/debugger/gui/mainwindow.cpp b/tests/manual/debugger/gui/mainwindow.cpp index 723a0b67c98..f16a891b5f8 100644 --- a/tests/manual/debugger/gui/mainwindow.cpp +++ b/tests/manual/debugger/gui/mainwindow.cpp @@ -269,7 +269,7 @@ void MainWindow::on_actionDumperBP_triggered() QStringList sl; QString s = "hallo"; for (int c = 'a'; c < 'c'; c++) { - s += c + 23; + s += char(c + 23); stdS += c; sl.push_back(s); stdStringList.push_back(std::string(1, c)); From dd2a880b8cc181aee525b27141dc08ec42c245a7 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 24 Nov 2020 08:06:47 +0100 Subject: [PATCH 17/31] Debugger: Simplify QByteArray dumper again Change-Id: Id2622db1e855c7706260796b633f06d0e5da0503 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/qttypes.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index f749fa83281..74314d7f1ca 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -68,11 +68,8 @@ def qdump__QByteArray(d, value): if size > 0: d.putExpandable() - if d.qtVersion() >= 0x60000: - elided, shown = d.computeLimit(size, d.displayStringLimit) - p = d.readMemory(data, shown) - else: - elided, p = d.encodeByteArrayHelper(value, d.displayStringLimit) + elided, shown = d.computeLimit(size, d.displayStringLimit) + p = d.readMemory(data, shown) displayFormat = d.currentItemFormat() if displayFormat == DisplayFormat.Automatic or displayFormat == DisplayFormat.Latin1String: From 88c13153b3be8096d413d0ab44336e82afd740fe Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 1 Dec 2020 13:53:27 +0100 Subject: [PATCH 18/31] QmlDesigner: Add flag to usage statistics for stand alone mode Change-Id: I5cc001ccd59059174c7f34978fda7c682900ad3d Reviewed-by: Miikka Heikkinen Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/qmldesignerplugin.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 2a855b9e8c6..65191293691 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -258,6 +258,9 @@ bool QmlDesignerPlugin::delayedInitialize() d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool); d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TransitionTool); + if (DesignerSettings::getValue(DesignerSettingsKey::STANDALONE_MODE).toBool()) + emitUsageStatistics("StandaloneMode"); + return true; } From cfacbb773be7151d9e7b7df2f2ae946ab476e372 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 1 Dec 2020 15:06:23 +0200 Subject: [PATCH 19/31] Utils: Use padding instead of margins for CrumblePathButton Clicks on QPushButton margins are no longer detected as clicks, so change the text alignment to be done with padding instead of margins. See QTBUG-81452 and QTBUG-86587 for related issues. Change-Id: I85971c4defc5d43f959095d4d8e4457804aae0f9 Fixes: QDS-3180 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- src/libs/utils/crumblepath.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/utils/crumblepath.cpp b/src/libs/utils/crumblepath.cpp index f8f027d7f70..378f41545ba 100644 --- a/src/libs/utils/crumblepath.cpp +++ b/src/libs/utils/crumblepath.cpp @@ -177,7 +177,7 @@ CrumblePath::CrumblePath(QWidget *parent) : QWidget(parent) layout->setSpacing(0); setLayout(layout); - setStyleSheet("QPushButton { margin: 12; }"); + setStyleSheet("QPushButton { padding-left: 12; padding-right: 12; }"); } CrumblePath::~CrumblePath() From e1790ed9d0c029f19981208e02d35d0520439ec9 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 30 Nov 2020 15:25:30 +0100 Subject: [PATCH 20/31] Debugger: Fix some dumpers with namespaced Qt This makes the use of '@' prefixes in split('{@QString}'...) etc mandatory, thereby removing the guessing on whether namespaces apply or not on the dumper 'core' side, and removes the guessing on whether dropping the '@' 'works' on the individual dumper implementation side. Amends 1074c2ffce. Change-Id: I44611eb09557638dec12d2e2f78cdaeac0bbd449 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 6 +-- share/qtcreator/debugger/qttypes.py | 78 ++++++++++++++--------------- tests/auto/debugger/tst_dumpers.cpp | 10 ++-- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index b682f4ae002..1da2b3a550e 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1902,7 +1902,7 @@ class DumperBase(): = self.split('ppppIIp' + 'pppppp', dd) if qobjectPtr: - qobjectType = self.createType('QObject') + qobjectType = self.createType('@QObject') with SubItem(self, '[parent]'): if not self.isCli: self.putSortGroup(9) @@ -2063,8 +2063,8 @@ class DumperBase(): # Dynamic properties. if extraData: - byteArrayType = self.createType('QByteArray') - variantType = self.createType('QVariant') + byteArrayType = self.createType('@QByteArray') + variantType = self.createType('@QVariant') if self.qtVersion() >= 0x50600: values = self.vectorChildrenGenerator( extraData + 2 * ptrSize, variantType) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 74314d7f1ca..f1c432ce64a 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -243,7 +243,7 @@ def qdump__Qt__ItemDataRole(d, value): def qdump__QStandardItemData(d, value): - role, pad, val = value.split('{@Qt::ItemDataRole}@{QVariant}') + role, pad, val = value.split('{@Qt::ItemDataRole}@{@QVariant}') d.putPairContents(role.value(), (role, val), 'role', 'value') @@ -573,7 +573,7 @@ def qdump__QKeyEvent(d, value): # ushort reserved:15; (vtable, privateD, t, flags, modState, ts, txt, k, scanCode, virtualKey, modifiers, - c, autor) = value.split("ppHHiQ{QString}{int}IIIHH") + c, autor) = value.split("ppHHiQ{@QString}{int}IIIHH") #d.putStringValue(txt) #data = d.encodeString(txt) @@ -823,7 +823,7 @@ def qdump__QHash(d, value): def qdump__QVariantHash(d, value): - qdumpHelper_QHash(d, value, d.createType('QString'), d.createType('QVariant')) + qdumpHelper_QHash(d, value, d.createType('@QString'), d.createType('@QVariant')) def qdumpHelper_QHash(d, value, keyType, valueType): @@ -969,29 +969,29 @@ def qdump__QHostAddress(d, value): if tiVersion is not None: if tiVersion >= 16: # After a6cdfacf - p, scopeId, a6, a4, protocol = d.split('p{QString}16s{quint32}B', dd) + p, scopeId, a6, a4, protocol = d.split('p{@QString}16s{@quint32}B', dd) mayNeedParse = False elif tiVersion >= 5: # Branch 5.8.0 at f70b4a13 TI: 15 # Branch 5.7.0 at b6cf0418 TI: 5 (ipString, scopeId, a6, a4, protocol, isParsed) \ - = d.split('{QString}{QString}16s{quint32}B{bool}', dd) + = d.split('{@QString}{@QString}16s{@quint32}B{bool}', dd) else: (ipString, scopeId, a4, pad, a6, protocol, isParsed) \ - = d.split('{QString}{QString}{quint32}I16sI{bool}', dd) + = d.split('{@QString}{@QString}{@quint32}I16sI{bool}', dd) elif qtVersion >= 0x050600: # 5.6.0 at f3aabb42 if d.ptrSize() == 8 or d.isWindowsTarget(): (ipString, scopeId, a4, pad, a6, protocol, isParsed) \ - = d.split('{QString}{QString}{quint32}I16sI{bool}', dd) + = d.split('{@QString}{@QString}{@quint32}I16sI{bool}', dd) else: (ipString, scopeId, a4, a6, protocol, isParsed) \ - = d.split('{QString}{QString}{quint32}16sI{bool}', dd) + = d.split('{@QString}{@QString}{@quint32}16sI{bool}', dd) elif qtVersion >= 0x050000: # 5.2.0 at 62feb088 (ipString, scopeId, a4, a6, protocol, isParsed) \ - = d.split('{QString}{QString}{quint32}16sI{bool}', dd) + = d.split('{@QString}{@QString}{@quint32}16sI{bool}', dd) else: # 4.8.7 at b05d05f (a4, a6, protocol, pad, ipString, isParsed, pad, scopeId) \ - = d.split('{quint32}16sB@{QString}{bool}@{QString}', dd) + = d.split('{@quint32}16sB@{@QString}{bool}@{@QString}', dd) if mayNeedParse: ipStringData, ipStringSize, ipStringAlloc = d.stringData(ipString) @@ -1044,7 +1044,7 @@ def qdump__QList(d, value): def qdump__QVariantList(d, value): - qdumpHelper_QList(d, value, d.createType('QVariant')) + qdumpHelper_QList(d, value, d.createType('@QVariant')) def qdumpHelper_QList(d, value, innerType): @@ -1186,8 +1186,8 @@ def qdump__QLocale(d, value): decimal, group, listt, percent, zero, minus, plus, exponential) \ = d.split('2s{short}2s' - + '{QChar}{QChar}{short}{QChar}{QChar}' - + '{QChar}{QChar}{QChar}', data) + + '{@QChar}{@QChar}{short}{@QChar}{@QChar}' + + '{@QChar}{@QChar}{@QChar}', data) try: d.putStringValue(d.call('const char *', value, 'name')) except: @@ -1325,7 +1325,7 @@ def qform__QVariantMap(): def qdump__QVariantMap(d, value): - qdumpHelper_QMap(d, value, d.createType('QString'), d.createType('QVariant')) + qdumpHelper_QMap(d, value, d.createType('@QString'), d.createType('@QVariant')) def qdump__QMetaMethod(d, value): @@ -1428,7 +1428,7 @@ def qdump__QRectF(d, value): def qdump__QRegExp(d, value): # value.priv.engineKey.pattern privAddress = d.extractPointer(value) - (eng, pattern) = d.split('p{QString}', privAddress) + (eng, pattern) = d.split('p{@QString}', privAddress) d.putStringValue(pattern) d.putExpandable() if d.isExpanded(): @@ -1439,7 +1439,7 @@ def qdump__QRegExp(d, value): # Might fail (LLDB, Core files, ...), still cache might be warm. pass (patternSyntax, caseSensitive, minimal, pad, t, captures) \ - = d.split('{int}{int}B@{QString}{QStringList}', privAddress + 2 * d.ptrSize()) + = d.split('{int}{int}B@{@QString}{@QStringList}', privAddress + 2 * d.ptrSize()) d.putSubItem('syntax', patternSyntax.cast(d.qtNamespace() + 'QRegExp::PatternSyntax')) d.putSubItem('captures', captures) @@ -1452,15 +1452,15 @@ def qdump__QRegion(d, value): if d.qtVersion() >= 0x060000: ref, _, rgn = d.split('i@p', d_ptr) numRects, innerArea, rects, extents, innerRect = \ - d.split('ii{QList}{QRect}{QRect}', rgn) + d.split('ii{@QList<@QRect>}{@QRect}{@QRect}', rgn) elif d.qtVersion() >= 0x050400: # Padding removed in ee324e4ed ref, _, rgn = d.split('i@p', d_ptr) numRects, innerArea, rects, extents, innerRect = \ - d.split('ii{QVector}{QRect}{QRect}', rgn) + d.split('ii{@QVector<@QRect>}{@QRect}{@QRect}', rgn) elif d.qtVersion() >= 0x050000: ref, _, rgn = d.split('i@p', d_ptr) numRects, _, rects, extents, innerRect, innerArea = \ - d.split('i@{QVector}{QRect}{QRect}i', rgn) + d.split('i@{@QVector<@QRect>}{@QRect}{@QRect}i', rgn) else: if d.isWindowsTarget(): ref, _, rgn = d.split('i@p', d_ptr) @@ -1470,7 +1470,7 @@ def qdump__QRegion(d, value): numRects = 0 else: numRects, _, rects, extents, innerRect, innerArea = \ - d.split('i@{QVector}{QRect}{QRect}i', rgn) + d.split('i@{@QVector<@QRect>}{@QRect}{@QRect}i', rgn) d.putItemCount(numRects) if d.isExpanded(): @@ -1619,13 +1619,13 @@ def qdump__QStack(d, value): def qdump__QPolygonF(d, value): data, size, _ = d.vectorData(value) d.putItemCount(size) - d.putPlotData(data, size, d.createType('QPointF')) + d.putPlotData(data, size, d.createType('@QPointF')) def qdump__QPolygon(d, value): data, size, _ = d.vectorData(value) d.putItemCount(size) - d.putPlotData(data, size, d.createType('QPoint')) + d.putPlotData(data, size, d.createType('@QPoint')) def qdump__QGraphicsPolygonItem(d, value): @@ -1639,7 +1639,7 @@ def qdump__QGraphicsPolygonItem(d, value): offset = 308 data, size, alloc = d.vectorData(dptr + offset) d.putItemCount(size) - d.putPlotData(data, size, d.createType('QPointF')) + d.putPlotData(data, size, d.createType('@QPointF')) def qedit__QString(d, value, data): @@ -1661,7 +1661,7 @@ def qdump__QString(d, value): if (size > 0): d.putExpandable() if d.isExpanded(): - d.putArrayData(data, size, d.createType('QChar')) + d.putArrayData(data, size, d.createType('@QChar')) def qdump__QStaticStringData(d, value): @@ -1701,13 +1701,13 @@ def qdump__QStringRef(d, value): if stringptr == 0: d.putValue('(null)') return - (data, ssize, alloc) = d.stringData(d.createValue(stringptr, 'QString')) + data, ssize, alloc = d.stringData(d.createValue(stringptr, '@QString')) d.putValue(d.readMemory(data + 2 * pos, 2 * size), 'utf16') d.putPlainChildren(value) def qdump__QStringList(d, value): - qdumpHelper_QList(d, value, d.createType('QString')) + qdumpHelper_QList(d, value, d.createType('@QString')) d.putBetterType(value.type) @@ -1770,8 +1770,8 @@ def qdump__QUrl(d, value): if d.qtVersion() < 0x050000: d.call('void', value, 'port') # Warm up internal cache. d.call('void', value, 'path') - st = '{QString}' - ba = '{QByteArray}' + st = '{@QString}' + ba = '{@QByteArray}' (ref, dummy, scheme, userName, password, host, path, # QString query, # QByteArray @@ -1782,7 +1782,7 @@ def qdump__QUrl(d, value): = d.split('i@' + st * 5 + ba + st + ba * 5 + 'i', privAddress) else: (ref, port, scheme, userName, password, host, path, query, fragment) \ - = d.split('ii' + '{QString}' * 7, privAddress) + = d.split('ii' + '{@QString}' * 7, privAddress) userNameEnc = d.encodeString(userName) hostEnc = d.encodeString(host) @@ -2189,7 +2189,7 @@ def qdump__QXmlAttributes__Attribute(d, value): d.putExpandable() if d.isExpanded(): with Children(d): - (qname, uri, localname, val) = value.split('{QString}' * 4) + (qname, uri, localname, val) = value.split('{@QString}' * 4) d.putSubItem('qname', qname) d.putSubItem('uri', uri) d.putSubItem('localname', localname) @@ -2197,8 +2197,8 @@ def qdump__QXmlAttributes__Attribute(d, value): def qdump__QXmlAttributes(d, value): - vptr, atts = value.split('p{QList}') - _, att_size, _ = d.describeStruct('{QString}' * 4) + vptr, atts = value.split('p{@QList<@QXmlAttributes::Attribute>}') + _, att_size, _ = d.describeStruct('{@QString}' * 4) innerType = d.createType(d.qtNamespace() + 'QXmlAttributes::Attribute', att_size) qdumpHelper_QList(d, atts, innerType) @@ -2262,7 +2262,7 @@ def qdump__QV4__Heap__String(d, value): # Note: There's also the 'Identifier' case. And the largestSubLength != 0 case. (baseClass, textOrLeft, idOrRight, subtype, stringHash, largestSub, length, mm) \ = value.split('QppIIIIp') - textPtr = d.split('{QStringDataPtr}', textOrLeft)[0] + textPtr = d.split('{@QStringDataPtr}', textOrLeft)[0] qdump__QStringData(d, d.createValue(textOrLeft, d.qtNamespace() + 'QStringData')) if d.isExpanded(): with Children(d): @@ -3063,7 +3063,7 @@ def qdump__QJsonValue(d, value): return if t == 3: d.putType('QJsonValue (String)') - string = value.split('{QString}')[0] + string = value.split('{@QString}')[0] elided, base = d.encodeString(string, d.displayStringLimit) d.putValue(base, 'utf16', elided=elided) return @@ -3118,14 +3118,14 @@ def qdump__QSqlResultPrivate(d, value): error1, error2, error3, \ forwardOnly, pad, precisionPolicy, bindCount, \ binds, executedQuery, types, values, indexes, holders = \ - value.split('ppppi@{QString}bb@pppb@iiii{QString}ppp') + value.split('ppppi@{@QString}bb@pppb@iiii{@QString}ppp') d.putStringValue(sql) d.putPlainChildren(value) def qdump__QSqlField(d, value): - val, dptr = value.split('{QVariant}p') + val, dptr = value.split('{@QVariant}p') qdump__QVariant(d, val) d.putBetterType(d.currentType.value.replace('QVariant', 'QSqlField')) d.putPlainChildren(value) @@ -3163,7 +3163,7 @@ def qdump__qfloat16(d, value): def qdumpHelper_QCbor_string(d, container_ptr, element_index, is_bytes): - # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, + # d.split('i@{@QByteArray::size_type}pp', container_ptr) doesn't work with CDB, # so be explicit: pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8) elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize()) @@ -3199,7 +3199,7 @@ def qdumpHelper_QCbor_array(d, container_ptr, is_cbor): if not container_ptr: d.putItemCount(0) return - # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, + # d.split('i@{@QByteArray::size_type}pp', container_ptr) doesn't work with CDB, # so be explicit: pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8) elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize()) @@ -3220,7 +3220,7 @@ def qdumpHelper_QCbor_map(d, container_ptr, is_cbor): if not container_ptr: d.putItemCount(0) return - # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, + # d.split('i@{@QByteArray::size_type}pp', container_ptr) doesn't work with CDB, # so be explicit: pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8) elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize()) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 8a4fc4b6cd1..e16cd7f1610 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -2864,21 +2864,21 @@ void tst_Dumpers::dumper_data() + CoreProfile() - + Check("m0", "<0 items>", "@QMap>") + + Check("m0", "<0 items>", "@QMap>") - + Check("m1", "<2 items>", "@QMap>") + + Check("m1", "<2 items>", "@QMap>") + CheckPairish("m1.0.key", "11", "unsigned int") - + CheckPairish("m1.0.value", "<1 items>", "@QList") + + CheckPairish("m1.0.value", "<1 items>", "@QList<@QString>") + CheckPairish("m1.0.value.0", "[0]", "\"11\"", "@QString") + CheckPairish("m1.1.key", "22", "unsigned int") - + CheckPairish("m1.1.value", "<1 items>", "@QList") + + CheckPairish("m1.1.value", "<1 items>", "@QList<@QString>") + CheckPairish("m1.1.value.0", "[0]", "\"22\"", "@QString") + Check("m2", "<2 items>", "@QMap") + Check("m2.0", "[0] 11", FloatValue("31.0"), "") + Check("m2.1", "[1] 22", FloatValue("32.0"), "") - + Check("m3", "<2 items>", TypeDef("@QMap>", "T")) + + Check("m3", "<2 items>", TypeDef("@QMap>", "T")) + Check("m4", "<1 items>", "@QMap<@QString, float>") + CheckPairish("m4.0.key", "\"22.0\"", "@QString") From 6c14b4dfaf817716ee502711686661f7875c2fbc Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 1 Dec 2020 22:55:13 +0100 Subject: [PATCH 21/31] QtQuick Application Wizards: Set default Controls Style to "Material" The Controls Style "Default" that is currently by default in the generated qtquickcontrols2.conf is not present in Qt 6. That leads to QML runtime errors and aborting applications with Qt 6. Let's switch the default to "Material" which is available since Qt 5.7 and present in Qt 6. Fixes: QTCREATORBUG-25027 Change-Id: Ic8b631b771487624d7459a276d290b80c7ad8be0 Reviewed-by: Eike Ziller --- .../wizards/projects/qtquickapplication/scroll/wizard.json | 2 +- .../wizards/projects/qtquickapplication/stack/wizard.json | 2 +- .../wizards/projects/qtquickapplication/swipe/wizard.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/scroll/wizard.json b/share/qtcreator/templates/wizards/projects/qtquickapplication/scroll/wizard.json index 1ad41e72302..5ebf0852168 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/scroll/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/scroll/wizard.json @@ -160,7 +160,7 @@ "type": "ComboBox", "data": { - "index": 0, + "index": 1, "items": [ { diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/stack/wizard.json b/share/qtcreator/templates/wizards/projects/qtquickapplication/stack/wizard.json index e3966ca5231..2f0d0353f54 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/stack/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/stack/wizard.json @@ -178,7 +178,7 @@ "type": "ComboBox", "data": { - "index": 0, + "index": 1, "items": [ { diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/swipe/wizard.json b/share/qtcreator/templates/wizards/projects/qtquickapplication/swipe/wizard.json index 67dd9fb711a..804916d77a8 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/swipe/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/swipe/wizard.json @@ -178,7 +178,7 @@ "type": "ComboBox", "data": { - "index": 0, + "index": 1, "items": [ { From 25a89250f67cfb566f1362679c253d9d82792d80 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 1 Dec 2020 09:40:20 +0100 Subject: [PATCH 22/31] Debugger: Adapt QVariant dumper and tests to Qt 6 Task-number: QTCREATORBUG-24098 Change-Id: I9543bad098bb11d21079c1e2711b639bde3873b7 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/qttypes.py | 44 ++++++++++++++++++++++++++++- tests/auto/debugger/tst_dumpers.cpp | 8 ++---- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index f1c432ce64a..95a1280c8e1 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -1997,7 +1997,49 @@ qdumpHelper_QVariants_F = [ def qdump__QVariant(d, value): - (data, typeStuff) = d.split('8sI', value) + if d.qtVersion() >= 0x060000: + qdumpHelper__QVariant6(d, value) + else: + qdumpHelper__QVariant45(d, value) + +def qdumpHelper__QVariant6(d, value): + data, typeStuff = d.split('24sp', value) + packedType = typeStuff >> 2 + metaTypeInterface = typeStuff - (typeStuff & 3) + + if metaTypeInterface == 0: + qdumpHelper_QVariant_0(d, value) + return + + revision, alignment, size, flags, variantType, metaObjectPtr, name = \ + d.split('HHIIIpp', metaTypeInterface) + + # Well-known simple type. + if variantType <= 6: + qdumpHelper_QVariants_A[variantType](d, value) + return None + + # Extended Core type (Qt 5+) + if variantType >= 31 and variantType <= 38: + qdumpHelper_QVariants_D[variantType - 31](d, value) + return None + + typeName = d.extractCString(name).decode('utf8') + isShared = bool(typeStuff & 0x1) + + if isShared: + # indirectly stored items (QRectF, ...) + ptr = d.extractPointer(value) + _, data = d.split('8s{%s}' % typeName, ptr) + d.putItem(data) + else: + d.putItem(d.createValue(data, typeName)) + + d.putBetterType('%sQVariant (%s)' % (d.qtNamespace(), typeName)) + + +def qdumpHelper__QVariant45(d, value): + data, typeStuff = d.split('8sI', value) variantType = typeStuff & 0x3fffffff isShared = bool(typeStuff & 0x40000000) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index e16cd7f1610..d0f76a352b5 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -4003,7 +4003,7 @@ void tst_Dumpers::dumper_data() //+ Check("this.@1.@1", "[@QObject]", "\"This is thread #3\"", "@QObject"); - QTest::newRow("QVariant") + QTest::newRow("QVariant1") << Data("#include \n" "#include \n" "#include \n" @@ -4017,9 +4017,7 @@ void tst_Dumpers::dumper_data() "QVariant v0;\n\n" - "QVariant::Type t1 = QVariant::String;\n" - "QVariant v1 = QVariant(t1, (void*)0);\n" - //"*(QString*)v1.data() = QString(\"Some string\");\n\n" + "QVariant v1 = QVariant(QString(\"A string\"));\n" "MyType my;\n" "my[1] = (QStringList() << \"Hello\");\n" @@ -4033,7 +4031,7 @@ void tst_Dumpers::dumper_data() "list << 1 << 2 << 3;\n" "QVariant v3 = QVariant::fromValue(list);", - "&my, &v0, &v1, &v2, &t, &s, &list, &v3, &t1") + "&my, &v0, &v1, &v2, &t, &s, &list, &v3") + CoreProfile() From 6efb484868a9d3efbb5dab51911b248f94139f56 Mon Sep 17 00:00:00 2001 From: Knud Dollereder Date: Wed, 2 Dec 2020 14:55:00 +0100 Subject: [PATCH 23/31] Create zoomaction widget for the live-preview Fixes: QDS-3203 Change-Id: I460fdc5882ff22c6a8c590402e0efe06dece435a Reviewed-by: Thomas Hartmann --- .../components/componentcore/zoomaction.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp index 024dd605028..af4f6edac82 100644 --- a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp +++ b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp @@ -113,14 +113,9 @@ double ZoomAction::setPreviousZoomFactor(double zoom) return zoom; } -bool parentIsFormEditor(QWidget *parent) +bool parentIsToolBar(QWidget *parent) { - while (parent) { - if (qobject_cast(parent)) - return true; - parent = qobject_cast(parent->parent()); - } - return false; + return qobject_cast(parent) != nullptr; } QComboBox *createZoomComboBox(QWidget *parent) @@ -135,7 +130,7 @@ QComboBox *createZoomComboBox(QWidget *parent) QWidget *ZoomAction::createWidget(QWidget *parent) { - if (!m_combo && parentIsFormEditor(parent)) { + if (!m_combo && parentIsToolBar(parent)) { m_combo = createZoomComboBox(parent); m_combo->setProperty("hideborder", true); m_combo->setCurrentIndex(indexOf(1.0)); From 8e0780e28c0ca138744466725c8de8820db2fa94 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 1 Dec 2020 11:53:35 +0100 Subject: [PATCH 24/31] Debugger: Fix QHash dumper for empty containers Task-number: QTCREATORBUG-24098 Change-Id: I2bf15504ffefdb458a5d93c9185f8b695f120189 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/qttypes.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 95a1280c8e1..cfc9bd4178e 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -885,6 +885,10 @@ def qdumpHelper_QHash_5(d, value, keyType, valueType): def qdumpHelper_QHash_6(d, value, keyType, valueType): dptr = d.extractPointer(value) + if dptr == 0: + d.putItemCount(0) + return + ref, _, size, buckets, seed, spans = d.split('i@qqqp', dptr) d.check(0 <= size and size <= 100 * 1000 * 1000) From b1f5bfdd4ec8c2e7a71d5841753f3d00bbad727c Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 1 Dec 2020 13:56:28 +0100 Subject: [PATCH 25/31] Debugger: Fix compilation of manual dumper test with Qt 6 Task-number: QTCREATORBUG-24098 Change-Id: Id835f4d9ac85e701cc57290e686f17a57ee221e2 Reviewed-by: Christian Stenger --- .../manual/debugger/simple/simple_test_app.cpp | 17 +++++------------ .../manual/debugger/simple/simple_test_app.pro | 6 +++++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/tests/manual/debugger/simple/simple_test_app.cpp b/tests/manual/debugger/simple/simple_test_app.cpp index db3f531ac50..5d782d4190e 100644 --- a/tests/manual/debugger/simple/simple_test_app.cpp +++ b/tests/manual/debugger/simple/simple_test_app.cpp @@ -4017,12 +4017,14 @@ namespace qstring { void testQStringRef() { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QString str = "Hello"; QStringRef ref(&str, 1, 2); BREAK_HERE; // Check ref "el" QStringRef. // Continue. dummyStatement(&str, &ref); +#endif } void testQString() @@ -4067,10 +4069,7 @@ namespace formats { { const wchar_t *w = L"aöa"; QString u; - if (sizeof(wchar_t) == 4) - u = QString::fromUcs4((uint *)w); - else - u = QString::fromUtf16((ushort *)w); + u = QString::fromWCharArray(w); BREAK_HERE; // Check u "aöa" QString. // CheckType w wchar_t *. @@ -4270,12 +4269,9 @@ namespace qvariant { void testQVariant1() { QVariant value; - QVariant::Type t = QVariant::String; - value = QVariant(t, (void*)0); - *(QString*)value.data() = QString("Some string"); + value = QVariant(QString("Some string")); int i = 1; BREAK_HERE; - // Check t QVariant::String (10) QVariant::Type. // Check value "Some string" QVariant (QString). // Continue. @@ -5360,10 +5356,7 @@ namespace basic { // Windows: Select UTF-16 in "Change Format for Type" in L&W context menu. // Other: Select UCS-6 in "Change Format for Type" in L&W context menu. - if (sizeof(wchar_t) == 4) - u = QString::fromUcs4((uint *)w); - else - u = QString::fromUtf16((ushort *)w); + u = QString::fromWCharArray(w); // Make sure to undo "Change Format". dummyStatement(s, w, &ww, &cw, &cc, &cs); diff --git a/tests/manual/debugger/simple/simple_test_app.pro b/tests/manual/debugger/simple/simple_test_app.pro index fa3be4deda9..af8e8895721 100644 --- a/tests/manual/debugger/simple/simple_test_app.pro +++ b/tests/manual/debugger/simple/simple_test_app.pro @@ -6,9 +6,13 @@ DESTDIR = . SOURCES += simple_test_app.cpp -QT += network xml +QT += network !isEmpty(QT.script.name): QT += script +greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat +else: QT += xml + + osx { DEFINES += USE_CXX11 QMAKE_CXXFLAGS += -stdlib=libc++ From 08a1117c26b29fe5f4e22a503fd4f9438195d81a Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 1 Dec 2020 13:15:29 +0100 Subject: [PATCH 26/31] Debugger: Extend and fix QPolygon dumper and test for Qt6 Task-number: QTCREATORBUG-24098 Change-Id: Ia2e43d15263e18698d9db6b4d23fa553c7b7ae5b Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 10 ++++++---- tests/auto/debugger/tst_dumpers.cpp | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 1da2b3a550e..8dcf92cbda6 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -556,9 +556,10 @@ class DumperBase(): return size, limit def vectorData(self, value): - vector_data_ptr = self.extractPointer(value) - # vector_data_ptr is what is e.g. stored in a QVector's d_ptr. - if self.qtVersion() >= 0x050000: + if self.qtVersion() >= 0x060000: + data, size, alloc = self.qArrayData(value) + elif self.qtVersion() >= 0x050000: + vector_data_ptr = self.extractPointer(value) if self.ptrSize() == 4: (ref, size, alloc, offset) = self.split('IIIp', vector_data_ptr) else: @@ -566,6 +567,7 @@ class DumperBase(): alloc = alloc & 0x7ffffff data = vector_data_ptr + offset else: + vector_data_ptr = self.extractPointer(value) (ref, alloc, size) = self.split('III', vector_data_ptr) data = vector_data_ptr + 16 self.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000) @@ -708,7 +710,7 @@ class DumperBase(): return self.encodedUtf16ToUtf8(self.encodeString(value, limit)) def stringData(self, value): # -> (data, size, alloc) - return self.qArrayData(value) + return self.qArrayData(value) def extractTemplateArgument(self, typename, position): level = 0 diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index d0f76a352b5..5a08803e264 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -7442,6 +7442,8 @@ void tst_Dumpers::dumper_data() "QApplication app(argc, argv);\n" "QGraphicsScene sc;\n" + "QPolygon p0;\n" + "QPolygonF p1;\n" "QPolygonF pol;\n" "pol.append(QPointF(1, 2));\n" "pol.append(QPointF(2, 2));\n" @@ -7454,6 +7456,8 @@ void tst_Dumpers::dumper_data() + GuiProfile() + + Check("p0", "<0 items>", "@QPolygon") + + Check("p1", "<0 items>", "@QPolygonF") + Check("pol", "<5 items>", "@QPolygonF") + Check("p", "<5 items>", "@QGraphicsPolygonItem"); From 3838bb4e0810209106c1846c406c84ba822c4eb8 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 2 Dec 2020 18:55:37 +0100 Subject: [PATCH 27/31] QmlJS: Fix resolving of implicit dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the QtQuick import was less than 2.15 implicit dependencies were not properly resolved. For example if a type from a module derives from QtQml.QtObject. Change-Id: I42a3320ee91496da0991de2018efcd124d56f6cd Reviewed-by: Henning Gründl Reviewed-by: Fawzi Mohamed --- src/libs/qmljs/qmljslink.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index cdd60967b76..32e916eb89d 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -492,8 +492,11 @@ bool LinkPrivate::importLibrary(const Document::Ptr &doc, for (const auto &toImport : libraryInfo.imports()) { QString importName = toImport.module; ComponentVersion vNow = toImport.version; - // there was a period in which no version == auto, should we add || !vNow.isValid() to the if? - if (toImport.flags & QmlDirParser::Import::Auto) + /* There was a period in which no version == auto + * Required for QtQuick imports less than 2.15 + */ + if ((toImport.flags & QmlDirParser::Import::Auto) + || !vNow.isValid()) vNow = version; Import subImport; subImport.valid = true; From bfba7a1e077239f2a6c41a16857322544c26a4ac Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 23 Nov 2020 15:58:00 +0100 Subject: [PATCH 28/31] Doc: Fix commas Change-Id: I55f18d0cabc35c345bc382118d4fc59cf69813bc Reviewed-by: Nico Vertriest --- .../components/qqs-components-border.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/qtdesignstudio/src/qtquickdesigner-components/components/qqs-components-border.qdoc b/doc/qtdesignstudio/src/qtquickdesigner-components/components/qqs-components-border.qdoc index a49d4533c9c..93ce98cb5ad 100644 --- a/doc/qtdesignstudio/src/qtquickdesigner-components/components/qqs-components-border.qdoc +++ b/doc/qtdesignstudio/src/qtquickdesigner-components/components/qqs-components-border.qdoc @@ -30,7 +30,7 @@ \inherits ShapePath \ingroup qtquickstudio-components - \brief A border drawn in four segments: left, top right, and bottom. + \brief A border drawn in four segments: left, top, right, and bottom. The Border type is used to create borders out of four segments: left, top, right, and bottom. The \l drawLeft, \l drawTop, \l drawRight, and @@ -48,7 +48,7 @@ The \l joinStyle property specifies how to connect two border line segments. - The \l strokeColor, \l strokeWidth, and \l strokeStyle, properties specify + The \l strokeColor, \l strokeWidth, and \l strokeStyle properties specify the appearance of the border line. The \l dashPattern and \l dashOffset properties specify the appearance of dashed lines. From 3a6e4860c4cec9cb17ef9d40fd25be0045e2fe43 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 30 Nov 2020 17:33:54 +0100 Subject: [PATCH 29/31] Wizards: Delay validity check in LineEditField MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... until the values have actually been set up. Fixes: QTCREATORBUG-24971 Change-Id: Ia967fe95545eda1c9044faf8ab1ee885bf3d9e02 Reviewed-by: Christian Stenger Reviewed-by: André Hartmann --- src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index 0985dd80715..1fa94bf97d3 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -568,12 +568,8 @@ void LineEditField::setup(JsonFieldPage *page, const QString &name) bool LineEditField::validate(MacroExpander *expander, QString *message) { - if (!JsonFieldPage::Field::validate(expander, message)) - return false; - if (m_isValidating) return true; - m_isValidating = true; auto w = qobject_cast(widget()); @@ -594,9 +590,9 @@ bool LineEditField::validate(MacroExpander *expander, QString *message) m_currentText = w->text(); } + const bool baseValid = JsonFieldPage::Field::validate(expander, message); m_isValidating = false; - - return !w->text().isEmpty(); + return baseValid && !w->text().isEmpty(); } void LineEditField::initializeData(MacroExpander *expander) From ff2322ac0bd2a801c61746254afd0a1df4cb3e4b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 2 Dec 2020 10:20:19 +0100 Subject: [PATCH 30/31] CPlusPlus: Fix mis-classification of pure virtuals Syntactically, they do have an initializer, but they are not initializations. Change-Id: I0556b279ce2d173868585cbce085b803c1cff285 Reviewed-by: Christian Stenger --- src/libs/cplusplus/FindUsages.cpp | 5 ++++- .../cplusplus/findusages/tst_findusages.cpp | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp index d19137cfaeb..b8b9a4e81e5 100644 --- a/src/libs/cplusplus/FindUsages.cpp +++ b/src/libs/cplusplus/FindUsages.cpp @@ -402,8 +402,11 @@ Usage::Type FindUsages::getType(int line, int column, int tokenIndex) } if (const auto declarator = (*it)->asDeclarator()) { if (containsToken(declarator->core_declarator)) { - if (declarator->initializer) + if (declarator->initializer && (!declarator->postfix_declarator_list + || !declarator->postfix_declarator_list->value + || !declarator->postfix_declarator_list->value->asFunctionDeclarator())) { return Usage::Type::Initialization; + } return Usage::Type::Declaration; } if (const auto decl = (*(it + 1))->asSimpleDeclaration()) { diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp index 71d09f6c619..ac339205fde 100644 --- a/tests/auto/cplusplus/findusages/tst_findusages.cpp +++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp @@ -2033,6 +2033,8 @@ struct S { void nonConstFunc(); static void staticFunc1() {} static void staticFunc2(); + virtual void pureVirtual() = 0; + virtual void pureVirtual2() = 0 {} }; void func1(int &); void func2(const int &); @@ -2112,7 +2114,7 @@ int main() Class * const structS = doc->globalSymbolAt(0)->asClass(); QVERIFY(structS); QCOMPARE(structS->name()->identifier()->chars(), "S"); - QCOMPARE(structS->memberCount(), 11); + QCOMPARE(structS->memberCount(), 13); Declaration * const sv = structS->memberAt(1)->asDeclaration(); QVERIFY(sv); @@ -2164,6 +2166,20 @@ int main() QCOMPARE(find.usages().at(0).type, Usage::Type::Write); QCOMPARE(find.usages().at(1).type, Usage::Type::Declaration); + // Make sure that pure virtual declaration is not mistaken for an assignment. + Declaration * const pureVirtual = structS->memberAt(11)->asDeclaration(); + QVERIFY(pureVirtual); + QCOMPARE(pureVirtual->name()->identifier()->chars(), "pureVirtual"); + find(pureVirtual); + QCOMPARE(find.usages().size(), 1); + QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); + Function * const pureVirtual2 = structS->memberAt(12)->asFunction(); + QVERIFY(pureVirtual2); + QCOMPARE(pureVirtual2->name()->identifier()->chars(), "pureVirtual2"); + find(pureVirtual2); + QCOMPARE(find.usages().size(), 1); + QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); + Function * const main = doc->globalSymbolAt(6)->asFunction(); QVERIFY(main); QCOMPARE(main->memberCount(), 1); From f946e5b356e9337f781af740078872233ad17640 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 30 Nov 2020 16:40:54 +0100 Subject: [PATCH 31/31] Debugger: Consolidate some string data extraction helper functions Change-Id: Icfa395de5237e0f58e63b3ca0d88ff8c9a1998a9 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 36 +++++++----------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 8dcf92cbda6..b2d6e78755f 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -575,9 +575,9 @@ class DumperBase(): def qArrayData(self, value): if self.qtVersion() >= 0x60000: - dd, data, size = self.split('ppi', value) + dd, data, size = self.split('ppp', value) if dd: - alloc, i, i = self.split('Pii', dd) + _, _, alloc = self.split('iip', dd) else: # fromRawData alloc = size return data, size, alloc @@ -620,18 +620,12 @@ class DumperBase(): data = self.extractPointer(array_data_ptr + self.ptrSize()) return data, size, alloc - # addr is the begin of a QByteArrayData structure def encodeStringHelper(self, value, limit): - addr = self.extractPointer(value) - # Should not happen, but we get it with LLDB as result - # of inferior calls - if addr == 0: - return 0, '' data, size, alloc = self.qArrayData(value) if alloc != 0: self.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) - elided, shown = self.computeLimit(size, limit) - return elided, self.readMemory(data, 2 * shown) + elided, shown = self.computeLimit(2 * size, 2 * limit) + return elided, self.readMemory(data, shown) def encodeByteArrayHelper(self, value, limit): data, size, alloc = self.qArrayData(value) @@ -692,16 +686,8 @@ class DumperBase(): self.putValue(data, 'latin1', elided=elided) def encodeString(self, value, limit=0): - if self.qtVersion() >= 0x60000: - dd, ptr, size = self.split('ppi', value) - if not dd: - return "" - elided, shown = self.computeLimit(2 * size, 2 * self.displayStringLimit) - data = self.readMemory(ptr, shown) - return data - else: - elided, data = self.encodeStringHelper(value, limit) - return data + elided, data = self.encodeStringHelper(value, limit) + return data def encodedUtf16ToUtf8(self, s): return ''.join([chr(int(s[i:i + 2], 16)) for i in range(0, len(s), 4)]) @@ -746,14 +732,8 @@ class DumperBase(): return inner def putStringValue(self, value): - if self.qtVersion() >= 0x60000: - dd, ptr, size = self.split('ppi', value) - elided, shown = self.computeLimit(2 * size, 2 * self.displayStringLimit) - data = self.readMemory(ptr, shown) - self.putValue(data, 'utf16', elided=elided) - else: - elided, data = self.encodeStringHelper(value, self.displayStringLimit) - self.putValue(data, 'utf16', elided=elided) + elided, data = self.encodeStringHelper(value, self.displayStringLimit) + self.putValue(data, 'utf16', elided=elided) def putPtrItem(self, name, value): with SubItem(self, name):