C++ Qt4:装饰QLineEdit(在其周围绘制)

C++ Qt4:装饰QLineEdit(在其周围绘制),c++,qt,qlineedit,paintevent,C++,Qt,Qlineedit,Paintevent,我试图“装饰”一个QLineEdit,或者更准确地说,在它周围绘制我自己的自定义框架,以获得以下结果: 我尝试使用(CSS),但这只会启用琐碎的框架装饰(更改宽度/颜色/大小等),没有像上面那样的花哨 我还尝试从QLineEdit继承并重写它,但后来我意识到重新实现它意味着我将失去QLineEdits的“编辑性”(很抱歉在这里破坏了语言)-文本框、光标和插入文本的能力 如何实现上述文本框? 这是位于QLineEdit后面的QLabel的组合吗 尝试使用构图。创建从QWidget继承的您自己的小

我试图“装饰”一个
QLineEdit
,或者更准确地说,在它周围绘制我自己的自定义框架,以获得以下结果:

我尝试使用(CSS),但这只会启用琐碎的框架装饰(更改宽度/颜色/大小等),没有像上面那样的花哨

我还尝试从
QLineEdit
继承并重写它,但后来我意识到重新实现它意味着我将失去
QLineEdit
s的“编辑性”(很抱歉在这里破坏了语言)-文本框、光标和插入文本的能力

如何实现上述文本框?

这是位于
QLineEdit
后面的
QLabel
的组合吗

尝试使用构图。创建从
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的“编辑性”。

谢谢您的回答。多给几个Q:第一个建议;我该怎么做?我的QWidget是否将QLineEdit作为数据成员保存?作为一个小部件?第二项建议;我试过了,但是文本框占据了所有的空间,完全隐藏了我的画……好吧,太好了!非常感谢。我这样做了,并将父MyWidget的大小设置为略大于QLineEdit子项(这样我就有足够的空间在其周围绘制),现在如何在MyWidget内移动QLineEdit使其垂直居中?使用一些
QLayout
s或通过调用
QWidget::setGeometry
手动移动它。