Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Qt:n tapahtumat eli signaalit

jsbasic [11.04.2011 21:53:43]

#

Qt Designerilla voi piirtää ikkunat, ja määritellä koodi käsittelemään niiden tapahtumia. Jostain syystä tapahtumia eli signaaleita on rajoitettu. Olisi tarve käsitellä tapahtuma, jossa käyttäjä klikkaa TextEditissä tekstiä, mutta Designerin Go to slot -valikosta sellaista tapahtumaa ei löydy. Class Referencen mukaan sellainen Qt:stä kuitenkin löytyy TextEditille, jopa kaksoisklikkaukselle erikseen.

Tietääkö joku mitä pitäisi tehdä jos haluaa tunnistaa klikkauksen.

jimi-kimi [12.04.2011 09:23:06]

#

Varmaan tajuat idean ilman sen kummempia selittelyjä..
http://warmi.net/docs/qt_4.6.3/html/designer-creating-mainwindows.html

jsbasic [12.04.2011 14:38:56]

#

jimi-kimi kirjoitti:

Varmaan tajuat idean ilman sen kummempia selittelyjä..
http://warmi.net/docs/qt_4.6.3/html/designer-creating-mainwindows.html

Eipä tuo sivu paljoa auta...

The Alchemist [12.04.2011 15:00:09]

#

Otsikko ei tee järkeä. Eventit eivät ole slotteja tai signaaleita. Ne ovat kaksi eri konseptia.

1. Eventit ovat protected-funktioita, joita kutsutaan automaattisesti tietyn tapahtuman yhteydessä. Niitä ei voi muokata kuin subclassaamalla kyseisen luokan / widgetin.

2. Signaalit ovat jokseenkin kuten eventit, mutta niitä voidaan kuunnella myös luokan ulkopuolelta. Signaali ei itsessään tee yhtään mitään, vaan se pitää ensin yhdistää johonkin slot-funktioon. QTextEdit-luokan ainoa tekstin valitsemiseen liittyvä signaali on selectionChanged().

Eventtejäkin voidaan itse asiassa käsitellä toisessa oliossa event filterin avulla, mutta en nyt selitä siitä, koska luulen että tekisit väärin, jos lähtisit käyttämään sitä tässä tapauksessa.

Jimi-kimi: Qt:n irc-kanavallakin kielletään googlettamasta dokumentaatioita. Käytä Qt:n virallisia dokkareita @ http://doc.qt.nokia.com/latest/. Usein käy niin, että ihmiset vahingossa katsovat liian vanhan version käyttöohjeita ja joutuvat siksi uusiin ongelmiin.

jsbasic [12.04.2011 16:42:08]

#

The Alchemist kirjoitti:

1. Eventit ovat protected-funktioita, joita kutsutaan automaattisesti tietyn tapahtuman yhteydessä. Niitä ei voi muokata kuin subclassaamalla kyseisen luokan / widgetin.

Siis eventtejä kutsutaan tapahtumien yhteydessä? Minähän puhuin tapahtumista ja sinä annat ymmärtää että eventti ja tapahtuma on eri...?

No joka tapauksessa minun oli tarkoitus tehdä yksinkertainen linkki editoitavaan teksiin. Olisinhan voinut sen sanoa. Vaikeaa on ajatella yhtä aikaa ruohonjuuritasolla (signaalit) ja korkeampien käsitteiden (valmiit ohjelmistokomponentit) tasolla.

Taitaa siis olla järkevintä käyttää QTextBrowseria, jossa linkin klikkaaminen on tavanomaisempi tapahtuma.

The Alchemist [12.04.2011 17:10:32]

#

En ymmärtänyt tuosta viestistäsi juuri mitään. Väitit eventtejä signaaleiksi ja minä korjasin, että ne ovat kaksi eri asiaa. Viestissäni käytin termiä "event" kuvaamaan event-funktioita (mouseClickEvent, mouseMoveEvent, ...) ja "tapahtumalla" tarkoitin fyysistä toimintoa kuten hiiren klikkaus tai kursorin liikkuminen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta