LINUX.ORG.RU

Qt и QTextObjectInterface


0

0

Не могу найти в интернете информатцию, о установке обработчиков UserFormatedText в RichText, который устанавливается в QTextEdit

Есть вот такой код:

static const int IconFormatType = QTextFormat::UserObject + 1;

//-------------------------------------------
// TextIconFormat
//-------------------------------------------

class TextIconFormat : public QTextCharFormat
{
public:
	TextIconFormat(const QString &iconName, const QString &text);

	enum Property {
		IconName = QTextFormat::UserProperty + 1,
		IconText = QTextFormat::UserProperty + 2
	};
};

TextIconFormat::TextIconFormat(const QString &iconName, const QString &text) : QTextCharFormat()
{
	Q_UNUSED(text);

	setObjectType(IconFormatType);
	QTextFormat::setProperty(IconName, iconName);
	QTextFormat::setProperty(IconText, text);
}

//------------------------------------------------------
// IconTextObjectInterface
//------------------------------------------------------

class TextIconHandler : public QObject, public QTextObjectInterface
{
	//Q_OBJECT
	Q_INTERFACES(QTextObjectInterface)
public:
	TextIconHandler(QObject *parent = 0);

	virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format);

	virtual void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format);
};

TextIconHandler::TextIconHandler(QObject *parent) : QObject(parent)
{
}

QSizeF TextIconHandler::intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format)
{
	Q_UNUSED(doc);
	Q_UNUSED(posInDocument)
	const QTextCharFormat charFormat = format.toCharFormat();

	return IconsetFactory::instance()->iconPixmap(charFormat.stringProperty(TextIconFormat
::IconName)).size();
}

void TextIconHandler::drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format)
{
	qDebug() << "drawObject";
	Q_UNUSED(doc);
	Q_UNUSED(posInDocument);
	const QTextCharFormat charFormat = format.toCharFormat();
	const QPixmap pixmap = IconsetFactory::instance()->iconPixmap(charFormat.stringProperty(TextIconFormat
::IconName));

	painter->drawPixmap(rect, pixmap, pixmap.rect());
}

//------------------------------------------------
// StilRichText
//------------------------------------------------

void StilRichText::install(QTextDocument *doc)
{
	Q_ASSERT(doc);
	static TextIconHandler *handler = 0;
	if (!handler) handler = new TextIconHandler(qApp);
	doc->documentLayout()->registerHandler(IconFormatType, handler);
}

остальная часть кода ИМХО маловажна. Основное назначение - следующее: замена текста на графику, точнее смайлы.
Функция install проходит, обработчик создается, регистрируется.
Но просмотреть дебугером (gdb, ddd) что происходит внутри Qt - не возможно, ибо скомпилино без "debug".
Фунции обработчика drawObject и intrinsicSize не вызываются вообще.
Есть подозрение, что какой-то текст он не считает IconFormatType, тогда как заставить его считать его именно таким?
А может не в этом дело...

Может кто-то сталкивался с подобной проблемой? или знает как решить. Буду благодарен за любую информацию относительно сабжа. Ах, да Qt 4.3

Да, еще IconsetFactory::instance()->iconPixmap(charFormat.stringProperty(TextIconFormat ::IconName)); - возвращает QPixmap и это работает

irq
() автор топика
Ответ на: комментарий от irq

разобрался. МОДЕРАТОРЫ, топик можно удалять

irq
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.