Название: Как узнать координаты курсора в QTextEdit сразу после создания этого объекта? Отправлено: xintrea от Июль 08, 2009, 10:34 Здравствуйте!
Задача такая - нужно узнать координаты начальной позиции курсора во временном объекте QTextEdit. Получить координаты не проблема. Проблема в другом - эти координаты неправильные до того момента, пока объект QTextEdit не будет по-настоящему отрисован. То есть, код Код: QTextEdit txted; Всегда будет показывать Код: 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; то во время выполнения этого кода paintEvent() всеравно не вызывается, и координаты курсора после такого кода останутся равными 0,0. Вот и получается непонятка - как узнать настоящие координаты курсора в "начальной" позиции? Я уже думаю создавать дополнительное модальное окно, помещать на него QTextEdit, рисовать окно, по таймеру удалять, а перед удалением брать координаты курсора у QTextEdit. Но такая конструкция не есть правильно - будет мелькать непонятное окошко, что будет сильно раздражать. К тому же по таймеру работать с GUI не есть гуд, так как если поставить маленькую задержку, окно может не успеть отрисоваться, и это зависит от загруженности компа, и еще от кучи факторов.. Вопрос - как сделать более просто? Задача вроде простецкая, но долблюсь уже вторую неделю в несколько заходов, ибо не до конца понимаю как эта блин отрисовка и инициализация виджетов в Qt работает. Название: Re: Как узнать координаты курсора в QTextEdit сразу после создания этого объекта? Отправлено: spectre71 от Июль 08, 2009, 10:42 Возможно использовать QTextDocument
Название: Re: Как узнать координаты курсора в QTextEdit сразу после создания этого объекта? Отправлено: uriel от Июль 08, 2009, 10:47 Вот кстати да. Для меня вопрос сейчас тоже актуален, правда в более общем виде: до отображения размеры и позиции всех виджетов не соответствуют действительности, а действия с ними требуется выполнять именно до отображения.
Где-то вопрос решил установкой фильтра событий и запуском инициализации при первом QEvent::Show, но в других местах этот способ не подходит. Была сумасшедшая идея показывать сначала окно в (-__INT_MAX__,-__INT_MAX__), чтобы точно не было видно, но как-то оно меня смущает. :) Название: Re: Как узнать координаты курсора в QTextEdit сразу после создания этого объекта? Отправлено: xintrea от Июль 08, 2009, 10:53 Для меня вопрос сейчас тоже актуален, правда в более общем виде: до отображения размеры и позиции всех виджетов не соответствуют действительности, а действия с ними требуется выполнять именно до отображения. Во, ты правильно сформулировал. Где-то вопрос решил установкой фильтра событий и запуском инициализации при первом QEvent::Show, но в других местах этот способ не подходит. Была сумасшедшая идея показывать сначала окно в (-__INT_MAX__,-__INT_MAX__), чтобы точно не было видно, но как-то оно меня смущает. :) Тоже идея... Тока боюсь что некотрые виндовменеджеры не позволят рисовать окно с отрицательными координатами, будут искусственно в 0,0 переводить, и таки мерцать оно будет. Ну и свё та же проблема синхронизации - нужно городить код чтоб он ожидал, когда все объекты проинициализируются правильно. Название: Re: Как узнать координаты курсора в QTextEdit сразу после создания этого объекта? Отправлено: xintrea от Июль 08, 2009, 11:36 Возможно использовать QTextDocument Ага, нашел. Код: QTextEdit edit; впринципе, нужна была именно X-координата. Введено в Qt 4.5. |