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

标签 c++ qt qlineedit paintevent

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

enter image description here

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

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

如何实现上述文本框?
这是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“编辑”。

关于c++ - Qt4:装饰QLineEdit(在其周围绘画),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53956025/

相关文章:

c++ - 如何检测以错误大小传递的空 C 数组?

c++ - 为什么 CHAR_BIT 通常是 8?

c++ - 当我尝试将一个信号连接到插槽时,Qt 代码无法编译

c++ - 如何使 QLineEdit 在 Windows 中不可编辑

c++ - 如何在不使用 boost 或创建模板的情况下在 C++ 中同时对两个 vector 进行排序?

c++ - 将uint8_t * data_chars和length转换为等效的String

c++ - 获取指向已注册QML类型的指针

c++ - 分离 QT 小部件实例

c++ - Linux中QToolButton上的事件处理问题

python - 在PyQt LineEdit中显示 Pandas 数据框的总和