Qt4 如何在QLineEdit中创建这样的额外图标?

Qt4 如何在QLineEdit中创建这样的额外图标?,qt4,Qt4,我想在QtCreator中实现一个“clean”按钮,如下面的屏幕截图,该按钮位于QLineEdit中,而不是一个小部件 我应该从哪里开始 有关建议的解决方案,请参阅此博客条目 由于原始链接不再可用,我提供了一个新的代码段 主要思想是在QLineEdit中添加一个QToolButton,并将其正确定位 LineEdit::LineEdit(QWidget *parent) : QLineEdit(parent) { int height = sizeHint().height

我想在QtCreator中实现一个“clean”按钮,如下面的屏幕截图,该按钮位于QLineEdit中,而不是一个小部件

我应该从哪里开始

有关建议的解决方案,请参阅此博客条目

由于原始链接不再可用,我提供了一个新的代码段

主要思想是在
QLineEdit
中添加一个
QToolButton
,并将其正确定位

LineEdit::LineEdit(QWidget *parent)
    : QLineEdit(parent)
{
    int height = sizeHint().height();
    int btnSize = sizeHint().height() - 5;

    clearButton = new QToolButton(this);
    QPixmap pixmap(":clear.png");
    clearButton->setIcon(QIcon(pixmap));
    clearButton->setCursor(Qt::ArrowCursor);
    clearButton->setStyleSheet("QToolButton { border: none; padding: 2px}");
    clearButton->setFixedSize(btnSize, btnSize);
    clearButton->hide();

    int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
    setStyleSheet(QString("QLineEdit { padding-right: %1px }")
                                                .arg(btnSize - frameWidth));
    setMinimumHeight(height);

    connect(clearButton, SIGNAL(clicked()), this, SLOT(clear()));
    connect(this, SIGNAL(textChanged(const QString&)), 
            this, SLOT(updateCloseButton(const QString&)));
}

void LineEdit::resizeEvent(QResizeEvent *)
{
    int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
    clearButton->move(width() - clearButton->width() - frameWidth, 0);
}

void LineEdit::updateCloseButton(const QString& text)
{
    clearButton->setVisible(!text.isEmpty());
}
此外,由于Qt5.2,可以使用
QLineEdit
内置方法
setClearButtonEnabled

请不要发布仅包含链接的答案,而是在答案中包含解决方案。本政策适用于此类情况,即您链接到的网页已更改,不再有此问题的解决方案。