Я ищу создать пользовательский виджет, где его часть является "фоном", который выглядит как QLineEdit (или QProgressBar),
например , но без текста.
Я придумал пару хакерских способов сделать это, но ни один из них не кажется хорошим решением:
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.
Мне это кажется излишним, поскольку я никогда не хочу, чтобы какая-либо текстовая функциональность
Какое это лучшее решение?
Используйте 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
.
Результат: