List <ul> in QTextBrowser doesn't end



  • Hello,

    my code is like

    QString newEntry = "<b>Some stuff, and now here's a list:</b><ul>"
    
    for (auto k : container)
    {
        // ...
        newEntry += ("<li><b>" + /* other things that are not breaking <li> or <b> */ + "</b></li>");
        // ...
    }
    
    newEntry += "</ul>";
    myQTextBrowser->append(newEntry);
    

    Unfortunately, after newEntry got appended, any further appending would result in adding another item to the list, which I did end with </ul>. Replacing newEntry += "</ul>"; with newEntry += "</ul></ul>"; doesn't change anything, in case anyone would try that.

    Any input? Thanks in advance!


  • Moderators

    @Pippin Then remove </ul> from myQTextBrowser before appending again



  • @jsulm If I do that, the text isn't processed at all. All tags are printed as though they were normal text.


  • Moderators

    @Pippin Maybe you should get the whole text from the text browser, remove </ul>, append new list entries with </ul> at the end and then set the text in text browser?



  • So I used QTextBrowser::toHtml to get the text, and this is what is processed:

    <ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;">
    <li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foo</li>
    <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foo</li>
    <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foo</li></ul></body></html>
    

    (I added one linebreak so that it's easier to read.)

    So the </ul> tag is definitely here, but next time I append something, it is removed and added at the very end of the body. I really don't understand because there's only 1 member function that I have that toys with </ul>. Here's what the text looks like after the next appending:

    <ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;">
    <li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foo</li>
    <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foo</li>
    <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foo</li>
    <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">foo</li></ul></body></html>
    

  • Moderators

    @Pippin It looks good. But text browser shows HTML, or what is the problem?



  • It just seems that I can't close the list with </ul>. Whether I add the tag at the end of newEntry, or append it alone after newEntry, it's as if it was always ignored.

    Are there other closing tags that I could try? Hopefully some "stronger" than </ul>.

    Solved: Or is it? I just dropped the idea of using <ul> and constructed my own syntax with <br>&nbsp;&nbsp;&nbsp;&nbsp;&#9899; :-)



  • The problem is with append() from the docs:

    Note: The new paragraph appended will have the same character format and block format as the current paragraph, determined by the position of the cursor.

    So it will try and maintain the list you are currently in

    you should really use the text cursor interface to edit the document:

    replace myQTextBrowser->append(newEntry); with

    QTextCursor cursor=myQTextBrowser->textCursor();
    cursor.insertBlock();
    cursor.insertHtml(newEntry);
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.