Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C++] Welke cross-platform widget-toolkit?

Pagina: 1
Acties:

  • cxavier
  • Registratie: Maart 2006
  • Laatst online: 15-11 18:01
Hallo,

(Ik heb al even vlug de zoekfunctie van GoT gebruikt, maar ik kon 1 kort topic vinden: ([C++], platform onafhankelijk GUI programeren), dat al meer dan 4 jaar oud is. Omdat de widget toolkits in die tijd weer veel veranderd kunnen zijn open ik maar een nieuw topic).


Ik ben van plan om meer grafische tooltjes te gaan programmeren, die ik dan ook op het internet wil zetten. Omdat ik zelf bijna alleen onder Linux programmeer, en de programma's ook op Windows moeten werken zoek ik een widget toolkit die op beide besturingssystemen werkt, zonder veel aan de code aan te passen. De taal C++ staat niet echt vast, maar omdat ik al redelijk wat ervaring daarmee heb wil ik die graag gebruiken. Ik kan het natuurlijk wel voor elk platform apart compileren.

Over een paar widget toolkits heb ik al wat voor en nadelen opgezocht. (Ik heb al een klein beetje ervaring met Qt, maar door de nadelen weet ik niet zeker of ik misschien beter naar een andere toolkit kan overstappen).

Qt
+ uitgebreide documentatie
+ Object georiënteerd
+ Ik heb er al wat ervaring mee.
- Met de gratis versie mogen alleen open source applicaties ontwikkeld worden.

Gtk+
+ Uitgebreide documentatie
+ Geen problemen met licenties
- Niet object georiënteerd?

wxWidgets
+ Geen problemen met licenties
+ Ook object georiënteerd
- Minder uitgebreide documentatie

Nu is het het probleem met de licentie van Qt nog niet zo groot, omdat ik de programma's zelf ook open source kan maken. Ik weet alleen nog niet wat ik in de toekomst ermee wil gaan doen, en misschien moet ik dan nog voor een andere toolkit kiezen.

Daarom wil ik aan de andere tweakers vragen of ze ervaring hebben met deze of andere widget toolkits, en wat de ervaringen daarmee zijn.

Knight who says 你


  • user109731
  • Registratie: Maart 2004
  • Niet online
Kijk ook eens naar gtkmm, de C++ interface voor GTK+ :)

Ik heb ervaring met (Py)GTK en (iets minder) Qt in een aantal open-source projecten. Ik moet zeggen dat Qt zeer degelijk en compleet is. Het is veel meer dan een GUI-toolkit en bevat ook classes voor bijvoorbeeld netwerk sockets. Stylesheets zijn ook erg krachtig om je interface vorm te geven.

Bovendien werkt Qt onder Windows meer native en men werkt aan een versie die nog beter met GTK/Gnome moet integreren. Dus wil je Windows serieus ondersteunen dan bieden Qt (en wxWidgets?) een betere gebruikerservaring denk ik. (Hoewel Gtk natuurlijk ook wel cross-platform is, zie Pidgin, the GIMP, Inkscape etc.)

  • cxavier
  • Registratie: Maart 2006
  • Laatst online: 15-11 18:01
JanDM schreef op zaterdag 28 juni 2008 @ 19:19:
Kijk ook eens naar gtkmm, de C++ interface voor GTK+ :)
Daar zal ik eens naar kijken ja.


Bedankt voor de reactie in ieder geval :).

edit:
Is er ook nog een verschil in snelheid tussen de verschillende toolkits, of maakt dat weinig uit?

[ Voor 16% gewijzigd door cxavier op 28-06-2008 19:26 ]

Knight who says 你


  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 08:52
tigid schreef op zaterdag 28 juni 2008 @ 19:24:
[...]

Daar zal ik eens naar kijken ja.


Bedankt voor de reactie in ieder geval :).

edit:
Is er ook nog een verschil in snelheid tussen de verschillende toolkits, of maakt dat weinig uit?
heb persoonlijk enkel ervaring met GTK en moet zeggen dat de UI gedeelte pas handig te maken is (glade) maar bepaalde dingen programmeren jeez...

Moes de toolkit dan ook gebruiken ivm uniefopdracht van Humane. Gebruiksvriendelijke UI maken.. Moet wel zeggen dat we op 3dagen alles afhadden en ongeveer konden wat we wouden..

Dus feitelijk is het toch allemaal redelijk snel voor elkaar gekregen. Met geen voorgaande ervaring met deze toolkit te hebben.

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Verwijderd

Van Qt vond ik het signal/slot verhaal erg irritant. Qt herschrijft bij compilatie stukken van je code, waardoor ik in ieder geval niet meer snapte wat ermee gebeurde. Ik heb dan ook de optionele extra opdracht voor een inleidend C++ practicum van m'n studie niet afgemaakt. Je moest daarbij dynamisch Qt-widgets aanmaken @runtime, waardoor die automatisch gegenereerde eventhandlers van Qt dus niet werken.

Ik heb Gtk+(mm) niet veel gebruikt, maar ik heb gelezen dat die voor eventhandling standaard features van C en C++ gebruiken, waardoor er niet allemaal magische dingen gebeuren.

Ik heb wel ervaring met Swing van Java, wat wel lekker makkelijk is. Daar zet je een eventlistener op een bepaalde widget, waarin je gewoon wat code dumpt. Dat vond ik in ieder geval een stuk simpeler te begrijpen dan het gooien en opvangen van signals. Maargoed, daar heb je niet veel aan met C++.

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 16-11 10:28
Als je open staat voor andere talen, dan zou ik zeker Java toch eens proberen, zoals DOT al opmerkt. Als C++ je al in de vingers zit, moet java een makkie voor je zijn....

Genoeg is meer dan veel, en tart den overvloed


  • cxavier
  • Registratie: Maart 2006
  • Laatst online: 15-11 18:01
NaliXL schreef op zaterdag 28 juni 2008 @ 20:57:
Als je open staat voor andere talen, dan zou ik zeker Java toch eens proberen, zoals DOT al opmerkt. Als C++ je al in de vingers zit, moet java een makkie voor je zijn....
Java-programma's vind ik meestal soms nogal "lomp" en langzaam aanvoelen (limewire, eclipse, enz.), maar dat zal ook wel meevallen als het programma goed in elkaar is gezet.

Ik zal in ieder geval proberen om een simpel java-programmaatje in elkaar te zetten, en eens te kijken hoe het aanvoelt ;). Met de verschillende widget-toolkits zal ik dat ook eens doen, dan krijg ik in ieder geval een idee over hoe het programmeren daarmee gaat.

[ Voor 0% gewijzigd door cxavier op 28-06-2008 21:25 . Reden: meestal is niet het goede woord ;) ]

Knight who says 你


Verwijderd

Ja, wat Java-programma's meestal langzaam maakt is slechte optimalisatie. Swing is heel reactief als je geen langdurige calls achter elke knop zet. In een project hadden we een foutje gemaakt in het opslaan van preferences waardoor het een bestand van 100MB opleverde, en die werd na zo'n beetje elke knop opnieuw geschreven. Geen wonder dat je daarom telkens een seconde moest wachten als je een knop indrukte. :P

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:24
Voor simpele UIs ben ik zelf wel een fan van FLTK; light-weight, LGPL gelicenseerd en cross-platform. FLTK is niet heel uitgebreid en wordt niet heel actief doorontwikkeld, maar voor simpele applicaties werkt het prima. Ik heb zelf overigens alleen ervaring met de 1.x tak (de 2.x is wat anders opgezet geloof ik).

  • writser
  • Registratie: Mei 2000
  • Laatst online: 12:05
Ik heb wat gewerkt met zowel QT, gtkmm als wxwidgets. Voor alledrie is voldoende voorbeeldcode en documentatie te vinden. Mijn persoonlijke favoriet is gtkmm, niet in de laatste plaats vanwege de uitstekende manual (zie http://www.gtkmm.org/docs.../html/chapter-basics.html). En je kan met drag & drop een interface ontwerpen, deze opslaan als XML en laden in je programma (dit kan met QT ook trouwens). Een nadeel is dat het werken met gtkmm onder Windows allemaal wat minder soepel gaat. Ook zien je interfaces er daar niet zo mooi uit.

Het voordeel (of nadeel) van QT is dat het veel uitgebreider is. Dat is makkelijk als je een cross-platform programma wil maken met netwerk- of SQL-mogelijkheden, om eens wat te noemen. Aan de andere kant kun je ook prima libSDL of iets dergelijks gebruiken i.c.m. gtkmm als je wil netwerken.

Wil je een klein programmaatje ontwikkelen voor Windows dan is wxwidgets lekker eenvoudig (zie bijv. filezilla). Voor de Gnome desktop is gtkmm makkelijk en voor een wat groter project is QT misschien aan te raden. Maar goed, uiteindelijk zijn ze alledrie cross-platform en draait het om je eigen voorkeur.

Onvoorstelbaar!


  • PV85
  • Registratie: Juni 2008
  • Laatst online: 19-09 09:33
tigid schreef op zaterdag 28 juni 2008 @ 21:12:
[...]

Java-programma's vind ik meestal soms nogal "lomp" en langzaam aanvoelen (limewire, eclipse, enz.), maar dat zal ook wel meevallen als het programma goed in elkaar is gezet.

Ik zal in ieder geval proberen om een simpel java-programmaatje in elkaar te zetten, en eens te kijken hoe het aanvoelt ;). Met de verschillende widget-toolkits zal ik dat ook eens doen, dan krijg ik in ieder geval een idee over hoe het programmeren daarmee gaat.
Ik ben momenteel een SWT programma aan het kloppen in Java (zie programmeertopic). En het is zeer goed te doen, mooi en reuze reactief dankzij ondersteuning voor native GUI componenten(alleen op windows getest helaas). Swing programma's voelen gewoon lomp aan, hoe efficient je code ook is. Dit komt namelijk omdat de GUI componenten niet native zijn, waardoor je nooit de snelheid krijgt die je op dat platform gewend bent. Dit betekent niet dat Swing langzaam is, het reageert gewoon anders dan je gewend bent en dat wordt over het algemeen als storend ervaren.

Dat Eclipse traag is, vind ik btw niet zo gek met zo'n complexe GUI. Ik heb nog geen enkele snelle uitgebreide IDE meegemaakt overigens.

Verwijderd

Swing heeft native Look & Feels voor alle platforms. Kwestie van 1 regeltje toepassen, en je programma is native:
Java:
1
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

De keuze tussen Swing en SWT hangt dus alleen af van je persoonlijke voorkeur als ontwikkelaar.

  • PV85
  • Registratie: Juni 2008
  • Laatst online: 19-09 09:33
Verwijderd schreef op zondag 29 juni 2008 @ 02:17:
Swing heeft native Look & Feels voor alle platforms. Kwestie van 1 regeltje toepassen, en je programma is native:
Java:
1
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

De keuze tussen Swing en SWT hangt dus alleen af van je persoonlijke voorkeur als ontwikkelaar.
Dat is niet waar!. Swing laat alleen de GUI componenten eruit zien als native, terwijl SWT echt de native GUI componenten gebruikt. Je kunt daarom bij SWT gewoon geen verschil zien met andere native programma's, omdat het er niet is! Tevens is de native LAF van Java behoorlijk slecht, zodat je programma er als nog niet native uitziet.

[ Voor 7% gewijzigd door PV85 op 29-06-2008 12:10 ]


Verwijderd

Swing bouwt de componenten wel op op basis van je themes. Mijn GTK-themes onder Ubuntu worden gehonoreerd door Swing. Er zitten inderdaad verschillen tussen de Swing widgets en native widgets van alle platformen, omdat het niet dezelfde widgets zijn. Er is een vaste verzameling Swing-widgets die op elk platform hetzelfde is. Ze hebben echter wel een native L&F.

http://java.sun.com/docs/.../ui/features/compWin.html

Overigens vraag ik me af hoe ze bij SWT een native ExpandBar willen aanroepen in een GTK-omgeving, of hoe ze een native CTabFolder willen aanroepen in welke omgeving dan ook:

http://www.eclipse.org/swt/widgets/

[ Voor 20% gewijzigd door Verwijderd op 29-06-2008 14:42 ]


  • PV85
  • Registratie: Juni 2008
  • Laatst online: 19-09 09:33
Verwijderd schreef op zondag 29 juni 2008 @ 14:27:
Swing bouwt de componenten wel op op basis van je themes. Mijn GTK-themes onder Ubuntu worden gehonoreerd door Swing. Er zitten inderdaad verschillen tussen de Swing widgets en native widgets van alle platformen, omdat het niet dezelfde widgets zijn. Er is een vaste verzameling Swing-widgets die op elk platform hetzelfde is. Ze hebben echter wel een native L&F.

http://java.sun.com/docs/.../ui/features/compWin.html

Overigens vraag ik me af hoe ze bij SWT een native ExpandBar willen aanroepen in een GTK-omgeving, of hoe ze een native CTabFolder willen aanroepen in welke omgeving dan ook:

http://www.eclipse.org/swt/widgets/
Volgens mij worden componenten die native niet voorhanden zijn, gerenderd op de Swing manier oid.
Pagina: 1