Создай на этом QWidget прозрачный QWidget и в его paint() рисуй всё что хочешь. Только не забудь его поднять выше других через raise().
Дополнительно нужно сделать так, чтобы "прозрачный" виджет не получал события от мыши, установкой setAttribute(Qt::WA_TransparentForMouseEvents)
Примерно так:
C++ (Qt)
#include <QtGui/QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QPainter>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
class TransparentWidget : public QWidget
{
Q_OBJECT
public:
explicit TransparentWidget(QWidget *parent=0) : QWidget(parent)
{
setFocusPolicy(Qt::NoFocus);
setAttribute(Qt::WA_TransparentForMouseEvents);
}
private:
void paintEvent(QPaintEvent *pe)
{
QPainter p(this);
p.setPen(Qt::red);
p.drawLine(0,0,400,400);
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow mw;
QLabel lbl("I'm a label",&mw);
QLineEdit edt("I'm an edit",&mw);
QPushButton btn("I'm a button",&mw);
lbl.setGeometry(20,20,100,20);
edt.setGeometry(100,100,100,20);
btn.setGeometry(300,200,80,30);
mw.connect(&btn,SIGNAL(clicked()),qApp,SLOT(quit()));
mw.resize(400,400);
TransparentWidget w;
w.setParent(&mw);
w.setGeometry(mw.geometry());
w.raise();
mw.show();
return a.exec();
}