Detect mouseReleaseEvent on QImage insert in QTextedit
-
Hi i want detect when i click on Qimage inserted to QTextEdit . i make Filee class but dont work.
[code]// .H
#ifndef FILEE_H
#define FILEE_H#include <QWidget>
#include <QMessageBox>
#include <QEvent>class Filee : public QWidget, public QImage
{
Q_OBJECTpublic:
Filee();signals:
public slots:
void lol();protected :
bool event(QEvent *);};
#endif // FILEE_H
//.CPP
#include "filee.h"Filee::Filee()
: QImage(":/File.png")
{
}bool Filee::event(QEvent * e)
{
QMessageBox::information(0, QString::number(e->type()) , "sdf");
return true;
}//Add Filee to textedit
Filee f1;
ui->textEdit->textCursor().insertImage( (QImage) f1, "f1");
[/code]After click on this image in textedit do nothing , event are not detected ;(
-
QEvents are only propagated to QObjects/QWidgets. Since QImage doesn't derive from it (and you shouldn't add it either) it won't receive events.
Instead listen to the mouse event of QTextEdit and check if it's an image on that position:
@
void MyTextEdit::mouseReleaseEvent(QMouseEvent * event)
{
QTextEdit::mouseReleaseEvent(event);int pos = this->document()->documentLayout()->hitTest(event->pos(), Qt::ExactHit); if(pos > 0) { QTextCursor cursor(document()); cursor.setPosition(pos); if( ! cursor.atEnd() ) { cursor.setPosition(pos+1); QTextFormat format = cursor.charFormat(); if( format.isImageFormat() ) { QString image = format.toImageFormat().name(); //... do whatever you want } } }
}
@ -
Thx for help