Здравствуйте!
Задача такая - нужно узнать координаты начальной позиции курсора во временном объекте QTextEdit. Получить координаты не проблема. Проблема в другом - эти координаты неправильные до того момента, пока объект QTextEdit не будет по-настоящему отрисован.
То есть, код
QTextEdit txted;
txted.raise();
txted.show();
txted.repaint();
QTextCursor control_cur=txted.textCursor();
control_cur.setPosition(0);
QRect control_cur_rect=cursorRect(control_cur);
qDebug() << "Control cursor X Y Width" << control_cur_rect.x() << " " << control_cur_rect.y() << " " << this->lineWidth();
Всегда будет показывать
Control cursor X Y Width 0 0 1
хотя, если унаследоваться от QTextEdit, засунуть в paintEvent() вывод отладочной информации
qDebug() << "Control cursor in paintEvent X Y Width" << textCursor().x() << " " << textCursor().y() << " " << this->lineWidth();
то в логе увидим правильные данные
Control cursor in paintEvent X Y Width 4 4 1
Правда, данные эти увидим только в том случае, если этот унаследованный объект засунем на форму и запустим форму на исполнение. А вот если его использовать напрямую (пускай он называется TextEditExtention)
TextEditExtention txted;
txted.raise();
txted.show();
txted.repaint();
то во время выполнения этого кода paintEvent() всеравно не вызывается, и координаты курсора после такого кода останутся равными 0,0.
Вот и получается непонятка - как узнать настоящие координаты курсора в «начальной» позиции? Я уже думаю создавать дополнительное модальное окно, помещать на него QTextEdit, рисовать окно, по таймеру удалять, а перед удалением брать координаты курсора у QTextEdit. Но такая конструкция не есть правильно - будет мелькать непонятное окошко, что будет сильно раздражать. К тому же по таймеру работать с GUI не есть гуд, так как если поставить маленькую задержку, окно может не успеть отрисоваться, и это зависит от загруженности компа, и еще от кучи факторов..
Вопрос - как сделать более просто? Задача вроде простецкая, но долблюсь уже вторую неделю в несколько заходов, ибо не до конца понимаю как эта блин отрисовка и инициализация виджетов в Qt работает.