Цвет шрифта QPainter::drawText
От: qv  
Дата: 03.02.11 16:59
Оценка:
...опять про поиск информации в чужом приложении на Qt

Я перехватываю метод QPainter::drawText, чтобы из всего, что проходит через эту функцию выделить только то, что мне нужно — нужно определить цвет шрифта... Как это сделать? Текст обычный, не html.
пробовал так:
QPointerObject->brush().color().name().toLocal8Bit().data()

не то
Re: Цвет шрифта QPainter::drawText
От: Peregrin  
Дата: 03.02.11 17:04
Оценка:
Здравствуйте, qv, Вы писали:

qv>...опять про поиск информации в чужом приложении на Qt


qv>Я перехватываю метод QPainter::drawText, чтобы из всего, что проходит через эту функцию выделить только то, что мне нужно — нужно определить цвет шрифта... Как это сделать? Текст обычный, не html.

qv>пробовал так:
qv>
qv>QPointerObject->brush().color().name().toLocal8Bit().data()
qv>

qv>не то

Спросите то же самое у pen(), а не у brush().
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Re[2]: Цвет шрифта QPainter::drawText
От: qv  
Дата: 03.02.11 17:45
Оценка:
Здравствуйте, Peregrin, Вы писали:

P>Спросите то же самое у pen(), а не у brush().

Всё работает! Спасибо! Осталась последняя деталь — имея QPainter добраться до hWnd окна в котором происходит рисование.. подскажите?
Re[3]: Цвет шрифта QPainter::drawText
От: Peregrin  
Дата: 03.02.11 20:00
Оценка:
Здравствуйте, qv, Вы писали:

qv>Здравствуйте, Peregrin, Вы писали:


P>>Спросите то же самое у pen(), а не у brush().

qv> Всё работает! Спасибо! Осталась последняя деталь — имея QPainter добраться до hWnd окна в котором происходит рисование.. подскажите?

Ну если вам повезло, и рисуют по виджету (хотя это совсем не факт), то можно как-то так:
qobject_cast<QWidget*>(pPainter->device())->winId()
(ну или effectiveWinId() может быть достаточно)
Re[4]: Цвет шрифта QPainter::drawText
От: qv  
Дата: 04.02.11 09:49
Оценка:
Здравствуйте, Peregrin, Вы писали:

P>Ну если вам повезло, и рисуют по виджету (хотя это совсем не факт), то можно как-то так:

Видимо, QPainter рисует на чём то отличном от потомка QObject, т.к.
    QObject* obj = (QObject*) (qP->device());
    OutputDebugString(obj->objectName().toLocal8Bit().data());

стреляется с AV. Соответственно, нужно искать другой способ Может быть можно похучить еще какой-то метод, который мне поможет? Если так из QPaintDevice hWnd не получить..
Re[5]: Цвет шрифта QPainter::drawText
От: Peregrin  
Дата: 04.02.11 10:56
Оценка:
Здравствуйте, qv, Вы писали:

qv>Здравствуйте, Peregrin, Вы писали:


P>>Ну если вам повезло, и рисуют по виджету (хотя это совсем не факт), то можно как-то так:

qv> Видимо, QPainter рисует на чём то отличном от потомка QObject, т.к.
qv>
qv>    QObject* obj = (QObject*) (qP->device());
qv>    OutputDebugString(obj->objectName().toLocal8Bit().data());

qv>

qv>стреляется с AV. Соответственно, нужно искать другой способ Может быть можно похучить еще какой-то метод, который мне поможет? Если так из QPaintDevice hWnd не получить..

QPaintDevice наследует QObject, 0 может возвращаться, если !qP->isActive().

Вообще, я бы на вашем месте просто подложил Qt той же версии, что используется приложением, но с отладочной инфой, и расставил бы брекпоинтов прямо в Qt в нужных местах. Но это конечно будет работать только если линковка динамическая.
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Re[6]: Цвет шрифта QPainter::drawText
От: qv  
Дата: 04.02.11 18:19
Оценка:
Здравствуйте, Peregrin, Вы писали:

P>QPaintDevice наследует QObject, 0 может возвращаться, если !qP->isActive().

IsActive == true, и, как выясняется, QPaintDevice вызвращает указатель на QWidget, вот только у объекта поле QObjectPrivate не определено, там лежит 0xBAAD000, из-за этого большинство функций падает, узнать родителя, класс и т.д. не получается.. Буду думать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.