Qt4:装饰 QLineEdit(在其周围绘画)
Qt4: Decorating a QLineEdit (painting around it)
我正在尝试 "decorate" QLineEdit
,或者更准确地说,在它周围绘制我自己的自定义框架,以获得以下结果:
我尝试使用 Qt Style Sheets (CSS),但这只会启用琐碎的框架装饰(更改 width/color/size 等...),没有像上面那样的花哨。
我也尝试继承 QLineEdit
并覆盖它的 void QLineEdit::paintEvent(QPaintEvent* e)
,但后来我意识到重新实现它意味着我将失去 QLineEdit
s "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"。
我正在尝试 "decorate" QLineEdit
,或者更准确地说,在它周围绘制我自己的自定义框架,以获得以下结果:
我尝试使用 Qt Style Sheets (CSS),但这只会启用琐碎的框架装饰(更改 width/color/size 等...),没有像上面那样的花哨。
我也尝试继承 QLineEdit
并覆盖它的 void QLineEdit::paintEvent(QPaintEvent* e)
,但后来我意识到重新实现它意味着我将失去 QLineEdit
s "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"。