Qt4: Украшение QLineEdit (рисование вокруг него) - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь «украсить» QLineEdit, или, если быть более точным, нарисовать вокруг себя мою собственную рамку, чтобы получить следующий результат:

enter image description here

Я пытался использовать Таблицы стилей Qt (CSS), но это позволит включить только тривиальное оформление кадра (изменение ширины / цвета / размера и т. Д.), Ничего необычного, как указано выше.

Я также пытался унаследовать от QLineEdit и переопределить его void QLineEdit::paintEvent(QPaintEvent* e), но затем я понял, что его повторное выполнение означает, что я потеряю «редактируемость» QLineEdit s (извините заразделка языка здесь) - текстовое поле, курсор и возможность вставки текста.

Как мне получить вышеуказанное текстовое поле?
Это комбинация QLabel, идеально расположенная за QLineEdit?

1 Ответ

0 голосов
/ 28 декабря 2018

Попробуйте использовать композицию.Создайте свой собственный виджет, унаследовавший его от 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 «редактируемость».

...