To get this result:

You can subclass QLineEdit.
So your title should look something like this:
#ifndef LINEEDITICON_H #define LINEEDITICON_H #include <QLineEdit> #include <QIcon> class LineEditIcon : public QLineEdit { Q_OBJECT public: LineEditIcon(const QIcon icon, QWidget *parent = Q_NULLPTR); ~LineEditIcon(); void setIcon(QIcon icon); protected: virtual void paintEvent(QPaintEvent *event); private: QIcon m_icon; }; #endif // LINEEDITICON_H
And your source file looks like this:
#include "lineediticon.h" #include <QPainter> LineEditIcon::LineEditIcon(const QIcon icon, QWidget *parent) : QLineEdit(parent) { setIcon(icon); } LineEditIcon::~LineEditIcon() { } void LineEditIcon::setIcon(QIcon icon) { m_icon = icon; if (m_icon.isNull()) setTextMargins(1, 1, 1, 1); else setTextMargins(20, 1, 1, 1); } void LineEditIcon::paintEvent(QPaintEvent * event) { QLineEdit::paintEvent(event); if (!m_icon.isNull()) { QPainter painter(this); QPixmap pxm = m_icon.pixmap(height() - 6, height() - 6); int x = 2, cx = pxm.width(); painter.drawPixmap(x, 3, pxm); painter.setPen(QColor("lightgrey")); painter.drawLine(cx + 2, 3, cx + 2, height() - 4); } }
source share