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

时间:2018-12-28 09:08:20

标签: c++ qt qlineedit paintevent

我正在尝试“装饰” QLineEdit,或更准确地说,是在其周围绘制自己的自定义框架,以获得以下结果:

enter image description here

我尝试使用Qt Style Sheets(CSS),但这只会启用琐碎的框架装饰(更改宽度/颜色/大小等...),没有什么比上面更有趣的了。

我还尝试了从QLineEdit继承并覆盖其void QLineEdit::paintEvent(QPaintEvent* e),但是后来我意识到重新实现它意味着我将失去QLineEdit的“编辑性”(抱歉,在这里cher窃语言) )-文本框,光标和插入文本的功能。

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

1 个答案:

答案 0 :(得分:1)

尝试使用合成。创建您自己的小部件,该小部件继承自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“编辑”的感觉。