我希望创建一个自定义小部件,其中部分内容是"背景"看起来像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。
这对我来说似乎有些过分,因为我永远不会想要任何文字功能
最佳解决方案是什么?
答案 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
没有任何其他不必要的内容,因此它优于QLineEdit
或QProgressBar
。
结果: