Наложенные виджеты на 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-го абзаца, чем должна быть, и так далее для остальных меток.
Любая помощь высоко ценится!