2013-02-14 24 views
5

Şu anda Qt4 kullanarak iş için bir uygulama geliştiren bir öğrenci programcısıyım. Bir denklem düzenleyicisi oluşturuyorum ve QTextEdit alanımdaki bir dizeyi vurgulamaya çalışırken sorunlarım var. QTextEdit dizesi ile ayrılan ve bir hatanın bulunduğu bir başlangıç ​​ve bitiş tamsayı döndüren bir işlev var. Orijinal stratejim, hataları vurgulamak için bu iki noktada HTML etiketlerini kullanmaktı. Ne yazık ki, html etiketleme ve denklem sözdizimi ile ilgili bir sorun var gibi görünüyor.Bir QTextEdit içindeki bir metin dizesi nasıl vurgulanır

İhtiyacım olan şey, QT'nin kütüphanesine dayanarak, bu iki dizin arasında arka plan rengi ayarlamak için kullanılan bir stratejidir. QSyntaxHighlighter aramaya başladım; bununla birlikte, bunun önceden tanımlanmış bir dizi yasa kullanmanın altını çizmek için olduğunu ve sadece & b arasında hiçbir şey yakalamadığını ve arka plan rengini belirlediğini düşünüyorum. Sözdizimi vurgulayıcıyı kullanabilirsem, lütfen belgeyi okuduğumdan ve bir şey bulamadığım için bana ve örnek veya referans verin.

Yardımlarınız için şimdiden teşekkür ederiz!

P.S. Sadece html uyumluluk konularını vurgulamak için; html, birden fazla < ve kullanılan> işaretler nedeniyle sorunlu hale gelir.

cevap

10

Bunun için QTextCursor ve QTextCharFormat kullanabilirsiniz:

QTextEdit *edit = new QTextEdit; 
... 
int begin = ... 
int end = ... 
... 

QTextCharFormat fmt; 
fmt.setBackground(Qt::yellow); 

QTextCursor cursor(edit->document()); 
cursor.setPosition(begin, QTextCursor::MoveAnchor); 
cursor.setPosition(end, QTextCursor::KeepAnchor); 
cursor.setCharFormat(fmt); 
+0

Bu Sonunda dönüm sona erdi budur etmek .. Bu cevap sorun sonradan varsayılan rengine geri metni ayarlayamıyor görünmesidir . Yaptığım şey arka plandaki renk değişimini çizerek ve belirli bir noktaya denk gelen hata parçasını, fareyi başka bir yere tıklayana kadar seçili metne dönüştürmek. Açıkça kırmızıyla ilgili sorunları vurgulamıyorum, ancak bu çözüm benim ihtiyacım olan şeyi yaptı; Daha sezgisel bir denklem kontrolü aracı için ihtiyacım olan metni vurgulayın. –

+0

Aynı şekilde arka plan rengini de ayarlayabilirsiniz. Daha önce seçmiş olduğunuz metin pozisyonlarını kaydetmeniz yeterlidir. – hank

+0

Ne yazık ki, metin düzenleme alanından yayılan bir tetikleyiciye olan güven nedeniyle bu mümkün değil. Kullanıcı kutuya geri tıkladığında, vurgulamanın kaybolmasını istiyorum. İmlecin bu sinyal yayımı her seferinde sıfırlanması, kullanıcının sağ tıklama ve metin seçme yeteneklerini kaybetmesine neden olur. Bunun için bir yol bilmiyorsanız Tamam; Ben sadece sormak istedim. –

İlgili konular