From 1150c8693d240dca820c99698fe33a00417efe48 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Mon, 21 Nov 2022 17:31:56 +0100 Subject: [PATCH 1/3] uppercase gadget registrations when having enums only --- qmlexport/QskQml.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/qmlexport/QskQml.cpp b/qmlexport/QskQml.cpp index 509d3a79..4b8bd6c8 100644 --- a/qmlexport/QskQml.cpp +++ b/qmlexport/QskQml.cpp @@ -125,11 +125,9 @@ namespace #if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) registerUncreatableType< T >( className ); #else - // the class name without the "Qsk" prefix - /* According to the QML naming rules uncreatables have to - start with a lowercase letter ( since Qt6 ) , while namespaces + start with a lowercase letter ( since Qt6 ), while namespaces and creatable items usually start with a upper letter. This results in an odd naming scheme for the enums defined inside of gadgets. @@ -140,7 +138,11 @@ namespace enums are removed from the first and everything else than the enums from the second. TODO ... */ - registerUncreatableMetaObject( T::staticMetaObject, className ); + + if ( T::staticMetaObject.enumeratorCount() > 0 ) + { + registerUncreatableMetaObject( T::staticMetaObject, className ); + } QByteArray name = className; name.data()[0] = std::tolower( name.data()[0] ); From bfdecc04138a2f065ce56df920217f5925b54afc Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 24 Nov 2022 09:06:39 +0100 Subject: [PATCH 2/3] using qvg files to get rid of the qsvg dependency --- examples/iotdashboard/GraphicProvider.cpp | 28 +++------------ examples/iotdashboard/images.qrc | 34 +++++++++--------- examples/iotdashboard/images/qvg/ac.qvg | Bin 0 -> 6031 bytes .../iotdashboard/images/qvg/dashboard.qvg | Bin 0 -> 4171 bytes examples/iotdashboard/images/qvg/devices.qvg | Bin 0 -> 3855 bytes examples/iotdashboard/images/qvg/down.qvg | Bin 0 -> 935 bytes examples/iotdashboard/images/qvg/humidity.qvg | Bin 0 -> 5235 bytes .../images/qvg/indoor-temperature.qvg | Bin 0 -> 3591 bytes examples/iotdashboard/images/qvg/lamps.qvg | Bin 0 -> 3603 bytes examples/iotdashboard/images/qvg/logout.qvg | Bin 0 -> 4547 bytes .../iotdashboard/images/qvg/main-icon.qvg | Bin 0 -> 7699 bytes examples/iotdashboard/images/qvg/members.qvg | Bin 0 -> 3895 bytes .../iotdashboard/images/qvg/music-system.qvg | Bin 0 -> 9055 bytes examples/iotdashboard/images/qvg/rooms.qvg | Bin 0 -> 1435 bytes examples/iotdashboard/images/qvg/router.qvg | Bin 0 -> 6919 bytes .../iotdashboard/images/qvg/statistics.qvg | Bin 0 -> 1635 bytes examples/iotdashboard/images/qvg/storage.qvg | Bin 0 -> 2095 bytes examples/iotdashboard/images/qvg/up.qvg | Bin 0 -> 935 bytes examples/iotdashboard/iotdashboard.pro | 3 -- 19 files changed, 21 insertions(+), 44 deletions(-) create mode 100644 examples/iotdashboard/images/qvg/ac.qvg create mode 100644 examples/iotdashboard/images/qvg/dashboard.qvg create mode 100644 examples/iotdashboard/images/qvg/devices.qvg create mode 100644 examples/iotdashboard/images/qvg/down.qvg create mode 100644 examples/iotdashboard/images/qvg/humidity.qvg create mode 100644 examples/iotdashboard/images/qvg/indoor-temperature.qvg create mode 100644 examples/iotdashboard/images/qvg/lamps.qvg create mode 100644 examples/iotdashboard/images/qvg/logout.qvg create mode 100644 examples/iotdashboard/images/qvg/main-icon.qvg create mode 100644 examples/iotdashboard/images/qvg/members.qvg create mode 100644 examples/iotdashboard/images/qvg/music-system.qvg create mode 100644 examples/iotdashboard/images/qvg/rooms.qvg create mode 100644 examples/iotdashboard/images/qvg/router.qvg create mode 100644 examples/iotdashboard/images/qvg/statistics.qvg create mode 100644 examples/iotdashboard/images/qvg/storage.qvg create mode 100644 examples/iotdashboard/images/qvg/up.qvg diff --git a/examples/iotdashboard/GraphicProvider.cpp b/examples/iotdashboard/GraphicProvider.cpp index 45e777de..acdec602 100644 --- a/examples/iotdashboard/GraphicProvider.cpp +++ b/examples/iotdashboard/GraphicProvider.cpp @@ -6,10 +6,8 @@ #include "GraphicProvider.h" #include +#include -#include -#include -#include #include const inline QString pathName( const QString& baseName, const QString& suffix ) @@ -23,7 +21,7 @@ const inline QString pathName( const QString& baseName, const QString& suffix ) const QskGraphic* GraphicProvider::loadGraphic( const QString& id ) const { - static QString scope = QStringLiteral( ":/images/" ); + static QString scope = QStringLiteral( ":/images/qvg/" ); QString baseName = scope; baseName += id.toLower().replace( ' ', '-' ); @@ -31,30 +29,12 @@ const QskGraphic* GraphicProvider::loadGraphic( const QString& id ) const auto path = pathName( baseName, QString() ); if ( path.isEmpty() ) - path = pathName( baseName, ".png" ); - - if ( path.isEmpty() ) - path = pathName( baseName, ".svg" ); + path = pathName( baseName, ".qvg" ); QskGraphic graphic; if ( !path.isEmpty() ) - { - if ( path.endsWith( ".png" ) ) - { - graphic = QskGraphic::fromImage( QImage( path ) ); - } - else - { - QSvgRenderer renderer; - if ( renderer.load( path ) ) - { - QPainter painter( &graphic ); - renderer.render( &painter ); - painter.end(); - } - } - } + graphic = QskGraphicIO::read( path ); return graphic.isNull() ? nullptr : new QskGraphic( graphic ); } diff --git a/examples/iotdashboard/images.qrc b/examples/iotdashboard/images.qrc index 38a9148a..8026b261 100644 --- a/examples/iotdashboard/images.qrc +++ b/examples/iotdashboard/images.qrc @@ -1,20 +1,20 @@ - - images/main-icon.svg - images/dashboard.svg - images/rooms.svg - images/devices.svg - images/statistics.svg - images/storage.svg - images/members.svg - images/logout.svg - images/indoor-temperature.svg - images/humidity.svg - images/up.svg - images/down.svg - images/lamps.svg - images/music-system.svg - images/ac.svg - images/router.svg + + images/qvg/main-icon.qvg + images/qvg/dashboard.qvg + images/qvg/rooms.qvg + images/qvg/devices.qvg + images/qvg/statistics.qvg + images/qvg/storage.qvg + images/qvg/members.qvg + images/qvg/logout.qvg + images/qvg/indoor-temperature.qvg + images/qvg/humidity.qvg + images/qvg/up.qvg + images/qvg/down.qvg + images/qvg/lamps.qvg + images/qvg/music-system.qvg + images/qvg/ac.qvg + images/qvg/router.qvg diff --git a/examples/iotdashboard/images/qvg/ac.qvg b/examples/iotdashboard/images/qvg/ac.qvg new file mode 100644 index 0000000000000000000000000000000000000000..56ba511624be271583d723f79e913a237a787b59 GIT binary patch literal 6031 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 M=KL2f_jD@%1}zHM3IG5A literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/devices.qvg b/examples/iotdashboard/images/qvg/devices.qvg new file mode 100644 index 0000000000000000000000000000000000000000..aefe593523f46b64d7a0083e5b9ceacf95cd66a2 GIT binary patch literal 3855 zcmds)dr(wW9LMiHmxf2cvMekQSy-OBiz6aBXbs$-8JiCVCD=hhr5r1avIa%Sv|S)W z37lyLMk2`2UL_uM@z`)BnBX9n)QpZj}! zf4@EF-g8samc7JroQHq}ZUrX};&VKBetdl5j8hoBe)>p#p62wL-UkZUqm*c3{CkOT zd}k@gi_$;P8Jo*i-)WQ1<-v=?=G5Nu4KWnpBNG3NY`GgdQZFX18v3p-W@$SZZ zi8+C_;>qLR6lovy5O#I#Cp$WCZ58Ds@s;mWdtxWYp>ZXK|HxqS^OS+XcU9{z+jih< zL^Xin>eBE9Ck8MRs0J{8sx6I1?u5x2AUaZAdozES_{y3g`q22Eh|TH5POc52$B%D0 z-L`-*xd$*4Urh|2_KIN$g4-)in~E;6zMv0KFMhK3BAWyB4bQ5kADhi;fzVi|9^7eG zGlW`Bwms73v9&>{l_+3(z*ENb3Q=FSr!)uKd#Z)~ji_eYN1RZgwb6bPHhI2qRD;;x z^!4z!E&H*Z(kq7HUil{<$oSsEFr4FYT%IniQ@m4mE%?1R&XODI06LBVQX+);<_}=-N`&KEn{z%rJr04#via>oI{}kUHew3yd#^4Bg&c zh8d#00>jueml~8$?Bsa@hVrl+*X}BNrmS;YZPU$)KBWha81sx!?3f&M4zXH5o@=aT zIw#rM=-g#{pga$3{foo3@B)66O`UfI_YAIy1L=v1hd9)9q@gqG1$@ebFF}skW6o_` zW=9^eqrQ%qEuIu?YWB{{ygWYthz4d@r5dHdgLe~I!w#8Y;vTW1zK)nJ9*H@{=AB9^ z3fxX??_M}B9fHcreUq!RNl!dI^auA1W%~v<`!PeHT31_8lbZ^<-9alOv!uO* z0A7_5*_oH$1YO(;*O^^!5vI11dC4#Y-noDLy=ZI=!vxTzbm%VZ3$cr*87=0|XV)-! z@fz5B@tqG6bc{X(KBcFZtvRhYk#tfH@Po3&6Ha|6LY|MQ+Q#s`z{E)ofQ7al7j0*;Pzp-s>^x}0#*-o zRdxT4nE;;6??$0BF5q7@FFk*MAYp3DNZ7G~W`-fqG|iv0W%C7w3E=w!*?-u@^E0j8 z6_%!E^77z6AZ=j^At2#lds4l$UqPV#D|YL-lu__ARaK2$d7b3-SzLeP=={$>8-26y z*PWeqT5Jq~$HqMs%WphyXXoNqm|-|vWEamV%38N1wS>vb!{ol;G*fO4xJpHVsx{$Y z#c%`Y{j77}KGiGL32Mt=Qo&_2=t(sAsg6?D>^=Hip3K*2lf;3OelUyp}Y)W@)dni#J)HB%7DM8&j2U Q#Q*KPk^2umP;oivADr}>MF0Q* literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/down.qvg b/examples/iotdashboard/images/qvg/down.qvg new file mode 100644 index 0000000000000000000000000000000000000000..71e37f4efd771d90236e5b5b9c77bf87f4875376 GIT binary patch literal 935 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 K3omB49PTfps07>q literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/lamps.qvg b/examples/iotdashboard/images/qvg/lamps.qvg new file mode 100644 index 0000000000000000000000000000000000000000..42adabc6cb8b57219357b2c7f78677a22caea7fd GIT binary patch literal 3603 zcmWFx_I77rU=U_zVrB?nu>SyL0|6uB|Njsc16&NoN2g(W(8XbVn7ji_0GS3^l#q~? zR$59ui-6{{gX|Cl5f0W_ai;b)?;NZI7w741JOUJAaTc8-T zgK2cQ-DgIo#yuBb#Uc zjX~tc){e(W_A+8|3xfm94&BpCJf6Ga!0t1C>~<$Mxx+#Cw$g>C2~J?QSS)G(vr~Do zgVB!3C3~{!!D5zA9`Csv)#hL!xbpY&oNk~Pql3kI_1*e!!W}FkTrLQ&)B>AlJ|Wa7 zu|~$hxIc8ZE&B`gv42;#^jbY@1Bx*_=xN5yljfM^zzkQ% z439^I7?Xo`cI=ttkB%tnwERy07TsE6k8B=H4B1|o*u#?v28ZldgYAWy2V}zl++LUf zkY<9p4@ry}?hj=1F#QYCGTh>p733)g?VcI&Y~Q9h*mGR@`+1ui$e#{+9ENHyE3RS{ z1LZmhV1(<%CWbH%q zr{Lkls|qe#z+nPQcN%xYa=yqb0>zjdbmx22pPppppmFW5;(t9)pcu1*uCasPk`)IX zG%nwr{!Kd@ECwr&5n@aZI*B#Xw*sY5)M0}{y^vjDjlYIz#?rcH^2IB2fKYgLA5f-pAMGpmCJyl z4z~9^UM!b=4i>XH<<%qVGsD4Q!vx(2ywYGX>z6ZuV3vcU0#Mnr*mSYU^5XI z?wIBQg@;cZ+d*PL3x literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/logout.qvg b/examples/iotdashboard/images/qvg/logout.qvg new file mode 100644 index 0000000000000000000000000000000000000000..9213e3c33b3a907aaa990e45aed25f1a198e09be GIT binary patch literal 4547 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 BwJiVu literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/members.qvg b/examples/iotdashboard/images/qvg/members.qvg new file mode 100644 index 0000000000000000000000000000000000000000..b6170fdc1037dd70ed20bcaa92eb40ebbc463070 GIT binary patch literal 3895 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 To0I>yzeCadAN;`!E=Ttt(vSL+ literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/rooms.qvg b/examples/iotdashboard/images/qvg/rooms.qvg new file mode 100644 index 0000000000000000000000000000000000000000..d0bb7001ce05d7793f8e0835c23f39af445e869c GIT binary patch literal 1435 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 literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/statistics.qvg b/examples/iotdashboard/images/qvg/statistics.qvg new file mode 100644 index 0000000000000000000000000000000000000000..c43fb5480f0775c9c6da3537d14a14a3b1af661f GIT binary patch literal 1635 zcmWFx_I77rU|?ouVrB?nu>SyL0|6uB|Njsc16&NoN2g(W(8XbVn7ji_0GS3^1Oe2u z2xvY#$POD2;h;V3#1_j40SAQ@Azic2Uj+&=I%vEru=-s$5u2F(Dc?NzJLXG(>X=~a z?6>!cXhr7V1Bx*_XzWkgwyrh|$c6!+SgRY?G9Lq&0FY*MP*E1jo8B9MB*x^R{Nl56 z#cEz8F=hwlowt=PJWW8c115%W3nNS&iklT?`D$zb-HKI=R8zL zpHxoV0~BL+P{=mbYO&ySVD?;~9u$%Y5i=Cm`>-w;NsQ4!eD1|Xa*HF8#F!k!HK(rn z-v1s+jM+i#bn40#EYlp2?SPBH-NFc0ha4XQJ)XPbOzlzp0Tbihbma<@w+YxEFfpD} zh4(VoI)mLTpeMPLZ{>3b9zG^Tr~Kz&G5+G+&F6J~B8f5D|Gvf|F}Y+9k{FZyFIExj z@9M%xV$AkGdP2;0{M_h(WCvUf;TA@?n8J#H**}kI0qtdkr5&I@U}8-6+k3oJ_x@jn zB*qL>3kD7f*K@j^r#1pP2r)&$wi%|PJwP!gh$>(jR`g!5RBh@skUF?|idB226r{Wb zi$T+g144`up6(H1Ob*(>gyz_3j--y+K?h`<~c|d*v^{j zB!g9qZE^so&iNd$9WcGv#E|XKkm1{Re~AN%c`8`aE>z6^mTytzEcuIIJD_^8i6NP1 Y4pIv$iv!{1F5Svv1{xIlK<_XC00h>ikpKVy literal 0 HcmV?d00001 diff --git a/examples/iotdashboard/images/qvg/storage.qvg b/examples/iotdashboard/images/qvg/storage.qvg new file mode 100644 index 0000000000000000000000000000000000000000..1313ee76d39093637086380ce27a45a8df8f39cd GIT binary patch literal 2095 zcmciDdsGxv7y$5{ne~wf!UFP?6m}67!VU>35AP=lxFN!_5-8#$O)yA7F-1cZQ4A1* zgJBBff#V?sL_LyG9a&MbNKrawDX#@q<*__AVNEgU&gioDNPkxI$Ii@ezx&;p`R+q1 z3-IUhcnm``ykH(0#Mk(ssIjpZSG;l4-oJX*wt3aH_uBtK3*?#Y=*98xb%gUzVf&D= zKj5_eNyELFX<&FJsNUynBPJTeDz73{&3Q10_v~(q?i2*PNv4D2X(waq1r0gLFSjPiJW^w^h87|rD~zx=J5 zcK1YsTTQiq&lJ+2w9P7KC1Et`9Nr|E=B7^=gZ!)vylo;wQ0IW6K`+Mz|EDvJ zL>Y8ax`fO3G7fCVqK2Btg>ej2t93YKUn9( zSz~Pe@3$6agYYu1@sim}wk>L3)?SwqdJaUp620#wZ{XtklL7|6SXBukWr8g0aUf@! zeIs9`e0Z8L3hYw%8vnS*nHr~uWJ4Q znSkAZB7NXO88!->+Wt^xrEde%f}O`>g3n{4!P#z-%-*aPjJsFNkuP!J+B%KME!{hM zL14}INo{L*VH3tK4=MabS6d&YAl>()$F1+R_vCknec851HB|Yl?_wEJMAUztQyR&c z#`WWb#tm+SQQG#_!-GwzGvrQSeHK?sFu5{xzF+8ux;{PE zFBvw&eNbQ)92hz)`a06Y&nXMoR)>uS^VNBA8&y5%S@9zC%?G6Hvw+1F*Qzz@QS^L3 zyvnbT9dpe1xYrp4A~`N=cn1+jgMIZjf8PZIgfTETHIVYiEdi={_*kKueHNYR<|Q>A zr<>;#Ois=hCdjghIZXpqcw>Wl@od5v^z4GU>B&8AFas|h5n+h!13mf9aHrqlJs^-Y zYN*5{Y!p&BKaE_TeGY7{a&;z+s2h%(P)i<&m3q4vzh*F{FV5I>iv3o2&6(N|=P{BD zcEx|~=-|go?NggRgUDzbdx`KLufU z{%%*iJ-s=NFdC`v3+7eCRuRUaUTJqMy5SyL0|6uB|Njsc16&NoN2g(W(8XbVn7ji_0GS3^G-=YD zIh!_7&my4t>>xWNL4<<{gHYtW>&NZ?P2F1jYI6oqh|xjuxP@%(eh&w+$;TKpKV}2P zm>d*;#BR^F-r*qj`NVvOMeRT_W(OtD)(`oaE)HTJ8@OtsjzGk!FRFMYsW^!B8<}@) zI0+PEbWpxI?N`%_S_k3B%Wp0Dvjix{_IQB=s zVey(&nhaJaTxqb6_pPS=RM~lD6*@@}F}G(o_xW5$vX{|*lf;+9-M6!m+{d(k=F1%W zBi4Gz{@6c#fyV#KU17-nwcl(zWg9D(Hd44S+P`q&xbbG{0i^I_vVWbiPrq9H9CA3@ zf3Tf3)k%g0IX>(^9=rIE Date: Thu, 24 Nov 2022 09:08:53 +0100 Subject: [PATCH 3/3] using c++ auto --- examples/qvgviewer/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/qvgviewer/main.cpp b/examples/qvgviewer/main.cpp index 458709e1..d2d55c23 100644 --- a/examples/qvgviewer/main.cpp +++ b/examples/qvgviewer/main.cpp @@ -22,7 +22,7 @@ int main( int argc, char* argv[] ) SkinnyShortcut::enable( SkinnyShortcut::AllShortcuts ); - QskFocusIndicator* focusIndicator = new QskFocusIndicator(); + auto focusIndicator = new QskFocusIndicator(); focusIndicator->setObjectName( "FocusIndicator" ); MainWindow window;