Förslag på ett GUI bibliotek för C++ ?

Permalänk

Förslag på ett GUI bibliotek för C++ ?

Hej!

Javaprogrammerare här, men ska börja med C++ av vissa orsaker - Prestanda och beräkningar.
Jag tänker alltså bygga ett realtidsystem, och därför passar Java inte riktigt bra här.

Problemet med C++ är att det är svårt, bökigt och dom bästa biblioteket kräver licens t.ex. QT om man ska använda det i affärsverksamhet. Men jag vet att det finns kostnadsfria bibliotek. Men Python är för segt, Java har inte stöd för de beräkningar som jag ska göra. Så då är det bara C++ kvar. Jag har kollat på Rust, men det verkar ännu bökigare än C++.

Jag undrar om ni vet av ett C++ bibliotek som kan göra plottar t.ex. linjeplott. Biblioteket måste vara gratis.

Bästa för mig vore om GNU Octave hade stöd för trådar + bra GUI.

Permalänk
Medlem

Kanske WxWidgets? Heltäckande GUI och bra stöd för grafik/diagram.

Jag har använt det i Python, men inte i C++. Väldigt snabbt och effektivt i Python då det i princip bara är ett tunt skal över underliggande C/C++ kod i libbarna. Kan vara idé att göra en prototyp i Python och sedan göra om i C++. Om det behövs. Ganska enkelt då det är WxWidgets både i C++ och Python.

Finns massor med publicerad kod att titta på.

Gör en bildsökning på exempelvis "WxWidgets C++ plotting" för en idé om vad det handlar om.

Visa signatur

Linux och Android

Permalänk
Medlem

Är det inte smidigare att bara göra beräkningarna i c/c++ och sedan plotta i t.ex python?

Permalänk
Medlem

Jag vet inte exakt hur ditt problem ser ut och om du redan har någon kod etc, men vad @Zedong föreslår, att du gör de dyrare beräkningarna i C/C++ och har GUIt i python, kan definitivt vara en möjlighet. Isåfall blir det största problemet hur du interfacear med C från python. Det finns olika metoder här, men den överlag bästa lösningen tror jag är att anropa C funktionerna "direkt" via FFI (foreign function interface). Du borde kolla in CFFI modulen isåfall. https://cffi.readthedocs.io/en/latest/

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Medlem

QT är LGPL. Så länge du kan uppfylla det så är det väl bara att tuta och köra?

Visa signatur

Core i7 7700K | Titan X (Pascal) | MSI 270I Gaming Pro Carbon | 32 GiB Corsair Vengeance LPX @3000MHz | Samsung 960 EVO 1TB

Permalänk
Medlem

Qt kräver inte alls licens för affärsverksamhet Har för mig att tumregeln är att "bara" se till att inte baka in alla dll filer i exe-filen typ och såvida du inte gör ändringar på själva Qt ramverket så kan du behålla all kod för dig själv

Permalänk
Medlem

Jag skulle också kolla upp FLTK. Det är mindre resurskrävande än de andra nämnda och är licensierat under LGPL så du kan använda det i en kommersiell applikation.

Visa signatur

För övrigt anser jag att tobak ska förbjudas.

Permalänk
Medlem
Skrivet av heretic16:

Java har inte stöd för de beräkningar som jag ska göra.

Blev lite nyfiken när jag läste detta...vad är det för beräkningar det handlar om?

Visa signatur

Laptop: Dell Latitude E7270 | 12,5" FHD IPS | i5-6300U | 16GB RAM | 500GB SSD
Laptop: MacBook Air 13"
NUC: Intel i5-4250U | 8GB RAM | 250GB SSD

Permalänk
Skrivet av PeCe:

Blev lite nyfiken när jag läste detta...vad är det för beräkningar det handlar om?

Kvadratisk programmering och reglerteknik så som DARE och CARE för att estimera steady-state kalmanfilter.

Permalänk

Varför inte göra beräkningarna i C++ och spara plottdatan och låta själva genererandet av grafer ske i något annat program? Då skulle du kunna använda vad du vill.

Skickades från m.sweclockers.com

Permalänk
Skrivet av Ståupptuppen:

Varför inte göra beräkningarna i C++ och spara plottdatan och låta själva genererandet av grafer ske i något annat program? Då skulle du kunna använda vad du vill.

Skickades från m.sweclockers.com

Jag skulle kunna göra beräkningarna i C++ och ha Java som GUI. Men C++ kan ej hantera "skräpvärden" lika bra som GNU Octave/MATLAB.

Skräpvärden vill man ha så låga som möjligt. Helst e-17 eller mer. Men C++ brukar oftast ge e-8 på skräpvärden, vilket oftast inte duger till.

Hur är det med Python och NumPy med Java? Går det?

Permalänk
Medlem

C++ använder NaN för att representera skräpvärden.

Jag tror att du snarare tänker på avrundningsfel som upptår för att man inte kan representera alla flyttal exakt som float eller double?

float a = (float)1/(float)3;
float b = a * (float)3;
if (b != (float)1)
cout << "Avrundningsfel! Borde vara exakt 1: " << b << endl;

Du kan minska avrundningsfelen genom att övergå till double istället.

Du kan helt eliminera (många av) avrundningsfelen genom att gå över till att använda enbart rationella tal. Rationella tal är tal som kan representeras som en kvot av två heltal. Det inkluderar precis ALLA värden som kan representeras som float eller double samt en hel massa värden typ 1/3 utöver det. Det kräver mer processorkraft och minne att hantera rationella tal än float/double.

Det finns gott om C++ libbar för att hantera rationella tal. Om du söker på "C++ rational numbers library" fär du massor med träffar. Ett exempel:

https://www.boost.org/doc/libs/1_70_0/libs/rational/rational....

Men det finns fortfarande en del tal som en dator inte kan beräkna och representera exakt. Irrationella tal. Exempelvis pi eller roten ur två. För att (i någon mån) kunna hantera och räkna med dem kan du använda en C++ lib för symbolisk matematik. Det medför ändå sämre prestanda och mer krav på minne och ändå mer begränsningar av vad som kan göras.

Det finns färre sådana libbar.

Ett exempel: http://issc.uj.ac.za/symbolic/symbolic.html

Eller så använder du typ MATLAB.

Visa signatur

Linux och Android

Permalänk
Medlem

GUI i C/C++ är aldrig smärtfritt. Men kan rekomendera "dear imgui". https://github.com/ocornut/imgui
Tror det är bland de simplare GUI bibliotek du kan få tag i, lägg in en handfull filer i ditt projekt och kör typ.

Men förstår inte riktigt heller dina senare inlägg? Du säger att C++ skapar "skräpvärden" som ett argument mot C++ men du vill ändå använda det? Vet inte riktigt heller vad du menar med skräpvärden, men som Adoby ovanför mig antar jag att du menar floating point errors? Det är ju dock oundvikligt oavsett vilket programspråk du använder sålänge du använder decimaltal och inte heltal.

Permalänk
Medlem

QT! Jag skulle aldrig använda nåt annat om det inte fanns starka specifika skäl. Enkelt, bra doc, bra forum och det finns faktiskt fler operativsystem än Windows. QT ser ut som windows på windows, som macos på macos osv.

Visa signatur

ecce
#NATisNotASecurityFeature

Permalänk
Skrivet av heretic16:

Jag skulle kunna göra beräkningarna i C++ och ha Java som GUI. Men C++ kan ej hantera "skräpvärden" lika bra som GNU Octave/MATLAB.

Skräpvärden vill man ha så låga som möjligt. Helst e-17 eller mer. Men C++ brukar oftast ge e-8 på skräpvärden, vilket oftast inte duger till.

Hur är det med Python och NumPy med Java? Går det?

Ledsen att jag inte svarade på denna fråga, men är lite förvirrad. Var det inte C++ du ville använda?

Skrivet av Jackbob:

GUI i C/C++ är aldrig smärtfritt. Men kan rekomendera "dear imgui". https://github.com/ocornut/imgui
Tror det är bland de simplare GUI bibliotek du kan få tag i, lägg in en handfull filer i ditt projekt och kör typ.

Har velat testa Imgui, det verkar lovande.

Bara häromdagen såg jag en post om detta projekt:
http://nanapro.org/en-us/
Det kanske är något.

Skrivet av Jackbob:

Men förstår inte riktigt heller dina senare inlägg? Du säger att C++ skapar "skräpvärden" som ett argument mot C++ men du vill ändå använda det? Vet inte riktigt heller vad du menar med skräpvärden, men som Adoby ovanför mig antar jag att du menar floating point errors? Det är ju dock oundvikligt oavsett vilket programspråk du använder sålänge du använder decimaltal och inte heltal.

Precis, jag reagerade på detsamma, är lite förvirrande.