2010-09-05 3 views
0

Как создать маркированный или нумерованный список в QTextEdit с помощью Qt, нажав кнопку? Также необходимо составить список параграфов, которые выбираются нажатием одной и той же кнопки. И когда курсор находится в списке, и вы нажимаете кнопку, элемент списка становится элементом не-списка, а простым абзацем. В двух словах я хочу создать для своих текстовых редакторов 2 кнопки, которые работают так же, как (кнопка буферизации и нумерации - это MS Word).Как создать маркированный или нумерованный список с Qt?

ответ

1

Я использовал этот код:

void TextEdit::textStyle(int styleIndex) 
{ 
    QTextCursor cursor = textEdit->textCursor(); 

    if (styleIndex != 0) { 
     QTextListFormat::Style style = QTextListFormat::ListDisc; 

     switch (styleIndex) { 
      default: 
      case 1: 
       style = QTextListFormat::ListDisc; 
       break; 
      case 2: 
       style = QTextListFormat::ListCircle; 
       break; 
      case 3: 
       style = QTextListFormat::ListSquare; 
       break; 
      case 4: 
       style = QTextListFormat::ListDecimal; 
       break; 
      case 5: 
       style = QTextListFormat::ListLowerAlpha; 
       break; 
      case 6: 
       style = QTextListFormat::ListUpperAlpha; 
       break; 
      case 7: 
       style = QTextListFormat::ListLowerRoman; 
       break; 
      case 8: 
       style = QTextListFormat::ListUpperRoman; 
       break; 
     } 

     cursor.beginEditBlock(); 

     QTextBlockFormat blockFmt = cursor.blockFormat(); 

     QTextListFormat listFmt; 

     if (cursor.currentList()) { 
      listFmt = cursor.currentList()->format(); 
     } else { 
      listFmt.setIndent(blockFmt.indent() + 1); 
      blockFmt.setIndent(0); 
      cursor.setBlockFormat(blockFmt); 
     } 

     listFmt.setStyle(style); 

     cursor.createList(listFmt); 

     cursor.endEditBlock(); 
    } else { 
     // #### 
     QTextBlockFormat bfmt; 
     bfmt.setObjectIndex(-1); 
     cursor.mergeBlockFormat(bfmt); 
    } 
} 

из этого source.

Только я изменил

} else { 
    // #### 
    QTextBlockFormat bfmt; 
    bfmt.setObjectIndex(-1); 
    cursor.mergeBlockFormat(bfmt); 
} 

следующему коду:

} else { 
    // #### 
QTextBlockFormat bfmt; 
bfmt.setObjectIndex(0); 
cursor.mergeBlockFormat(bfmt); 
setTextCursor(cursor); 
} 
4

QTextEdit должен поддерживать HTML форматирования текста таким образом нажатие кнопки Обработчик ниже должен вставить 2 списка в элемент управления редактирования текста:

void MainWindow::on_pushButton_clicked() 
{ 
    // will insert a bulleted list 
    ui->textEdit->insertHtml("<ul><li>text 1</li><li>text 2</li><li>text 3</li></ul> <br />"); 
    // will insert a numbered list 
    ui->textEdit->insertHtml("<ol><li>text 1</li><li>text 2</li><li>text 3</li></ol>"); 
} 

в качестве альтернативы вы можете манипулировать содержанием TextEdit использованием QTextDocument и QTextCursor членов. Ниже приведен пример:

void MainWindow::on_pushButton_2_clicked() 
{ 
    QTextDocument* document = ui->textEdit->document(); 
    QTextCursor* cursor = new QTextCursor(document); 

    QTextListFormat listFormat; 
    listFormat.setStyle(QTextListFormat::ListDecimal); 
    cursor->insertList(listFormat); 

    cursor->insertText("one"); 
    cursor->insertText("\ntwo"); 
    cursor->insertText("\nthree"); 
} 

также по этой ссылке: Rich Text Processing может быть полезным

надеюсь, что это помогает, считает

+0

Второй вариант это то, что я хочу, но это-х incompleate. Трудная часть состоит в том, чтобы сделать уже написанный текст buletted/numbered. И маркированный/пронумерованный текст делает unbulleted/numberumber. На самом деле это нужно делать с помощью одной и той же контрольной кнопки или действия в меню. – Narek