Hvorfor er ' ikke flere desktop-apps skrevet med Qt? [lukket]

Lukket . Dette spørgsmål er meningsbaseret . Det accepteres i øjeblikket ikke svar.

Kommentarer

  • Det ' er indfødt C ++. De fleste udviklere foretrækker sprog på højere niveau såsom C #.
  • Det tokantede sværd bagudkompatibilitet har efterladt Qt med mange anakronismer, mangler, der ikke kan repareres, og anden dårlig opførsel. : " Mest "?
  • Jeg tror ikke ' TIOBE-indekset er et rigtigt nøjagtigt mål, fordi det måler popularitet, ikke brug. At sammenligne mængden af kode i open source-arkiver som GitHub, Bitbucket, Codeplex og Sourceforge ville give mere nøjagtige målinger. (Og jeg tror, at disse mere nøjagtige målinger sætter C og C ++ i # 1 og # 2 pletter – Java har en uretfærdig fordel i TIOBE-indekset, fordi det ' bruges til førsteårsskolekurser , og nye programmører gør mere brummer end erfarne gør)
  • @Giorgio: Erm, du bliver nødt til at tænke over sådanne ting i C #. Begrebet " der ejer denne " går langt ud over " der kalder delete ". Det faktum, at de smarte markører gør det eksplicit, er ikke ' t et sprog, der fejler; og hvis du ikke ' ikke tænker på sådanne ting, vil du generere affald på ethvert sprog på højt niveau, jeg ' har også set.

Svar

Jeg har ikke til hensigt at dette skal være et forvirrende svar, men det er grundene til at jeg gør ikke personligt bruge Qt. Der er masser af gode ting at sige om det – nemlig at APIet fungerer det meste af tiden, og at det problemfrit bygger bro på platforme. Men jeg bruger ikke Qt, fordi:

  1. I nogle tilfælde ser det bare ikke ud som oprindelige programmer ser ud. At designe en enkelt brugergrænseflade til alle platforme vil i sagens natur ikke se rigtigt ud, når den flyttes fra maskine til maskine, af forskellige visuelle stylingsårsager. På Mac-maskiner er splitstænger normalt relativt tykke, og knapperne er små og afrundede med ikoner. På Windows-maskiner er splitstænger typisk smalle, og knapperne er mere tekstlige med mere firkantede designs. Bare fordi du kan skrive et brugergrænseflade til hver platform, betyder det ikke, at du skal for de fleste applikationer.
  2. Qt er ikke kun et link-kompatibelt sæt C ++ – biblioteker. Det anvendte build-system kræver oversættelse af visse filer til ekstra kildefiler, hvilket gør byggeprocessen meget mere kompliceret sammenlignet med de fleste andre biblioteker.
  3. Som et resultat af (2), C ++ IDEer og værktøjer kan markere Qt-udtryk som fejl, fordi de ikke forstår Qts specifikationer. Dette tvinger næsten brug af QtCreator eller en tekstredigerer som vim.
  4. Qt er en stor mængde kilde, som skal være til stede og forudinstalleret på enhver maskine, du bruger inden kompilering. Dette kan gøre opsætningen af et byggemiljø meget mere kedeligt.
  5. Dele er for det meste licenseret under LGPL, hvilket gør det er vanskeligt at bruge single-binær-distribution, når man har brug for at frigive under en mere restriktiv eller mindre restriktiv licens.
  6. Det producerer ekstremt store kompilerede binære filer sammenlignet med lignende skrevet " almindelige ol “native applikationer " (undtagen naturligvis applikationsskrivning ti for KDE).

Kommentarer

  • @Dehumanizer: Der er ' LGPL-licens, og der ' er den kommercielle licens. Den kommercielle licens er tusindvis af dollars fra licenstagerens side og tillader ikke omfordeling osv. For open source-projekter under liberale licenser som BSD, MIT eller Boost, hvor forfatterne ikke er ' t tjener masser af penge, og de ønsker at frigive deres kode under en liberal licens, en afhængighed af LGPL er urimelig, men de pågældende udviklere har generelt ikke råd til kommerciel licensering.
  • # 6 er den største grunden til at jeg undgår det. Jeg mener, jeg vil ikke ' ikke have et stort, klodset program, og jeg kan ikke ' lide at være bundet til en bestemt licens, men det ' er virkelig manglen på et godt, indfødt look-and-feel, som ' er en deal-breaker for mig.Nyere versioner af OSX og Windows har specifikt gjort et fantastisk stykke arbejde med at gøre deres oprindelige grænseflader smukke, hurtige og funktionelle, og jeg ' vil hellere udnytte alt det arbejde, de ' har allerede gjort for mig; Jeg finder ud af, at mange programmer uden et indfødt udseende føles billigt og hacky for mig (ikke altid, men det forvirrer mig lidt).
  • Dit nummer 6 skulle have været nummer 1. Dette er ved langt det største problem med Qt. I mange tilfælde bruger den simpelthen ikke de oprindelige APIer. Jeg kan godt lide, at min software ser indfødt ud. Brugere kan også lide det. Jeg ' har aldrig set en Mac-applikation oprettet med Qt, der lignede en Mac-applikation. Der er heller ingen andre Mac-brugere, og de ' er kræsne over den slags ting. Du mister hele fordelen ved, at det er " cross-platform ", hvis du ' bruger det kun til at oprette Linux-applikationer, hvilket er omtrent det eneste sted, det ser indfødt ud, fordi der virkelig ikke er noget native.
  • undtagen problemet med ' native ' look er der ikke længere. Den gamle konsistens af Windows-apps er nu en bastardisering af de unikke klatter, glød og animationer, som WPF og silverlight giver dig mulighed for. Se på Office eller Windows 7 ' s Kontrolpanel bare for at se, hvordan selv MSs flagskibsprodukt har inkonsekvent GUI i dag. Mac-brugere – ja, du har meget gyldigt et punkt der.
  • @TrevorBoydSmith: Beklager, men du ' tager fejl. Qt er den eneste ramme, der bruger forbehandling. Periode. Tjek GNOME, FLTK, WX og venner, og vis mig et forbehandlingstrin. Du vil ikke finde '. Nogle andre biblioteker kommer med forskellige build-systemer, men i slutningen af dagen er de C ++ -biblioteker, som kan bygges af enhver C ++ -compiler. Hvad angår " Raw win32 ikke er til stede i mine grunde ", det er til stede i mine grunde som nr. 5 og # 6.

Svar

Som folk siger, passer hvert værktøj til hvert problem og situation …

Men hvis du er C ++ programmør, er Qt din ramme. Ingen rival.

Vi udvikler en kompleks medicinsk billedbehandling kommerciel applikation, og Qt holder fast.

Det siger jeg ikke de “ulemper”, som folk siger om det, er falske, men jeg har en fornemmelse af, at de ikke har prøvet Qt i lang tid (det forbedres løbende i hver ny version …) Og for det meste alle de spørgsmål, de kommenterer er ikke et problem, hvis du passer på.

UI-platformens inkonsistens: kun hvis du bruger UI-widgets “som de er” uden tilpasning eller brugerdefineret kunst.

Overbelastning af Qt-præprocessor : Kun hvis du misbruger signal-slot-mekanismen eller QObject-arv, når der ikke er noget behov for det.

Forresten, vi skriver stadig applikationer i C # .NET og har været gør det i lang tid. Så jeg tror, jeg har enouch-perspektiv.

Som sagt, hvert værktøj til hver situation,

men Qt er uden tvivl en konsistent og nyttig ramme.

Kommentarer

  • +1 Thaks! Jeg ville bare skrive det samme. Det mest vrøvl er " ikke-open source / kommercielt argument ". Forbløffende, hvor forkert mange mennesker forstår udtrykket Open Source. Qt var Open source, da jeg bruger det (1.4). Og det plejede at have den mest retfærdige licens: tjen penge med Qt – > løn.
  • Åh og jeg don virkelig ikke ' t PAS på at tilføje 10 MB DLLer til applikationer, der indeholder 50 MB kunst og 200 MB mere videotutorials og data 🙂
  • Den nødvendige plads til Qt er billig i disse dage.
  • Dette svarer stort set til min erfaring med Qt (widgets-rammen, jeg har ikke ' t brugt QML / QtQuick til noget seriøst indtil videre). Det er velegnet til at skrive store applikationer med komplekse UI-krav. Når du først har lært det, kan du være meget produktiv. De nævnte ulemper (separat kompileringstrin til moc ing, ui-filer osv.) Er ikke et problem, hvis build-systemet er korrekt konfigureret. Jeg kan anbefale enten qmake eller cmake.
  • fra Qt 5.8 bagefter er der et projekt ved navn Qt Lite, der minimerer ekstremt Qt til dine specifikke behov. dette er en kommerciel funktion;)

Svar

Af alle de ting, jeg ikke kan lide ved Qt, det faktum, at det ikke spiller godt med skabeloner, bugter mig mest. Du kan ikke gøre dette:

template < typename T > struct templated_widget : QWidget { Q_OBJECT; public signals: void something_happened(T); }; 

Det spiller heller ikke godt med forprocessoren. Du kan ikke gøre dette:

#define CREATE_WIDGET(name,type) \ struct name ## _widget : QWidget \ { \ Q_OBJECT; \ \ public signals: \ void something_happened(type); \ } 

Det blandet med det faktum, at alt, hvad der reagerer på et signal, skal være et Q_OBJECT, gør Qt svært at arbejde ind for en C ++ programmerer. Folk, der plejede at programmere Java eller Python-stil, er sandsynligvis ret bedre faktisk.

Jeg brugte faktisk en masse tid og kræfter på at undersøge og udtænke en måde at få typesikkerhed tilbage og forbinde et Qt-signal til ethvert funktionsobjekt: http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html

Den slags ting, jeg vil gøre der, er en grundlæggende, dagligdags C ++ – udvikling, der næsten er umulig af Qt moc … som i sig selv er helt unødvendige nu dage, hvis det nogensinde faktisk var.

Helt ærligt er jeg dog fast med det, for hvis du vil lave automatiseret UI-test, er Qt stort set det eneste spil i byen, der ikke er MFC. ..som er så 1980 (det suger at arbejde med den lort virkelig hårdt). Nogle siger måske WX, men det har endnu mere alvorlige problemer. GTKmm ville have været mit første valg, men da det er “alle ejere trukket og ikke gør tilgængelighed … kan det ikke drives af industristandard testsoftware. Qt er hårdt nok i den henseende ( knap fungerer, når du ændrer tilgængelighedspluginet).

Kommentarer

  • Hvad er det af interesse, hvad ser du som de største problemer med WX?
  • @Tom – dårlig dokumentation, især for de nye ting. AUI-komponenterne er næppe dokumenteret med store sektioner mangler, hvilket gør det vanskeligt at bruge i et produktionsmiljø. Dokumentationen til begivenhedsprocessen er grundlæggende fejlagtig med hensyn til den sti, der følges, i det mindste på win32. Brugte meget tid på at råbe på computeren, " Dette burde fungere !!! " inden du går ned i den dybe bearbejdningskode for at finde ud af, at hvad WX gør, ikke ' ikke følger dokumenterne, og hvad jeg lavede, ville ALDRIG fungere.
  • Jeg var også forstyrret af accept af ejendomsgitterbiblioteket i hovedlinjen. Jeg brugte dette bibliotek, og det viste adskillige grundlæggende designfejl ud over faktisk manglende viden på vegne af programmøren, der skrev det (f.eks. Kaldet virtuelle funktioner i konstruktører). Det og AUIs dårlige tilstand viste en tendens til dårligere standarder. Jeg ' er heller ikke en stor fan af statiske hændelsestabeller, selvom der i det mindste ' er en anden måde at svare på begivenheder … i modsætning til MFC, hvilken WX bare er for meget til at være spændende alligevel.
  • Tak. Jeg ' har kun brugt det lidt og gennem wxPython API, hvor det virkede ganske rart. Jeg kan forstå, at det ville skjule noget af det onde, men også at jeg bare ikke har ' Jeg blev dybt nok involveret i at have været imod de mere alvorlige problemer. Noget for mig at være opmærksom på.
  • Alt, hvad der reagerer på et signal, skal være et Q_OBJECT, Nej i dag … Nu kan statiske funktioner, funktioner og endda lambda-funktioner svare på et signal (du kan bruge funktionsmarkører som slots). No-QObject-klasser kan også have medlems slots, hvis du opretter forbindelse til dem ved hjælp af en std :: bind for at konvertere instansmedlem til en funktionsmarkør.

Svar

En af grundene til ikke at bruge Qt er, at hvis du kun skriver til en arkitektur, f.eks. Windows, vil du muligvis bruge C # /. NET (eller kakao på Mac), fordi de altid vil være i stand til at drage fordel af de nyeste klokker og fløjter i operativsystemet.

Hvis du skriver apps på tværs af platforme, er du muligvis allerede stærkt knyttet til en anden teknologi som Java (dvs. du arbejder i en “Java Shop”). Dit valg af teknologi dikteres muligvis af det økosystem, du udvikler dig i, såsom sprogspecifikke APIer. I denne slags tilfælde kan det være en fordel at minimere antallet af teknologier.

En tredje grund, som jeg kan tænke på, er at Qt er baseret på C ++, og C ++ er et forholdsvis vanskeligt / farligt sprog at programmere på Jeg synes, det er et sprog for professionelle. Hvis du har brug for at have top ydeevne og er i stand til at være omhyggelig, så er C ++ sandsynligvis stadig det bedste spil i byen. Faktisk forbedrer Qt mange hukommelsesadministrationsproblemer, hvis du indstiller tingene til at falde uden for anvendelsesområdet. Qt selv gør også et godt stykke arbejde med at isolere brugeren fra mange af de grimme C ++ – problemer. Hvert sprog og ramme har sine fordele og ulemper. Det er et meget, meget kompliceret emne, der normalt kan opsummeres af den tilføjelse, der ofte ses hos spisesteder: Hastighed, kvalitet og pris (men du kan kun vælge to).

Selvom reglerne siger, at jeg skal holde fokuseret på at besvare spørgsmålet, vil jeg afvise nogle af de spørgsmål, der er rejst af Billy ONeal, som jeg synes gør et godt stykke arbejde sammenfattende de almindeligt citerede grunde til ikke at bruge Qt:

  1. Qt er faktisk et C ++ – bibliotek / framework / header-filer. Det er forstærket af en makroprocessor (moc), der muliggør signaler og slots blandt mange andre ting. Det transformerer yderligere makrokommandoer (såsom Q_OBJECT), så klasser har introspektion og alle mulige andre godbidder, som du måske tænker på som at tilføje Objective-C-funktionalitet til C ++. Hvis du ved nok om C ++ til at blive fornærmet af denne mangel på renhed, dvs.du er en professionel, så 1) brug ikke Q_OBJECT og dens lignende eller 2) vær taknemmelig for, at det gør dette, og programmer rundt i de meget begrænsede hjørnesager, hvor dette forårsager et problem. For folk, der siger “Brug Boost til signaler og slots! “så svarer jeg, at du udveksler et” problem “til et andet. Boost er enormt, og det har sine egne almindeligt citerede problemer som dårlig dokumentation, forfærdelige API og rædsler på tværs af platforme (tænk gamle kompilatorer som gcc 3.3 og store jernkompilatorer som AIX).

  2. For redaktørsupport følger dette også af 1, jeg er enig i det. Faktisk er Qt Creator IMHO den bedste grafiske C ++ editor, periode , selvom du ikke bruger Qt-tingene. Mange professionelle programmører bruger emacs og vim. Jeg tror også, at Eclipse håndterer den ekstra syntaks. Således ingen problemer med Qt-makroer (Q_OBJECT) eller tilføjelser af signaler / slots. Du vil sandsynligvis ikke finde disse makroer i Visual Studio, fordi (jeg indrømmer) at de er tilføjelser til C ++. Men stort set vil C # /. NET-folk ikke bruge Qt alligevel på grund af det faktum, at de har meget af funktionaliteten dækket af deres egne beskyttede teknikker.

  3. Hvad angår størrelsen på Qt-kilden, så længe den kompileres natten over, hvem er det ligegyldigt? Jeg kompilerede Qt 4 på min dual core Macbook i “mindre end natten over.” Jeg håber bestemt ikke, det er det, der driver din beslutning til bruge eller ikke bruge en bestemt teknologi. Hvis dette virkelig er et problem, kan du downloade de forud kompilerede SDKer til Mac, Linux og Windows fra Qt-webstedet.

  4. Licensering er tilgængelig i tre valg: 1) Proprietær licens, hvis du ønsker at ændre Qt ITSELF og ikke dele, eller skjule det faktum, at man bruger Qt og ikke er villig til at give tilskrivning (kan være meget vigtigt for branding og billede!) 2) GPL og 3) LGPL.Ja, der er problemer med statisk sammenkædning (rullende hele Qt i binær) – men jeg tror, det er mere, fordi man ikke kan kigge ind og bemærke, at du er u syng Qt (tilskrivning!). Jeg forsøgte at købe en licens fra Digia, og de fortalte mig “for hvad du laver, har du virkelig ikke brug for det.” Wow. Fra en virksomhed, der er i færd med at sælge licenser.

  5. Størrelsen på binær / bundtet skyldes, at du er nødt til at distribuere Qt-tingene til folk, der ikke har det: Windows har allerede? Visual Studio-tingene, eller du skal installere kørselstiden. Mac kommer allerede med den enorme kakao og kan være dynamisk forbundet. Selvom jeg ikke distribuerer meget, har jeg aldrig fundet meget problem med at distribuere den statiske fil på ~ 50 megabyte (som jeg kan gøre endnu mindre med nogle af de binære stripper / komprimeringsværktøjer som UPX). Jeg ved bare ikke pleje nok til at gøre dette, men hvis båndbredde nogensinde var et problem, ville jeg tilføje et UPX-trin til mit build-script.

  6. Hvad definerer “Native Look and Feel?” Jeg tror “de fleste” er enige i, at Mac kommer tættest på et samlet udseende. Men her sidder jeg og ser på Safari, iTunes, Aperture, Final Cut Pro, Pages osv., Og de ser ikke ens ud på trods af at de er lavet af OS-leverandøren. Jeg synes, at “føler” -aspektet er mere relevant: widget-styling, lydhørhed osv. Hvis du er interesseret i lydhørhed, er her en god grund til at bruge C ++ i stedet for Java eller et andet meget dynamisk sprog. (Mål C rokker også, men jeg prøver at fjerne myter om Qt)

Sammenfattende er det et kompliceret emne. Men jeg vil gerne påpege, at jeg mener, at der er færre grunde til at “ikke bruge Qt”, som man måske tror baseret på myter og årti-forældede oplysninger.

Kommentarer

  • Det, jeg ikke får ', er, hvorfor disse tværplatformsbiblioteker ikke er ' t simpelthen wrapper-funktioner , eller endnu bedre; hvis defs omkring Cocoa, Win32, KDE / Gnome fungerer, hvilket sikrer den bedst mulige brugergrænseflade med alt det ' s funktioner.
  • @MarcusJ Skriver en indpakning rundt et værktøjssæt er tydeligt ikke-trivielt, ligegyldigt 4 eller mere – men hvis du synes det ' er så let, er du ' velkommen prøve. Hvad angår ideen om, at dette kun kunne opnås ved hjælp af kun betinget forbehandling … skal du sjov, ikke?
  • @MarcusJ libui er netop det (dog uden KDE-understøttelse).
  • Jeg vil tilføje, at du nu kan bruge Qt / QML med .NET. Du behøver ikke ' at røre ved C ++. github.com/qmlnet/qmlnet PS: Jeg ' m forfatteren.

Svar

Noget af det er licens. Se https://en.wikipedia.org/wiki/Qt_(software) #Licensing for nogle af licenshistorikken. Indtil 2000 brugte folk, der bekymrede sig stærkt om open source, ikke Qt. Periode. (Dette var faktisk den oprindelige motivation for udviklingen af Gnome.) Indtil 2005 brugte folk, der ønskede at være i stand til at frigive gratis software til Windows, ikke Qt.Selv efter denne dato havde folk, der ønskede gratis software under noget andet end GPL, simpelthen ikke mulighed for at bruge Qt. Ethvert gratis softwareprojekt, der er ældre end disse datoer, kunne ikke bruge Qt. Og selvfølgelig måtte folk, der skrev proprietær kode, betale for privilegiet.

Desuden er det ikke som om der er en mangel på andre muligheder. F.eks. WxWidgets , GTK + og Tk er alle open source, værktøjssæt på tværs af platforme.

Desuden var Windows i lang tid så dominerende på skrivebordet, at meget software var indhold til kun at køre på Windows. Hvis du installerer Microsoft værktøjskæde, er det nemmere bare at bruge Microsofts proprietære ting, end det er at bekymre sig om noget andet, og mange programmerere gjorde netop det.

Kommentarer

  • @btilly: GTK + er platform. For eksempel er Pidgin IM-klienten skrevet på GTK +.
  • Ok, det er dog muligt ' på en eller anden måde ' at køre på Windows 🙂
  • Installer bare GIMP på Windows og se.
  • Ja, og GIMP fungerer godt på Windows, men det

passer ikke ind i Windows 7 UI look & føler.

  • Pidgin er sandsynligvis et bedre eksempel på GTK på Windows. Det gør ' ikke noget fancy, men det passer ind og har måske i 10 år eller mere?
  • Svar

    Jeg er enig med næsten alle de grunde, der er diskuteret ovenfor, men mange mennesker her har sagt, at de ikke ville bruge Qt på grund af den ekstra omkostning, det medfører. Jeg er uenig med det, fordi alle de mest almindelige sprog i dag (Java, C # og Python) bærer en hel del overhead selv.

    For det andet gør Qt programmering med C ++ så let og ligetil, at det kompenserer for ekstra ressourcer, det bruger. Jeg har stødt på en hel del konsolapplikationer skrevet i Qt snarere end standard C ++ på grund af den lethed, hvori de kan skrives.

    Jeg vil sige, at produktiviteten af Qt er større end for C / C ++, men mindre end sprog som Python.

    Kommentarer

    • Jeg antager, at det ' er alt i forhold til den individuelle ' oplevelse, fordi jeg kan kode OK i C ++ 14, men hver gang jeg kigger på en eller anden Qt-kode, er jeg nødt til at kaste hårdt for at genkende det som det samme sprog … så jeg tror bestemt ikke ' ikke tænker det ' er den enstemmige produktivitetsforøgelse, du ' antyder her.
    • @underscore_d selvfølgelig, hvis du kender C ++ meget godt, og du ikke ' t Qt, du bliver ikke mere produktiv med sidstnævnte. Men når du lærer at kende både C ++ og Qt, gør rammen virkelig mange ting lettere og hurtigere at implementere (C ++ 11, 14 osv. Udfylder hullet, men ikke helt endnu).

    Svar

    Dette er virkelig ikke et forsøg på at starte en flammekrig, jeg ville bare tage fat på nogle af punkterne.

    Den virkelige årsag til, at Qt ikke bruges mere, er sandsynligvis, at det er C ++, og færre mennesker bruger c ++ til desktop-apps.

    Qt er ikke et C ++ – bibliotek. Det kræver et separat kompileringstrin, hvilket gør byggeprocessen meget mere kompliceret sammenlignet med de fleste andre biblioteker.

    vs-addin til visual studio gør dette automatisk, ligesom Qts egen kommandolinjeproces gør. Ressource-kompilatoren, der blev brugt til at opbygge dialogerne til MFC, er også et separat trin, men at “s stadig er c ++.

    Qt er en stor mængde kilde, som skal være til stede og forudinstalleret på enhver maskine, du bruger inden kompilering. Dette kan gøre opsætningen af et byggemiljø meget mere kedeligt.

    Der findes en binær download til hver version af visual studio og build fra source er en enkelt kommando. Jeg kan ikke se, at SDK-kildestørrelse er så meget af en aftale i disse dage. Visual studio installerer nu alle C ++ libs i stedet for at lade dig vælge og vælge, som et resultat er kompilatorens installationsstørrelse> 1Gb.

    It ” er kun tilgængelige under LGPL, hvilket gør det vanskeligt at bruge single-binær-implementering, når man har brug for at frigive under en mere restriktiv eller mindre restriktiv licens.

    LGPL gælder kun for lib, det påvirker ikke din kode. Ja, det betyder, at du er nødt til at sende DLLer i stedet for en enkelt binær (medmindre du betaler), men i en verden, hvor du har brug for at downloade en Java-runtime eller en .Net-opdatering til en lille funktion, er det ikke sådan en stor ting. Det “er også mindre af et problem på platforme med en enkelt ABI, så andre Qt-apps kan dele libs.

    I nogle tilfælde gør det bare ikke” ikke se ud som de oprindelige programmer ser ud.At designe en enkelt brugergrænseflade til alle platforme vil i sagens natur ikke se rigtigt ud, når den flyttes fra maskine til maskine, af forskellige visuelle stylingsmæssige grunde. at bruge native widgets og temaer. Jeg må indrømme, at jeg for det meste laver tekniske apps, så mine brugere er ikke for bekymrede over stil. Især på windows betyder den nye måde at have alt på sig selv som en smartphone-widget, at der alligevel er mindre og mindre standard.

    Kommentarer

    • En hel del store softwarevirksomheder bygger kommercielle applikationer i C ++, men jeg ' er ikke opmærksom på meget mange, der bruger QT. Så selvom jeg forstår, at ikke-C ++ – udviklere måske undgår QT, er der andre grunde til at undgå QT, selv når du skriver en C ++ – app, ser det ud til. Faktisk er der ikke ' t hvilket som helst platformssprog og GUI-værktøjssæt, som jeg ikke kan ' ikke finde fejl med. Det ser ud til, at udvikling på tværs af platforme er BARE PLAN HARD, og at det ikke er let eller gratis at gøre det godt, og at løftet, QT giver (Skriv din GUI en gang og genbrug den GUI overalt) er ikke '
    • Mest desktop C ++ – software findes enten i MFC, fordi den startede for 20 år siden eller bruger et internt værktøjssæt, der startede for 20 år siden for at undgå MFC (f.eks. MS-Office eller Autocad). Jeg tvivler meget på, at der skrives i C ++ / CLR med WPF. Men selv uden platformovervejelser finder jeg Qt det bedste (eller mindst værste!) Desktop-værktøjssæt. Som de fleste mennesker bevæger vi os mod en webby-frontend (muligvis i QtQuick / QML) og en C ++ server-backend – som sandsynligvis vil bruge Qt-signaler / slots, men ingen gui
    • Jeg er enig. Mindst værst. Og selv på apps, der kun er Windows, <

    foretager jeg heller fejlretning af QT-problemer end MFC-problemer.

  • @WarrenP – ja jeg don ' gå ikke glip af at søge i kodeprojekt efter alle de ting, der mangler fra MFC. Men med MSFT ' s nyfundne kærlighed til indfødt kode – de har ' ikke gjort meget for at gøre det lettere at skrive en gui.
  • Svar

    Årsagen er enkel: det har ikke gode bindinger til alle almindelige sprog, og det er ikke magisk altid passende for det aktuelle job.

    Brug det rigtige værktøj til jobbet. Hvis jeg skriver et simpelt kommandolinjeapplikation, hvorfor ville jeg da blæse det op med Qt bare for at gøre det?

    Som et mere generelt svar (som jeg kan give, fordi jeg er relevant her ), vil nogle programmører simpelthen aldrig give det en chance og besluttede at bruge det. I nogle tilfælde er der ingen særlig grund, bortset fra at programmøren aldrig har fundet et behov for det og undersøgt det.

    Kommentarer

    • Men Qt giver evne til kun at skrive konsolapplikation. Er det ikke '?
    • @Dehumanizer: Jeg aner ikke. Men hvorfor skulle jeg bruge det til et lille værktøjsværktøj? Hvilken fordel ville det medføre, når jeg trivielt kan skrive applikationen i bare standard C ++? Ser ud til at du ' er på udkig efter en grund til at bruge et bibliotek , som er en baglæns måde at programmere på.
    • @Dehumanizer: Som Jeg sagde, at ' er en bagudgående tilgang. Når du finder et behov for et bibliotek, ved du det ', og så kan du prøve nogle få og se, hvad der passer bedre til dit behov. At prøve at samle mening om et bibliotek når du ikke ' ikke har en brugssag er en fjols ' s ærinde.
    • " Hvis jeg ' skriver en simpel kommandolinjeapplikation, hvorfor ville jeg da sprænge det op med Qt bare for det " er der mindst et meget berømt ikke-gui-værktøj skrevet i Qt – Doxygen 🙂
    • @Dehumanizer for eksempel når du skal håndtere filer, xml, unicode, json, regexp, concurency, databaser osv. osv., meget hurtigt og ikke ' t vil downloade, vedtage, vedligeholde dusin 3. festbiblioteker.

    Svar

    Rammer som Qt er passende, når du er mere bekymret over, at dit produkt ser ud det samme på alle platforme end med, at dit produkt ser rigtigt ud på alle platforme. Oftere og oftere går disse typer applikationer i disse dage til webbaserede teknologier.

    Svar

    efter min mening, at lære C ++ programmering er enklere end at falde på andre sprog, der skjuler deres kompleksitet, og programmør ved ikke hvad virkelig sker i baggrunden. Qt på den anden side tilføjer nogle fordele i forhold til C ++ for at gøre det højere niveau end native C ++. Således er Qt C ++ en god ramme for, hvem der ønsker at udvikle lavt niveau-opgaver eller højt niveau-opgaver på samme måde. C ++ er (efter nogle fremgangsmåder) et komplekst og simpelt sprog. Kompleks for hvem der ikke ønsker at udfordre med det, enkelt for en der kan lide det.Lad det ikke være for kompleksiteten!

    Svar

    Jeg er enig i, at Qt er en god ramme at arbejde med. Der er stadig en række problemer, jeg har med det:

    1. Det er skrevet i C ++, hvilket er et virkelig lavt sprog. Det faktum alene, at det er C ++, vil gøre hver Qt-programmør betydeligt mindre produktiv sammenlignet med Frameworks skrevet på andre sprog. Mit vigtigste oksekød med C ++ som GUI-udviklingssprog er, at det næsten ikke har nogen forestilling om automatisk hukommelsesstyring, hvilket gør udviklingsprocessen meget mere tilbøjelig til fejl. Det er ikke introspektivt, hvilket gør fejlretning meget vanskeligere. De fleste af de andre store GUI-værktøjssæt har en vis opfattelse af automatisk hukommelsesadministration og introspektion.
    2. Hvert værktøjssæt på tværs af platforme lider under problemet, at det kun nogensinde kan implementere den mindst fællesnævner af alle understøttede platforme. Det og forskellige UI-retningslinjer på forskellige platforme sætter meget spørgsmålstegn ved ønskværdigheden af cross-platform GUIer som helhed.
    3. Qt er meget centreret om kodning af alle dine brugergrænseflader. Selvom du kan bruge QtDesigner til at opbygge nogle dele af din brugergrænseflade, mangler den alvorligt i sammenligning med f.eks. (Cocoa / Obj-C) Interface Builder eller. Net-værktøjerne.
    4. Selvom Qt indeholder mange applikationsfunktioner på lavt niveau, kan det ikke sammenlignes med at have en ramme, der er skræddersyet til en bestemt platform. De oprindelige operativsystembiblioteker til både Windows og OSX er betydeligt kraftigere end Qts implementeringer. (Tænk lydrammer, filsystemadgang på lavt niveau osv.)

    Når det er sagt, så elsker jeg PyQt til hurtig applikationsprototypning eller interne applikationer. Brug af Python til at udføre al kodning lindrer bekymringerne med C ++ og gør Qt faktisk til et meget behageligt sted.


    Rediger, som svar på nogle kommentarer:

    Da jeg skrev om Qt, der blev skrevet i C ++, klagede jeg ikke så meget over Qt selv , men mere om det miljø, det lever i. Det er rigtigt, at Qt administrerer sine egne ressourcer meget godt, men al din GUI-relaterede-men-ikke-Qt-kode skal også skrives i C ++. Selv der giver Qt mange gode værktøjer, men i sidste ende er du nødt til at beskæftige dig med C ++ på dette niveau. Qt gør C ++ tåleligt, men det er stadig C ++.

    Med hensyn til introspektion, hvad jeg mener er dette: De sværeste sager at debugge er når du have en markør til et objekt, der ikke opfører sig som du synes det skal. Med C ++ kan din debugger muligvis se lidt inde i objektet (hvis det tilfældigvis har typeoplysninger på thwt-punktet), men selv det fungerer ikke altid. Tag på den anden side kakao i samme situation. I Cocoa / Obj-C vil du være i stand til at sende meddelelser (“opkaldsfunktioner”) til et objekt lige inden i fejlfindingsprogrammet. Du kan ændre objekternes tilstand, du kan søge efter dens attributter, du kan bede den om dens type og dens funktionsnavne … Dette kan gøre fejlretning meget mere praktisk. Qt / C ++ har ikke noget tæt på det.

    Kommentarer

    • 1. Qt bekymrer sig om hukommelsesadministration alene, du skal ikke ringe til ' slet ' efter hver ' ny '. 1a. C ++ er IKKE lavt sprog, det er sprog på højt niveau med lavt niveau ' evner '. 3. Jeg er enig, men Qt giver mulighed for at oprette et brugergrænseflade med QtDesigner og med ' almindelig kode ' på samme tid. 4. Enig igen, men Qt giver også mulighed for at bruge native APIer.
    • til dit punkt nr 1. Jeg tror, at c ++ har en slags halvautomatisk hukommelsesstyring: hvis du bruger smarte pointer som std :: auto_ptr eller boost :: shared_ptr osv. behøver du generelt ikke bekymre dig om at frigøre hukommelse. Denne type containere kan også laves til andre ressourcer (filer, systemressource, der skal frigøres). Brug af RAII-mønster hjælper meget med hukommelsesstyring, og når det vokser ind i dig, behøver du ikke virkelig bekymre dig om hukommelse.
    • " Alene det faktum, at det er C ++ vil gøre hver Qt-programmør betydeligt mindre produktiv sammenlignet med Frameworks skrevet på andre sprog. " [citat behov]
    • @ SK-logik: Mens jeg tror Jeg forstår alle ordene i din tredje sætning, jeg aner ikke hvad du siger. Hvad er et " abstraktionsniveau "? For den sags skyld er din første sætning falsk, givet Wikipedia-definitionen af " sprog på lavt niveau ".
    • @ SK-logik: Skabelonmetaprogrammering er Turing-komplet, og der er folk, der er kloge og kyndige nok til at drage fordel af det. RAII er ikke ' t stor affaldssamling, men det faktum, at det fungerer til alle mulige ressourcer, kompenserer mere eller mindre for det.Hvilken slags abstraktion fungerer nu specifikt i Java, men ikke C ++?

    Svar

    Det vigtigste men ikke nævnt ting. I stort projekt forårsager én ting så mange problemer og ikke-nødvendig kode. Qt “s signal slot mekanismer er ineffektiv. Qt widgets giver ikke nødvendige signaler til begivenhed enkle widgets. For eksempel kan du ikke indstille signaler til onHover, onMouseEnter, onMouseLeave, onKeyReleased, onLostFocus, onGainFocus og osv. Selv den mest komplekse widget som f.eks. QTreeWidget leverer et eller to ultra enkle ubrugelige signaler.

    Ja, du kan bruge begivenheder MEN !!! du har oprettet en ny klasse til hver widget med brugerdefineret begivenhed. Dette er enorm effektivitet tabt;

    • Du har omskrevet hver tilpasset widgetobjektbegivenhed, der er små ændringer.
    • Du mister alle Qt Designer-ting. Du skal promovere hver widget med brugerdefinerede begivenheder.
    • Projektet blev større og svært at vedligeholde.
    • Du begyndte ikke at lide qt på grund af dette. Og begynder at tale om, hvordan .net giver delegerede, hvordan det er meget meget meget bedre end signalplads, hvordan .net komponenter (widgets) giver generelt alle begivenheder, du kan forestille dig. Og osv.

    En af mine college har skrevet lavet en ny kombinationsboks klasse for hver kombinationsboks widget, fordi han var nødt til at bruge en begivenhed uden signal. Ægte historie …

    Qt er dog den bedste C ++ UI-ramme indtil videre med nedture og opadgående.

    Kommentarer

    • Hvad angår begivenheder og oprettelse af nye klasser: Du kan bruge begivenhedsfiltre i klasser, der skal reagere på dem.
    • " Ja, du kan bruge begivenheder MEN !! ! du har oprettet en ny klasse for hver widget med brugerdefineret begivenhed. Dette er enorm effektivitet tabt; " – IKKE PRÆCIS. Jeg ender bare med bool eventFilter, der håndterer flere widgets og derefter installererEventFilter (dette) på alle underordnede widgets. Og dette mister ikke ' effektivitet og programmeringsydelse! Faktisk bruger jeg aldrig " Promoverede widgets " … Jeg slipper bare en tom widget, installerer dette som eventFilter på det og genimplementerer det meste af mine begivenheder i min vigtigste cpp-klasse. Prøv det, skete ikke ' 🙂 Du kan tilpasse næsten ALT i Qt uden at oprette nye klasser hver gang

    Svar

    Jeg kan virkelig godt lide Qt, men det er lidt tungt til mange applikationer. Nogle gange behøver du bare ikke det niveau af kompleksitet. Nogle gange har du bare brug for noget simpelt uden al Qts overhead. Ikke alle applikationer skal være hændelsesdrevne, og C ++ giver et rimeligt sæt skabeloner. Boost giver et andet meget godt sæt og inkluderer meget af det lave niveau funktionalitet (fil, socket, managed pointers osv.), Som QT gør.

    Andre applikationer har licenskrav, der ikke fungerer godt med GPL , LGPL eller Qts kommercielle licens. GPL er upassende til kommerciel software. LGPL er upassende til statisk linket software, og den kommercielle licens koster penge – noget, som mange ikke er villige til at betale.

    Nogle har sikkerheds- eller stabilitetsovervejelser, der ikke tillader komplekse biblioteker som Qt.

    Du skal køre moc for at forbehandle dine kilder. Det er ikke et stort problem, men det kan være skræmmende for den nye bruger. Mange programmører tror, at du har brug for at bruge qmake med Qt, men det er en misvisende beskrivelse. Det er muligt at tilslutte Qt til andre build-systemer ret let.

    Nogle mål er meget hukommelse eller CPU begrænset.

    Der er nogle platformsspecifikke gotchas i den. De fleste af disse gotchas er udokumenterede. Byg en tilstrækkelig stor applikation, så vil du løbe ind i dem og undre dig over, hvad der foregår sidste gang jeg brugte Qt i vrede, var for over 18 måneder siden, så det kan være forbedret).

    Det er kun C ++. Andre sprogbindinger findes, men de har tendens til at skjule eller udsætter dårligt meget af funktionalitet, som du vil have Qt til.

    Der er mange grunde til ikke at bruge Qt, det er derfor, der er alternativer. Hvis alt hvad du har er en hammer, vil ethvert problem se ud som et søm.

    Kommentarer

    • " LGPL er upassende til statisk linket [lukket kilde] -software " – det synes at være unøjagtigt, da LGPL og statisk sammenkobling faktisk er juridisk mulig ( se ).
    • Din position ser ud til at være korrekt. Se gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic Men det ' s ekstra arbejde og ekstra ting at sende. Kan du slippe af sted med det? Ja. Vil du bruge indsatsen? Muligvis ikke.

    Svar

    Den egentlige årsag er ikke teknisk.

    Folk sker at være anderledes. Så er deres valg. Ensartethed er ikke et menneskeligt træk.

    Kommentarer

    • Er det derfor, alle mennesker går på benene? De, der i det mindste har ben …

    Skriv et svar

    Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *