2013-03-20 9 views
31

Ich schreibe den komplizierten Rich-Text-Editor, abgeleitet von QTextEdit Klasse. Es muss in der Lage sein, verschiedene Formatierungen in eingebettete Tabellen einzufügen, ihre Größe zu ändern und anzuwenden.Wie Zeilenhöhe in QTextTable ändern

Ich fand Funktion für Setup-Spaltenbreiten (setColumnWidthConstraints). Aber es ist niemand zu change _rows_ heights.

Gibt es eine Möglichkeit, dies zu erreichen?

Beispielcode:

void CustomTextEdit::insertTable (int rows_cnt, int columns_cnt) 
{ 
    QTextCursor cursor = textCursor(); 
    QTextTableFormat table_format; 
    table_format.setCellPadding (5); 

    // TODO: This call just changed the frame border height, not table itself. 
    //table_format.setHeight (50); 

    // Setup columns widths - all is working perfectly. 
    QVector <QTextLength> col_widths; 
    for (int i = 0; i < columns_cnt; ++i) 
     col_widths << QTextLength (QTextLength::PercentageLength, 100.0/columns_cnt); 
    table_format.setColumnWidthConstraints (col_widths); 

    // ...But there is no similar function as setRowHeighConstraints for rows! 

    // Insert our table with specified format settings 
    cursor.insertTable (rows_cnt, columns_cnt, table_format); 
} 
+0

könnten Sie QTextFrameFormat verwenden :: setHeight (qreal height) –

+1

@Cool_Coder Dies änderte nur die Höhe von _all_ dem Rahmen (dh wo der Rahmen angezeigt wird). Aber ich muss die Höhe für jede einzelne Zeile der Tabelle angeben. – eraxillan

+0

kann bitte etwas Code zeigen, damit ich das kommentieren kann? –

Antwort

1

es scheint, dass Sie die setHTML (QString) oder insertHTML (QString) -Funktionen ein Stylesheet einfügen können.

Wenn Sie diese Funktion mit einem Stylesheet verwendet, wird das Stylesheet nur zum aktuellen Block im Dokument anwenden. Verwenden Sie stattdessen QTextDocument :: setDefaultStyleSheet() , um ein Format Blatt in einem Dokument anzuwenden.

ref: http://harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/qtextedit.html#insertHtml

appart von Unterlegscheiben mit .... nach http://harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/richtext-html-subset.html Sie die Schrift Erklärung festlegen.

scheint Qt die CSS2.1-Spezifikation gezielt zu haben, die wie folgt ist .. http://www.w3.org/TR/CSS2/fonts.html#propdef-font

haben Sie versucht, die Schriftart in der Tabellenzeile angeben.

passieren die folgende Zeichenfolge mit insertHTML, wo diese Zeichenfolge als QString delcared ist

<style> 
table > tr {font-size: normal normal 400 12px/24px serif;} 
</style> 
0

Wenn Sie wollen einfach nur Reihen größer als ihre Texthöhe machen würde erfordern, könnten Sie versuchen, ein 0xN transparent Einfügen Bild in der ersten Zelle der Zeile (oder 1xN, wenn Qt Sie nicht zulassen, Null-Breite).

Es könnte auch möglich sein, die oberste Füllung der Tabellenzelle mit QTextTableCellFormat :: setTopPadding() zu setzen oder den oberen Rand mit QTextBlockFormat :: setTopMargin() zu setzen. Aber sowohl die Auffüllung als auch die Ränder werden der Text-Layout-Höhe AFAIK hinzugefügt, so dass keine von beiden sehr gut für das Einstellen einer absoluten Höhe ist.

Haben Sie sich Calligra angesehen? Seine libs/kotext and libs/textlayout Bibliotheken implementieren ein benutzerdefiniertes QAbstractTextDocumentLayout mit einer umfangreicheren Tabellenunterstützung als QTextEdit.