Qt Widget с QLineEdit-подобным фоном

0

Я ищу создать пользовательский виджет, где его часть является "фоном", который выглядит как QLineEdit (или QProgressBar),

например Изображение 174551, но без текста.

Я придумал пару хакерских способов сделать это, но ни один из них не кажется хорошим решением:

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
    Таким образом, QProgressBar с 0 значением и без текста не является решением для вас?
  • 0
    Для меня это имеет те же проблемы, что и QLineEdit - много накладных расходов (?) Для вещей, которые мне не нужны или не нужны
Показать ещё 2 комментария
Теги:
qt
qt5

1 ответ

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.

Результат:

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню