Qt рисовать поверх вертикальной разметки

я имею QVBoxLayout с несколькими детьми, и я хочу быть в состоянии рисовать поверх него. Я пытался реализовать paintEvent(QPaintEvent *) для макета, но все, что я рисую, остается под детьми. Как мне это сделать? Я был бы благодарен за пример кода.

3

Решение

Макеты не имеют paintEvent член, так что вы не можете переопределить его. Я удивлен, что вам удалось получить эффект от этого действия.

  1. Добавить новое QWidget (назовем это оболочкой) в вашу форму и добавьте QVBoxLayout в этот виджет.
  2. Создайте другой виджет (оверлей) и добавьте его в оболочку, используя setParent(), не добавляя его в макет.
  3. Переопределите оверлей paintEvent или добавьте некоторые другие виджеты в оверлей.

Простой пример (проверено):

class MyWidget : public QWidget {
public:
void paintEvent(QPaintEvent *e) {
QWidget::paintEvent(e);
QPainter p(this);
p.fillRect(4, 4, 30, 30, QBrush(Qt::red));
}
};

QWidget* wrapper = new QWidget();
QVBoxLayout* layout = new QVBoxLayout(wrapper);
layout->addWidget(new QLabel("test1"));
layout->addWidget(new QLabel("test2"));
MyWidget* overlay = new MyWidget();
overlay->setParent(wrapper);
wrapper->show();
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]