I think I found a nice way and it renders fast, but there's still a lot to be done.
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_IgnoreChange = false; connect(ui->textEdit, SIGNAL(textChanged()), this, SLOT(textChangedSlot())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::textChangedSlot() { if (m_IgnoreChange) return; QTextCursor cursor = ui->textEdit->textCursor(); m_IgnoreChange = true; QString text = ui->textEdit->toHtml(); //Here using regexp probably is better ;) text = text.replace(":)", "<img src=\"c:/Users/paolo/smiley/images/smile_1.png\"/>"); text = text.replace(":-)", "<img src=\"c:/Users/paolo/smiley/images/smile_1.png\"/>"); text = text.replace(";)", "<img src=\"c:/Users/paolo/smiley/images/ok.png\"/>"); text = text.replace(";-)", "<img src=\"c:/Users/paolo/smiley/images/ok.png\"/>"); text = text.replace(":D", "<img src=\"c:/Users/paolo/smiley/images/smile_7.png\"/>"); text = text.replace(":-D", "<img src=\"c:/Users/paolo/smiley/images/smile_7.png\"/>"); ui->textEdit->setHtml(text); ui->textEdit->setTextCursor(cursor); ui->textEdit->ensureCursorVisible(); m_IgnoreChange = false; }