[RIJEŠENO] KDE - Kako dodati novi plasma widget?

Teme vezane za KDE grafičko okruženje.

Moderator/ica: Moderatori/ce

Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

prelaskom na openSUSE , leap 42.2, odustao sam od ove putanje , preko KDESRC-BUILD , naprosto sam pokupio 'project template' kako ga nudi KDEVELOP i na taj način manje brinem o usklađenosti verzija.

ajmo napraviti inventuru, kinfocenter daje

++ PLASMA 5.8.2
++ KF5 5.26.0
++ Qt_5.6.1
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

DISCLAIMER: iskusni sam programer (vidi potpis: preko 30 godina), ali u ovom području - plasma appleti - sam početnik

ajmo dodati python u torbu s alatima za izradu plasma appleta.

++ IDE: dopao mi se pyCharm alat i toplo ga preporučam !
++ PyQt5 dobra poveznica između Qt UI te python

ajmo dodati PyQt5.
++ prvi pokušaj preko repozitorija, koji dodaje paket python3-qt5 se slomio na zahtijevu da instaliram Qt_5.7 :hmm
neće moći, s tim sam se opekao, ajmo drugim putem
++ na stranici autora, riverbankcomputing.com , postoji dobra uputa

http://pyqt.sourceforge.net/Docs/PyQt5/ ... rom-source

skinuo sam oba kompresirana paketa ( sip te pyqt5 ) otpakirao, kompajlirao i instalirao prema uputi, najprije SIP

Kod: Označi sve

python configure.py
make
sudo make install
to je prošlo bez problema, ali kad sam zadao python configure.py naredbu u PyQt5 direktoriju , dobijem ovakav odgovor
Error: PyQt5 requires Qt v5.0 or later. You seem to be using v4.8.6. Use the --qmake flag to specify the correct version of qmake.
očito je da postoje dvije verzije: qt4 i qt5, samo trebamo naći ispravne putanje i dojaviti preko --qmake flaga, kako je rečeno. kako se nađe fajl na linuxu. znam da ide find ... nešto ali ajmo mi to zapisati , sutra ću opet zaboraviti

Kod: Označi sve

find / -xdev -name qmake 2>/dev/null
pojavi se nekoliko rezultata, ali ova dva su bitna
/usr/lib64/qt5/bin/qmake
/usr/bin/qmake
sad može proći konfiguracija pyQt5 , ovako

Kod: Označi sve

python configure.py --qmake=/usr/lib64/qt5/bin/qmake
dalje ide normalno

Kod: Označi sve

make
sudo make install
zapisat ću i ovaj link, popis klasa (biblija) u pyqt5 paketu

popis klasa pyQt5
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

XMLGUI je naziv za sekciju KF5 koja dodaje elemente forme - ovdje se to zove widget, u plasmi je sve widget - u toku izvođenja aplikacije. dizajner snima te podatke u rc fajl, koji mora biti dostupan za vrijeme izvođenja. to je lako za reći, ali nije jednostavno shvatiti kako ???

koristim IDE Kdevelop koji sve direktive za kompajler i linker stavlja u CMAKE fajl. recimo dodamo ovakve direktive u CMAKE , projekt se zove 'tapete'

Kod: Označi sve

install(TARGETS tapete  ${INSTALL_TARGETS_DEFAULT_ARGS})
install(FILES tapeteui.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/tapete)


install direktiva u suradnji s CMAKE_INSTALL_PREFIX direktivom kreira dva foldera: bin te share, u prvi ide sama aplikacija, u drugi ide rc fajl s xml opisom kontrola koje dodajete na formu. kad otvaram novi projekt u KDevelop definiram CMAKE prefix u $HOME folderu, što je normalno za razvojni ciklus projekta

sada pokrenemo aplikaciju u KDevelop-eru , ali na formi nema kontrola koje sam dodao ?! ako odem u bin ili share foldere vidim da je sve na svom mjestu, ali KF5 još uvijek ne zna gdje se nalazi rc fajl ?!

rješenje je u konfiguraciji lančera aplikacije. na KDeveloper meni RUN > CONFIGURE LAUNCHES potrebno je dodati environment varijablu

Kod: Označi sve

XDG_DATA_DIRS=$HOME/share:$XDG_DATA_DIRS 
slika

evo sada cjeline - kako složim sve elemente konfiguracije lančera za aplikaciju u KDEVELOP

slika
  • Executable = putanja u izvornom projektu , projekt se nalazi na putanji $HOME/projects
  • Working Directory = $HOME odnosno kamo ide instalacija (bin i share subfolderi se tamo dodaju)
  • Environment = taj detalj smo vidjeli na prethodnoj slici
  • Dependencies = nepotrebno za rc fajl ali ne škodi
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

sviđa mi se kako fejs šalje obavijesti o aktivnosti na KDE desktop, u blizini 'system tray' javi se mali 'pop-up' sa slikom korisnika i porukom. možemo li tu opciju dodati u našu torbu s alatima ?

danas sam uspio nešto slično, ili barem na tragu toga ;)

slika

za ovu poruku sam koristio klasu KStatusNotifierItem , zapravo metodu showMessage navedene klase. Ikona se poziva imenom ( dakle mora biti u temi ) a tekst je slobodan

nekoliko je zamjerki ovom alatu - javlja se desno dole , a ne pored 'sys-tray' - na mom ekranu panel sa 'sys-tray' je na lijevom rubu i tamo se obavijest bolje primjeti ( vrlo subjektivno , ali tako je ). najveća zamjerka je što koristi gotove ikone, dakle ne bi mogao pokazati sliku avatara, kako to radi fejs

... korak po korak, zadovoljan sam napretkom !
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

KF5 obavijesti u balončiću pored 'sys-tray' , drugi pokušaj
slika
danas sam 'nacrtao' ovaj balončić i sad je to već sasvim zadovoljavajuće !

klasa se zove KPassivePopup , metoda se zove message možeš podesiti sve što želiš
  • popupStyle = Baloon ili Boxed
  • caption = tekst poruke
  • text = tekst u footer-u
  • pixmap = slika ( jpg, png ... šta ti srce poželi )
  • parent = pointer
  • timeout = vrijeme, ako staviš 0 onda se ne miče s ekrana dok korisnik ne klikne
  • point(x,y) = gdje će se pojaviti na ekranu
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
hrvooje
Postovi: 286
Pridružen/a: 05 stu 2008, 14:40

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la hrvooje »

Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

hrvooje je napisao/la:Nije li PySide bolja opcija i s tehničke i s licenčne strane

http://askubuntu.com/questions/140740/s ... qt-project

https://wiki.qt.io/PySide-QtQuick-Tutorials
vrijedna informacija hrvoje - HVALA ::bravo

nisam nikad čuo za PySide, što ne čudi ako znaš da sam s python na Vi ( vi kao gospodine nepoznati, a ne kao vi linux editor ). :zamisljen

originalni widget koji me potakao na ovaj projekt jest bio u pythonu , ali sam u međuvremenu našao ovu stranicu za OAuth (najvažnija kvaka) koja otvara mnoga vrata (twiter, fejs) :

https://oauth.net/code/

na toj stranici je lijepo navedeno da postoji Qt projekt na GitHub stranici koji se odlično uklapa u moju priču:

https://github.com/pipacs/o2

o tome kako se koristi OAuth upravo učim, kad naučim, napisat ću ovdje kratku uputu. originalna ideja jest bila da 'bekend' servis bude u python, a 'fensi' widget da odradi QML , ali sam se zaželio dobrog starog C++ pa ću cijeli projekt napisati uz pomoć KF5 klasa.

a što se tiće licenci, tu sam potpuno izgubljen, ali ne marim previše - ovo sam izabrao kao rekreaciju, i ne razmišljam o prodaji, kad projekt bude gotov stavit ću ga negdje ( valjda GitHub )
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
hrvooje
Postovi: 286
Pridružen/a: 05 stu 2008, 14:40

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la hrvooje »

Hvala tebi na dijeljenim informacijama. Ja se učim Pythona pa možda i za mene bude nešto korisno, npr. kako napraviti svoj prvi widget. U Qt-u sam napravio par svojih programčića pri učenju Pythona, a PySide izabrao, jer je jednostavno za njega u tom trenutku bilo tutorijala. Inače, dokumentacija im je odlična
http://srinikom.github.io/pyside-docs/PySide/QtGui/
Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

uh uh koji gadan bug u CMAKE :twisted: :(

nakon što kopiram cijelu mapu /src od gore spomenutog projekta za OAuth u svoj projekt dobijem grešku
cmake fails with undefined reference to 'vtable in ...
nekoliko je sajtova koji dobro opisuju problem, recimo ovaj ovdje

https://stackoverflow.com/questions/197 ... ith-inc-sr

od svih predloženih 'obilaznica' meni se čini najbrži izlaz - NE KORISTIM sub-direktorije u CMAKE projektu - naprosto kopiram sve (cpp / h) fajlove u jedan (zajednićki) folder s glavnim projektom :zvizdi

DODATAK:
bizarni detalj, nakon premetanja svih fajlova, zaboravio sam CLEAN prije BUILD - greška stoji, frka-panika he he
sad to više nikad ne preskačem, prvo Clean onda Build !!!

ovo je bilo bolno uh uh ( qmake nema takvih problema, ali KF5 radi s CMAKE )
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Avatar
kepica
Postovi: 492
Pridružen/a: 26 svi 2012, 13:47
Spol: M
OS: openSUSE-kde
Lokacija: orahovica

Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?

Post Postao/la kepica »

postigao sam osnovnu funkcionalnost koju nudi OAuth protokol

rješenje je došlo u paketu s alatom koji sam naveo ranije - qt projekt s GitHub. još uvijek nisam shvatio kako trajno pohranim autorizacijski token i za sada moram svaki put proći cijeli ovaj ciklus
  • LINK naredba u mojoj aplikaciji otvori internet preglednik s Flickr stranicom
  • u pregledniku se prijavim kao redovni korisnik
  • potvrdim da mi je aplikacija poznata i odobravam pristup mojim podacima
  • preglednik me automatski prebaci na localhost s tokenom i secret kodom za autorizaciju
  • moja aplikacija pokupi te podatke za autorizaciju iz preglednika i sesija može započeti
  • sada mogu slati autorizirane upite prema flickr servisu
zar to mora tako ??? kad pokušam snimiti 'token i secret' on mi ne vrijedi za slijedeću sesiju :hmm
no dobro , ovo ću još provjeriti ... evo nekoliko uputa za korištenje

++ flickr koristi OAuth ver 1.0 stoga je od cijelog projekta kojeg sam skinuo s GitHub najkorisnija klasa O1. za iniciranje autorizacije ( kako je gore opisano ) dovoljno je ovo

Kod: Označi sve

    o1 = new O1(this);
    o1->setClientId(O1_KEY);
    o1->setClientSecret(O1_SECRET);

Kod: Označi sve

    o1->setRequestTokenUrl(QUrl("https://www.flickr.com/services/oauth/request_token"));
    o1->setAuthorizeUrl(QUrl("https://www.flickr.com/services/oauth/authorize?perms=write"));
    o1->setAccessTokenUrl(QUrl("https://www.flickr.com/services/oauth/access_token"));

Kod: Označi sve

       
    connect(o1, SIGNAL(openBrowser(QUrl)), this, SLOT(onOpenBrowser(QUrl)));
    o1->link();


sve drugo se nalazi u paketu s GitHub projekta ! ovaj slot onOpenBrowser naprosto okida ovu naredbu

Kod: Označi sve

      QDesktopServices::openUrl(url);
i to je to, aplikacija sada ima spremljen 'token i secret' za ovu sesiju. ako želite provjeriti da li je sve ispravno, jednostavno pozovemo flickr.test.login ili bilo koji drugi API poziv prema Flickr servisu. evo kako izgleda poziv API metode

Kod: Označi sve

    QUrl url = QUrl("https://www.flickr.com/services/rest/");    
    QList<O0RequestParameter> reqParams = QList<O0RequestParameter>();
ovaj URL upučuje na metodu upita REST ( običan http GET ili POST ), osim toga postoji opcija XMLRPC , također SOAP
metoda upita REST je jedina podržana u projektu koji sam skinuo s GitHub - autor AKOS POLSTER - držimo se jednostavnih metoda !

Kod: Označi sve

    QByteArray paramName1("method");
    QString mes1 = QString("flickr.test.login");
    reqParams << O0RequestParameter(paramName1, mes1.toLatin1());
ovdje vidimo kako se slažu parametri za običan http, jasno je da ovdje zapravo pišemo &method=flickr.test.login

Kod: Označi sve

    QByteArray paramName2("api-key");
    QString mes2 = QString(O1_KEY);
    reqParams << O0RequestParameter(paramName2, mes2.toLatin1());
 
još jedan obavezan parametar, api-key naše aplikacije, ovdje smo napisali &api-key=stvarni-api-key-koji-dobijemo-na-flickr obavezan kod svakog poziva

Kod: Označi sve

   
    QByteArray postData = O1::createQueryParameters(reqParams);
    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM);
    QNetworkReply *reply = requestor->post(request, reqParams, postData);
    connect(reply, SIGNAL(finished()), dole, SLOT( flikResponse() ) );

ovdje slažemo naše parametre zajedno s linkom u običan HTTP header, koristimo metodu POST objekta requestor (kako ga definira naš junak AKOS ). u naredbi connect ( reply , SIGNAL() , dole , SLOT() ) ovaj pointer dole naprosto je THIS pointer na klasu . imao sam sreće da sam radio u multijezičnim projektima, i uvijek sam prkosio s hrvatskim riječima ( unatoč molbi i preklinjanju da koristim engleski). najslađa mi je zamka korištenje hrvatske riječi KOJI za index he he


s tim da sam ova tri objekta definirao na nivou klase, pa ih ne moram inicirati neprestano

Kod: Označi sve

O1 *o1;
QNetworkAccessManager *manager;
O1Requestor *requestor;  
osnovni 'engine' Flickr klijenta je spreman. pali pilu !
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Odgovori