Seite 1 von 3
markierten Text in einem textEdit ändern?
Verfasst: 4. Januar 2007 23:53
von ensacom
Hallo, ich bin absoluter Anfänger in Sachen Qt3
ich möchte nun den markierten Text in einem textEdit zwischen html-tags setzen.
Aus "hallo Text" soll also z.B. "<b>hallo Text</b>" werden.
Ich bin nun so weit, wobei jedoch der nicht markierte Text entfernt wird was ja nicht sein soll.
Code: Alles auswählen
void Form1::boldtextSlot()
{
textEdit1->setFocus();
textEdit1->setText("<b>"+textEdit1->selectedText()+"</b>");
}
Ich hoffe mir kann einer helfen.
Danke
Verfasst: 5. Januar 2007 01:29
von -=Freaky=-
Code: Alles auswählen
void Form1::boldtextSlot()
{
textEdit1->setFocus();
QString str = textEdit1->.text();
int pos = str.indexOf( textEdit1->selectedText() );
str.insert( pos, "<b>" );
str.insert( pos+textEdit1->selectedText().length()+3, "</b>" );
textEdit1->setText( str );
}
bei mir funktioniert das so.
mfg,
julian
Verfasst: 5. Januar 2007 01:59
von ensacom
Vielen Dank, leider funktioniert es nicht
ich bekomme immer folgende Fehlermeldung
Code: Alles auswählen
.ui/../form1.ui.h: In member function ‘virtual void Form1::boldtextSlot()’:
.ui/../form1.ui.h:97: error: expected unqualified-id before ‘.’ token
.ui/../form1.ui.h:98: error: ‘class QString’ has no member named ‘indexOf’
make: *** [.obj/form1.o] Fehler 1
Verfasst: 5. Januar 2007 02:04
von -=Freaky=-
sorry, ich habe in der qt4-doku geguckt. probier mal, das "indexOf"einfach durch "find" zu ersetzen.
mfg,
julian
Verfasst: 5. Januar 2007 02:12
von ensacom
Danke, ich habe es jetzt so. Das mit der richtigen Position der tags stimmt zwar noch nicht aber das werde ich schon noch herausfinden.
Irgendwie beendet sich das Programm jetzt immer wenn ich ein Wort markiere und die tags erstellen lasse und ich dann einen Textabschnitt, in dem auch dieses bereits mit einem tag markierte Wort enthalten ist.
Code: Alles auswählen
void Form1::boldtextSlot()
{
textEdit1->setFocus();
QString str = textEdit1->text();
int pos = str.find( textEdit1->selectedText() );
str.insert( pos-1, "<b>" );
str.insert( pos+textEdit1->selectedText().length()+1, "</b>" );
textEdit1->setText( str );
}
[/quote]
Verfasst: 5. Januar 2007 02:22
von -=Freaky=-
ok, vielleicht funktioniert es so. sorry, ich kann es nicht ausprobieren was ich dir hier vorlege, ich ahbe im moment kein qt3 zur hand.
Code: Alles auswählen
textEdit1->setTextFormat( Qt::RichText ); // das gehört in den konstruktor von Form1
void Form1::boldtextSlot()
{
textEdit1->setFocus();
QString str = textEdit1->text();
int pos = str.find( textEdit1->selectedText() );
str.insert( pos, "<b>" );
str.insert( pos+textEdit1->selectedText().length()+3, "</b>" );
textEdit1->setText( str );
}
mfg,
julian
Verfasst: 5. Januar 2007 02:32
von ensacom
Danke dir. ich werde es gleich mal testen
Mir ist aber gerade was aufgefallen.
Wenn mein text mehrmals das Wort "Test" enthält und ich das dritte Vorkommen z.B. markiere und fett machen will, dann wird das erste Vorkommen fett gemacht nicht das markierte weil er ja nach dem markieretn string sucht und diesen abändert.
Wie kann ich das markierte Vorkommen bearbeiten lassen und nicht das erste?
Verfasst: 5. Januar 2007 02:52
von -=Freaky=-
textEdit1->setTextFormat( Qt::RichText ); // das gehört in den konstruktor von Form1
Code: Alles auswählen
void Form1::boldtextSlot()
{
textEdit1->setFocus();
textEdit1->insert( "<b>"+textEdit1->selectedText()+"</b>" );
}
sieht irgendwie sehr wagemutig aus, aber nach qt3-doku sollte das gehen. der text ( "<b>"+textEdit1->selectedText()+"</b>" ) wird an der aktuellen cursor-position eingefügt und die aktuelle markierung wird dabei standartmäßig zuerst gelöscht.
//edit: so bis morgen ich geh erstmal schlafen...gute nacht
mfg,
julian
Verfasst: 5. Januar 2007 03:30
von ensacom
Vielen Dank für deine Hilfe zu später Stunde
ich habe es jetzt so gelöst und es funktioniert einwandfrei.
Code: Alles auswählen
void Form1::boldtextSlot()
{
if( textEdit1->selectedText().length() > 0 )
{
textEdit1->setFocus();
textEdit1->insert( "<b>"+textEdit1->selectedText()+"</b>" );
textEdit1->removeSelectedText();
}
}
Gibt es eigentlich eine Möglichkeit diese funktion für z.B. 5 Buttons zu verwenden, so dass ich nur b, i, u oder s für die gewünschten tags übergeben muss?
Verfasst: 5. Januar 2007 03:51
von -=Freaky=-
da wollt man eiegtnlich schlafen und guckt dann doch schnell nochma rein...
frage:
funktioniert das nur mit der letzten zeile dran, also nur mit textEdit1->removeSelectedText(); ?? denn nach qt3-doku sollte das automatisch in der zeile davor passieren.
für mehrere buttons, wie meinst du das?
du könntest das so machen
Code: Alles auswählen
void Form1::formatTextSlot( const char &c )
{
if( textEdit1->hasSelectedText() ) // das ist eleganter find ich :)
{
textEdit1->setFocus();
textEdit1->insert( "<"+c+">"+textEdit1->selectedText()+"</"+c+">"
/*textEdit1->removeSelectedText();*/
}
}
wenn es das war was du wolltest mit den 5 buttons.
hierbei müsstest du nur noch irgendwo sicherstellen, dass auch nur gültige zeihen übergeben werden (nicht das da z.B. steht "<ü>FalschFormatierterText</ü>").
so jetzt aber...gute nacht!
mfg,
julian
Verfasst: 5. Januar 2007 13:38
von ensacom
Nochmal vielen Dank für deine Hilfe du hast mir wirklich sehr geholfen.
Du hattest auch recht damit dass die Zeile
überflüssig ist. Komisch Anfangs ging es nicht ohne diese Zeile.
Hast Du eine Idee wieso ich egal ob ich AutoText, PlainText oder RichText einstelle, immer nur den Quelltext gezeigt bekomme und der z.B. mit < b> Tags markierte Text nicht auch fett angezeigt wird?
Verfasst: 5. Januar 2007 14:09
von -=Freaky=-
des rätsels lösung (auszug aus der qt3-textedit-doku):
If you use RichText then setText() and append() will assume that the text they are given is rich text. insert() simply inserts the text it is given.
insert() beachtet die html-tags also nicht.
mfg,
julian
Verfasst: 5. Januar 2007 14:14
von ensacom
Danke, ich habe mir jetzt neben Qt3 auch mal Qt4 installiert.
Kann es sein dass man unter Qt4 nur die Oberfläche erstellen kann?
Mit Qt3 kann ich ja das komplette Project erstellen. Bei Qt4 finde ich keinerlei Verweis auf den Source
Verfasst: 5. Januar 2007 14:17
von ensacom
Das verstehe ich jetz nicht ganz. Ich habe ganz am Anfang setText und Append versucht was jedoch den ganzen Text erst gelöscht hat so das zum Schluss nur noch mein mit tags ausgestatteter Text vorhanden war
Code: Alles auswählen
if( textEdit1->hasSelectedText() )
{
textEdit1->setFocus();
textEdit1->insert( "<b>"+textEdit1->selectedText()+"</b>" );
}
Verfasst: 5. Januar 2007 14:17
von -=Freaky=-
???
meinst du jetzt den Qt4-designer? ja, mit dem kannst du nur die oberfläche machen. aus der ui-datei lässt du dir dann mit uic eine klasse (c++-code) erstellen und mit der arbeitest du in deinem quelltext weiter. geht bestimmt auch direkt mit den ui-dateien, aber ich bin auch gerade neu bei Qt4 und hab keine ahnung, wie ich die funktionalität der klasse aus dem designer sonst einrichten sollte.
//edit:
ja, setText() ersetzt den kompletten text, und append() hängt einfch was hinten dran.
mfg,
julian