具有QLineEdit背景的Qt Widget

时间:2014-11-10 16:53:47

标签: c++ qt qt5

我希望创建一个自定义小部件,其中部分内容是"背景"看起来像QLineEdit(或QProgressBar),

e.g。 ,但没有文字。

我已经提出了几种方法来做到这一点,但它们都不是一个好的解决方案:

1

QPainter painter(this);

int penwidth = painter.pen().width();
int width = this->width();
int height = this->height() - 20;
QPoint tl(penwidth / 2, penwidth / 2 + 10);
QPoint bl(penwidth / 2, height - penwidth);
QPoint tr(width - penwidth, penwidth / 2);
QPoint br(width - penwidth, height - penwidth);
QRect rect(tl, br);

QStyleOptionFocusRect option;
option.initFrom(this);
option.backgroundColor = palette().color(QPalette::Button);
option.rect = rect;
this->style()->drawControl(QStyle::CE_ProgressBarGroove, &option, &painter, this);

这样做的缺点是无法完全控制,尤其是在布局内部,因为我打算将其作为

2

使用QLineEdit小部件,但将其设置为NoFocus和ReadOnly。

这对我来说似乎有些过分,因为我永远不会想要任何文字功能

最佳解决方案是什么?

1 个答案:

答案 0 :(得分:2)

QLabel与特殊stylesheet

一起使用
ui->label->setText("");
ui->label->setStyleSheet("QLabel{ border: 1px solid gray; background-color:white; border-radius:2px}");

样式表:

QLabel
{
 border: 1px solid gray;
 background-color:white;
 border-radius:2px
}

QLabel没有任何其他不必要的内容,因此它优于QLineEditQProgressBar

结果:

enter image description here