я имею QVBoxLayout
с несколькими детьми, и я хочу быть в состоянии рисовать поверх него. Я пытался реализовать paintEvent(QPaintEvent *)
для макета, но все, что я рисую, остается под детьми. Как мне это сделать? Я был бы благодарен за пример кода.
Макеты не имеют paintEvent
член, так что вы не можете переопределить его. Я удивлен, что вам удалось получить эффект от этого действия.
QWidget
(назовем это оболочкой) в вашу форму и добавьте QVBoxLayout
в этот виджет.setParent()
, не добавляя его в макет.Простой пример (проверено):
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();
Других решений пока нет …