2012-04-20 24 views
10

QTextEdit satır aralığını ayarlamak istiyorum.QTextEdit satır aralığını ayarla

O

QFontMetrics::lineSpacing(); 

Ama bu nasıl oluşturulacağı konusunda bu bilgileri almak için bir sorun yok?

Ben Stylesheets ile çalıştı, ancak bu işe yaramadı:

this->setStyleSheet("QTextEdit{ height: 200%; }"); 

veya

this->setStyleSheet("QTextEdit{ line-height: 200%; }"); 

Kısmi çözüm:

Eh, bir çözüm bulduk - istediğim şekilde değil, ama en azından basit ve konsept kanıtım için yeterince niyetlenmiş davranışımı veriyor.

Her yeni satırda bazı satır aralığı vardır. Ancak, metin otomatik olarak yeni bir satıra sarılıncaya kadar yazarsanız, bu iki satır arasında satır aralığı olmaz. Bu hack sadece metin blokları ile çalışır, kod bakın.

Sadece akıl almaz güç ve çirkin bir hack olduğunu unutmayın. Ama güzel QTextEdit'inize bir çeşit satır aralığı sağlıyor. Metninizin değiştiği her zaman arayın.

void setLineSpacing(int lineSpacing) { 
    int lineCount = 0; 
    for (QTextBlock block = this->document()->begin(); block.isValid(); 
      block = block.next(), ++lineCount) { 
     QTextCursor tc = QTextCursor(block); 
     QTextBlockFormat fmt = block.blockFormat(); 
     if (fmt.topMargin() != lineSpacing 
       || fmt.bottomMargin() != lineSpacing) { 
      fmt.setTopMargin(lineSpacing); 
      //fmt.setBottomMargin(lineSpacing); 
      tc.setBlockFormat(fmt); 
     } 
    } 
} 
+0

Yine iyi bir çözüm büyük bir ilgi olurdu. – qwc

cevap

4

QFontMetrics yazı dosyasından gelen statik özellikleri (adı başına) içeriyor. Bir "C" nin ne kadar geniş olduğu, vb. lineSpacing(), fontu tasarlayan kişinin yazı tipinin kendisinde kodlanmış olan tek aralıkta doğal mesafeyi elde etmenizi sağlar. Bir QTextEdit içinde satır aralığı gelince

http://fontforge.sourceforge.net/faq.html#linespace

... görünüyor: aslında ... Burada anlatılıyor nasıl biraz karmaşık bir hikaye (değil mi) bunu değiştirmek istiyorsa bu metin "düzenleri" belirtilmesine ilişkin QT'ın genişletilebilirlik modeli kapsamında düşüyor şeylerden biri olarak görülen gibi (bana):

http://doc.qt.io/qt-4.8/richtext-layouts.html

Sen QTextDocument kendi düzeni sınıfını tedarik yerine varsayılan kullanarak ediyorum . Birisi burada denedim ama onların tamamlanmış kod sonrası etmedi:

http://www.qtcentre.org/threads/4198-QTextEdit-with-custom-space-between-lines

+0

Cehennem, neden bunun üzerinde yanılmamıştım? Bunu hemen deneyeceğim. :) – qwc

+0

Tamam, statik metin çizimi kolaydır. Ancak, bu düzeni QTextEdit içindeki düzenlenebilir metne dönüştürmek bazı pürüzlü kenarlardan geçiyor. – qwc

+0

Şaşırtıcı değil. Qt sürümünüz için varsayılan QTextLayout için kaynaktan çalışmayı deneyebilir, belki de ondan miras alır ve ihtiyacınız olduğunu düşündüğünüz bitleri geçersiz kılabilirsiniz. 4.7'de: http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/text/qtextlayout.cpp – HostileFork

İlgili konular