Наложенные виджеты на QTextEdit отрисованы в неожиданном месте

У меня есть QTextEdit, в котором я хочу написать несколько абзацев, с наложенной меткой под каждым. Достаточно текста, чтобы он не уместился в окне просмотра, поэтому есть и вертикальная полоса прокрутки.

Проблема заключается в том, что метки отображаются ниже, чем ожидалось, но только тогда, когда они изначально не видны в окне просмотра (т. Е. Для их просмотра необходимо прокрутить вниз). Метки, которые не нужно прокручивать вниз, чтобы увидеть, расположены правильно. Это заставляет меня думать, что есть некоторая тонкость в том, как текстовый документ взаимодействует с окном просмотра, что я не оцениваю.

Вот схема моего кода:

class MyTextEdit:public QTextEdit{


    std::vector<QLabel> labels; 

    explicit MyTextEdit(QWidget *parent = 0):
        QTextEdit(parent){
            text=QString("Big Block of text....");
            int height_of_text=0;//the height in pixels of text that has been written


            for(i=0; i<100; i++){
                append(text);   
                //get the dimensions of this block on the screen
                QTextBlock last_block=document()->lastBlock();
                 height_of_text+=last_block.layout()->boundingRect().height();

                //now draw a label underneath this paragraph
                auto new_label=new QLabel; 
                new_label->setText("label"+QString::number(i));
                new_label->move(0,height_of_text+label->rect().height());
                new_label->show();
                labels.push_back(new_label);
                //add a delimiting line between paragraphs
                append("-------");
                last_block=document()->lastBlock();
                height_of_text+=last_block.layout()->boundingRect().height();
            };
        };

    void MyTextEdit::scrollContentsBy(int dx, int dy){
    //move the labels when the scrollbar is used

        for(auto l: labels){
            label->move(label->pos()+QPoint(dx,dy));
            label->show();
        }
        //scroll the text as usual
        QTextEdit::scrollContentsBy( dx,  dy);
    }

Просто для повторения, первые 10 меток правильно расположены прямо под соответствующими им абзацами (предположим, что только первые 10 абзацев могут уместиться на экране). Однако, когда я прокручиваю вниз, чтобы увидеть остальные метки, я обнаруживаю, что 11-я метка расположена ниже 11-го абзаца, чем должна быть, и так далее для остальных меток.

Любая помощь высоко ценится!

0 ответов

Другие вопросы по тегам