Qt4:装饰 QLineEdit(在其周围绘画)

Qt4: Decorating a QLineEdit (painting around it)

我正在尝试 "decorate" QLineEdit,或者更准确地说,在它周围绘制我自己的自定义框架,以获得以下结果:

我尝试使用 Qt Style Sheets (CSS),但这只会启用琐碎的框架装饰(更改 width/color/size 等...),没有像上面那样的花哨。

我也尝试继承 QLineEdit 并覆盖它的 void QLineEdit::paintEvent(QPaintEvent* e),但后来我意识到重新实现它意味着我将失去 QLineEdits "editness"(抱歉在这里屠杀语言)- 文本框、光标和插入文本的能力。

如何实现上面的文本框?
这是 QLabel 完美位于 QLineEdit 后面的组合吗?

尝试使用组合。创建您自己的 Widget 继承自 QWidget,在 QWidget::paintEvent 中绘制您想要的内容并在其上方放置 QLineEdit。可能您必须将其居中并使用 css 代替 QLineEdit 以使其看起来平滑。

class MyWidget: public QWidget
{
explicit MyWidget(QWidget* parent = 0):
QWidget(parent),
line_edit(new QLineEdit(this))
{
     //  place line_edit in center of QWidget
}

private: 
QLineEdit* line_edit;
}

或者您可以像这样覆盖 void QLineEdit::paintEvent(QPaintEvent* e)

void QLineEdit::paintEvent(QPaintEvent* e)
{
      //paint your border
      QLineEdit::paintEvent(e);
}

而且你不会失去 QLineEdits "editness"。