【问题标题】:Qt4: Decorating a QLineEdit (painting around it)Qt4:装饰一个 QLineEdit(在它周围绘画)
【发布时间】:2018-12-28 09:08:19
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ qt qlineedit paintevent


    【解决方案1】:

    尝试使用组合。创建您自己的 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“编辑性”。

    【讨论】:

    • 感谢您的回答。多问几个问题:第一个建议;我怎么做?我的 QWidget 会持有 QLineEdit 作为数据成员吗?作为儿童小部件?对于第二个建议;我试过了,但是文本框占据了所有的空间,完全隐藏了我的画...
    • 好的,太好了!谢谢!我这样做了,并将父级 MyWidget 的大小设置为比 QLineEdit 子级稍大(所以我将有足够的空间在它周围绘画),现在如何在 MyWidget 内移动 QLineEdit 使其垂直居中?
    • 使用一些QLayouts 或通过调用QWidget::setGeometry 手动移动它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多