Come formattare il testo selezionato in un QTextEdit premendo un tasto
-
30-09-2019 - |
Domanda
Voglio formattare un testo selezionato in un QTextEdit facendo clic su un pulsante. Per axample Voglio fare grassetto se non è grassetto, o no-bold se è in grassetto. Please help me con un esempio.
Modifica
In realtà ho trovato già un codice - qt demo per editor di testo che fa quello che mi serve:
void
MyTextEdit::boldText(bool isBold) //this is the SLOT for the button trigger(bool)
{
QTextCharFormat fmt;
fmt.setFontWeight(isBold ? QFont::Bold : QFont::Normal);
mergeFormatOnWordOrSelection(fmt);
}
void
MyTextEdit::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
{
QTextCursor cursor = m_textEdit->textCursor();
if (!cursor.hasSelection())
cursor.select(QTextCursor::WordUnderCursor);
cursor.mergeCharFormat(format);
m_textEdit->mergeCurrentCharFormat(format);
}
Ma non riesco a capire che cosa returnes TextCursor () metodo, e come si sta facendo la fusione delle proprietà? Solo alcuni formati vengono modificate, alcuni di loro rimangono costanti. Come mergeCharFormat Funzione capisce cosa cambiare e cosa lasciare così com'è. Si prega di spiegare a me solo queste 2 cose. Grazie.
Soluzione
Il TextCursor () restituisce un TextCursor che contiene la posizione del cursore si usa in TextEdit, vedi QTextCursor nelle classi Qt. Così selezionando il testo che è contenuto entro l'inizio cursore e posizione finale, si ha il testo che è attualmente Highlited.
Per quanto riguarda il mergeCharFormat, immagino che è utilizzato per applicare un nuovo stato (grassetto, corsivo, sottolineato) e per mantenere quelli esistenti. Dire il testo è già sottolineato e si applica in grassetto, si vorrebbe mantenere entrambi.
Spero che questo aiuti.