Ny Signal & # x2F; Slot syntaks med foreldre QWidget?

Jeg prover bare a forsta hvordan du bruker «nye» signal & amp; spor syntax i QT.

Jeg har en enkel QWidget som utsender «pi» til en promotert underklasse-widget.

Det fungerer uten problemer med den gamle SIGNAL / SLOT-syntaksen. Men hvordan a gjore det med det nye?

Jeg har kommentert arbeidsdelen. Linjen etter at den er feil.

koden for den fremrykkte widgeten «myWidget.cpp»:

Jeg far feilen.

Hvordan kommer jeg til det foreldre widget-signalet med den nye syntaksen?

Den nye syntaksen bruker pekere til medlemsfunksjoner. Dette betyr at du bare gir den en peker og hopper over argumentene. Det betyr ogsa at du trenger a vite klassen til foreldrene:

Du kan ikke bruke & QWidget :: send_pi fordi QWidget ikke har et slikt signal.

hmm ok, nar jeg gjor det:

Da skal linjen v re:

Den overordnede widgeten bor v re denne:

og den manglende.

Det er noe annet galt.

Da skal linjen v re:

Koble til (foreldre, og Widget :: send_pi, dette, og minWidget :: showPi);

Yup, unntatt foreldre, er en peker til QWidget i din forste kode, ikke til Widget. Hvis du vil bruke den her, ma du kaste den:

men det er en darlig ide. Du kan ikke garantere fra funksjonen hvilken forelder vil bli gitt som en parameter (med mindre du endrer den til Widget * i stedet for QWidget *).

Denne koblings setningen bor virkelig bli tatt ut av myWidget til koden som ser bade objektene som blir koblet til og deres typer, for eksempel:

Btw. Du bor virkelig bestemme seg for navnekonvensjonen din. En klasse er camel-case andre ikke, en funksjon bruker sma og understreker og en annen kamel-sak. Det blir mektig forvirrende hva er hva.

Yup, unntatt foreldre, er en peker til QWidget i din forste kode, ikke til Widget. Hvis du vil bruke den her, ma du kaste den:

Er du sikker, Chris? Jeg er ganske overbevist om at noen QObject * vil gjore. 🙂

Selv om vi aksepterer, som det grunnleggende prinsippet om ekte demokrati, er den ene moronen lik ett geni, er det nodvendig a ga et skritt videre og hold fast at to moroner er bedre enn ett geni?

@kshegunov Ganske sikkert, men du tvilte meg for et sekund der;) Sa jeg sjekket og sikkert nok:

resulterer i en kompileringsfeil:

Awww, det er oppkast. 🙁

Selv om vi aksepterer, som det grunnleggende prinsippet om ekte demokrati, er den ene moronen lik ett geni, er det nodvendig a ga et skritt videre og hold fast at to moroner er bedre enn ett geni?

Denne koblings setningen bor virkelig bli tatt ut av myWidget til koden som ser begge objektene.

Jeg har ingen kode som ser begge, jeg vil tenke pa det stedet.

Btw. Du bor virkelig bestemme seg for navnekonvensjonen din. En klasse er camel-case andre ikke, en funksjon bruker sma og understreker og en annen kamel-sak. Det blir mektig forvirrende hva er hva.

Jeg er helt enig og jeg vil jobbe med det.

Takk for hintene. Bare ett sporsmal. Er det kommentert a koble linjen korrekt i det tilfellet? Eller er det ogsa sa problematisk som det nye signal / spor syntaks?

Koble (foreldre, SIGNAL (send_pi (dobbel)), dette, SLOT (showPi (double)));

Det kan fungere i ditt spesielle tilfelle, men Det har akkurat det samme generelle problemet, dvs. hvis foreldrene ikke er en Widget *, er det ikke noe slikt signal, og forbindelsen vil ikke fungere.

Forskjellen er at dette vil kompilere fint og bare tydelig mislykkes ved kjoring (med en advarsel pa utgangen), mens den nye syntaksen ikke lar deg kompilere dette, noe som er mye bedre fordi det gir deg en sjanse til a fikse det riktig vekk og ikke etter at en bruker av appen din har rapportert en feil 🙂

takk for det opplysende!

Ser ut som din forbindelse til Qt Forum var tapt, vent mens vi forsoker a koble til igjen.