Sziasztok!
Qt4 programocska írásakor a következő problémába ütköztem:
Akarok egy olyan saját TextEdit osztályt létrehozni, ami úgy működne, hogy figyelem, hogy írt-e be valamit, és ha igen akkor egy bizonyos algoritmus alapján eldönteném, hogy hol kell pirosra színezni a szöveget. (A piros rész jelentené, hogy hol hibás már a bevitt szöveg.)
Mivel kezdő vagyok. Lefőttem. Szegmens hibával leáll a programom.
A saját TextEdit osztályom így néz ki:
class QRegExpValidator;
class QpjCheckTextEdit : public QTextEdit
{
Q_OBJECT
public:
QpjCheckTextEdit(QWidget* parent = 0);
private slots:
void formatText();
private:
QRegExpValidator* validator;
};
QpjCheckTextEdit::QpjCheckTextEdit(QWidget* parent)
: QTextEdit(parent)
{
QRegExp regExp;
validator = new QRegExpValidator(regExp, this);
QString pattern("[A-Za-z][1-9][0-9]{0,2}");
regExp.setPattern(pattern);
connect(this->document(), SIGNAL(contentsChanged()),
this, SLOT (formatText())
);
setText("Hello <font color=red>World!</font>");
}
void QpjCheckTextEdit::formatText()
{
insertPlainText(" not OK ");
}
Az igazi tervem, az az hogy engedek beírni mindent, de pirossal kiszínezném, onnan a szöveget, ahonnan már a bevitt minta szerint rossz. A példában csak próbáltam egyáltalán beszúrni valamit a már meglévő szöveghez, ha a felhasználó módosít valamit a szövegen.
Mit kellene tennem, hogy közelebb jussak a megoldáshoz?
- 912 megtekintés
Hozzászólások
A Qt-hoz adott syntax highliter példát nézegetted már?
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Persze nézegettem, de nem sokra jutottam vele, mert nekem még magas.
De lehet, hogy igazad van és muszáj valahogy átrágnom magam rajta.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Pontosan mi az az ANCHOR? Több helyen találkozok vele, de nem fogtam még fel, hogy mit ért rajta a Qt.
- A hozzászóláshoz be kell jelentkezni
Azt, amit általában :) Tehát szerintem html nyelvezettel élve egy hivatkozást. Bár horgonyként hivatkozik rá, mégis linkeket és "szakaszcímkéket" jelölnek vele. Célja pedig, hogy egyszerűsítse a szöveges dokumentumokban való navigációt.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Végtelen rekurzióra tippelek. Valószínűleg az insertPlainText miatt mindig generálódik újabb contentsChanged() signal.
- A hozzászóláshoz be kell jelentkezni
Igen ez nagyon lehetséges, hisz a szöveg megváltoztatása idítja a slot függvényt, de a szöveg újra megváltozik ebben a slotban, ezért folyamatos egymásra hivatkozás generálódik.
Nincs vajon olyan signal függvény, ami csak akkor emittálódik, ha a felhasználó változtatja meg a szöveget? Ha programból változtatjuk, akkor ne érkezzen signal.
- A hozzászóláshoz be kell jelentkezni
Indítsd el a Qt4 Assistant-ot, abban megtalálod az összes API-val kapcsolatos kérdésed.
assistant
____________________________________________________________
Slackware 12.1 - linux-2.6.25-olorin - KDE 3.5.9
- A hozzászóláshoz be kell jelentkezni
Ilyen tanácsokat fölösleges írni! Kösz.
- A hozzászóláshoz be kell jelentkezni
A formatText()-et alakítsd át úgy, hogy csak akkor végezze el a formázást, ha a kicserélendő rész-szöveg nem egyezik meg a kicserélő szöveggel.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Hát a QTextEditnek nincs ilyemi. Két workaround viszont van:
Nem szép, de formatTextbe csinálhatsz ilyet:
void QpjCheckTextEdit::formatText()
{
disconnect(this->document(), SIGNAL(contentsChanged()),
this, SLOT (formatText()) );
insertPlainText(" not OK ");
connect(this->document(), SIGNAL(contentsChanged()),
this, SLOT (formatText()) );
}
A másik pedig, hogy elkapod a signal-t és eldöntöd kell-e. Szerintem az előbbi egyszerűbb.
Használhatnád a textChanged()-et is QTextEditből, csak úgy mondom.
Az anchor, ha a QTextEditben olvastad, akkor a másodlagos cursor, az anchor és a cursor közötti terület a kijelölt.
- A hozzászóláshoz be kell jelentkezni
Az szerintem járható útnak tűnne, ha csak a font színét változtatom meg a programból. Szerintem akkor nem kellene, hogy contentsChanged() signal keletkezzen újra.
Nemdebár?
- A hozzászóláshoz be kell jelentkezni
De... :) legalábbis úgy emlékszem, hogy a formátum változás is generálja a signal-t.
- A hozzászóláshoz be kell jelentkezni
Igen.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Este kipróbálom a dii javaslatát.
Azért megvizsgálom a font színének megváltoztatásának hatását is.
Az anchor-t valóban a TextEdit-ben olvastam.
Így már világos, hogy mi is az.
Kösz dii!
Köszönöm Lajos észrevételét is a végtelen rekurzióval kapcsolatban. Jó megfigyelő!
f0xhu javaslata a körbehivatkozás elkerülésére is építő jellegű volt.
Remélem, tudok alkotni valamit, hogy működjön az elképzelésem. Ha nem jön össze, még jelentkezem.
- A hozzászóláshoz be kell jelentkezni