Hide QLineEdit blinking cursor

There is no standard way to do that, but you can use setReadOnly method which hides the cursor. When you call this method it disables processing of keys so you'll need to force it. Inherit from QLineEdit and reimplement keyPressEvent.

LineEdit::LineEdit(QWidget* parent)
 : QLineEdit(parent)
{
  setReadOnly(true);      
}

void LineEdit::keyPressEvent(QKeyEvent* e)
{
  setReadOnly(false);
  __super::keyPressEvent(e);
  setReadOnly(true);
}

As a workaround you can create a single line QTextEdit and set the width of the cursor to zero by setCursorWidth.

For a single line QTextEdit you should subclass QTextEdit and do the following:

  1. Disable word wrap.
  2. Disable the scroll bars (AlwaysOff).
  3. setTabChangesFocus(true).
  4. Set the sizePolicy to (QSizePolicy::Expanding, QSizePolicy::Fixed)
  5. Reimplement keyPressEvent() to ignore the event when Enter/Return is hit
  6. Reimplement sizeHint to return size depending on the font.

The implementation is :

#include <QTextEdit>
#include <QKeyEvent>
#include <QStyleOption>
#include <QApplication>


class TextEdit : public QTextEdit
{
public:
        TextEdit()
        {
                setTabChangesFocus(true);
                setWordWrapMode(QTextOption::NoWrap);
                setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
                setFixedHeight(sizeHint().height());
        }
        void keyPressEvent(QKeyEvent *event)
        {
                if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
                        event->ignore();
                else
                        QTextEdit::keyPressEvent(event);
        }
        QSize sizeHint() const
        {
                QFontMetrics fm(font());
                int h = qMax(fm.height(), 14) + 4;
                int w = fm.width(QLatin1Char('x')) * 17 + 4;
                QStyleOptionFrameV2 opt;
                opt.initFrom(this);
                return (style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(w, h).
                        expandedTo(QApplication::globalStrut()), this));
        }
};

Now you can create an instance of TextEdit and set the cursor width to zero :

textEdit->setCursorWidth(0);