2015-04-27 22 views
10

c'è un modo per disegnare un testo fisso con gli indici. Il mio obiettivo è quello di avere qualcosa di simile: "K_max = K_2 3"Disegno rich text con QPainter

QString equation="K_max=K_2 . 3"; 
painter.drawText(QRect(x, y , width, y+height), Qt::AlignLeft|Qt::AlignVCenter, equation); 

Ho provato anche la formattazione del testo utilizzando i tag HTML, ma non ha aiutato (tag ricevuti stampate con il testo):

QString equation="<p>K<sub>max</sub></p>=<p>K<sub>2</sub></p>.3" 
+0

si può mostrare in un QLabel, come: 'QLabel lbl ("

K max

=

K

.3 "); lbl.show(); '. – vahancho

+0

Grazie per la risposta, ma sto provando a stampare il testo in un file PDF utilizzando QPrinter come dispositivo di pittura – luffy

+0

È possibile impostare il codice html su un'etichetta, quindi acquisire il contenuto dell'etichetta come pixmap e dipingere il testo come un immagine con la tua stampante. Altrimenti non esiste una tale funzione che supporti le formule di disegno. – vahancho

risposta

18

Ecco un esempio completo che utilizza il testo RTF di QTextDocument.

mainwindow.cpp:

#include "mainWindow.h" 

void MainWindow::paintEvent(QPaintEvent*) 
{ 
    QPainter painter(this); 
    QTextDocument td; 
    td.setHtml("K<sub>max</sub>=K<sub>2</sub> &middot; 3"); 
    td.drawContents(&painter); 
} 

Se è necessario per disegnare il testo al punto specifico, tradurre il sistema di coordinate del pittore prima di disegnare:

painter.translate(QPointF(50, 50)); 

mainwindow.cpp - Un'altra soluzione:

#include "mainWindow.h" 

void MainWindow::paintEvent(QPaintEvent*) 
{ 
    QPainter painter(this); 
    QTextDocument td; 
    td.setHtml("K<sub>max</sub>=K<sub>2</sub> &middot; 3"); 
    QAbstractTextDocumentLayout::PaintContext ctx; 
    ctx.clip = QRectF(0, 0, 400, 100); 
    td.documentLayout()->draw(&painter, ctx); 
} 

mainWindow.h:

#include <QtGui> 

class MainWindow: public QWidget 
{ 
protected: 
    void paintEvent(QPaintEvent*); 
}; 

main.cpp:

#include <QtGui> 
#include "mainWindow.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    MainWindow mainWindow; 
    mainWindow.show(); 
    return app.exec(); 
} 

Il file di progetto:

TEMPLATE = app 
QT += gui 
HEADERS = mainWindow.h 
SOURCES = main.cpp mainWindow.cpp 

Risultato:

enter image description here

+0

. C'è una perdita di memoria in 'main'. Ma per scrivere esempi alla mia risposta :) –

+0

@SaZ Grazie per aver puntato alla perdita. Fisso. –

+1

Grazie, ho provato questo e funziona bene per la posizione (0, 0), ma non appena provo a spostare il testo in una posizione predefinita nella pagina ("ctx.clip = QRectF (x, y, 400, 100); ") scompare! Qualche idea su come posso risolvere questo problema? – luffy

5

È possibile utilizzare supportato Qt HTML subset per formattare il testo. Se è necessario disegnare un testo formattato, è necessario utilizzare QTextDocument::drawContents.

QPainter::drawText è progettato per il testo normale senza formattazione e funziona molto più velocemente.