[Qt-interest] Display QWidget in foreground without taking focus and events

Bertrand ROOS bertrand.roos at wimo.fr
Thu Apr 14 18:59:20 CEST 2011


Hi all,

I'am trying to display a QWidget in foreground of a parent QWidget, 
without taking focus and events.
I take an example to explain :
I have a QTextBrowser where I want to display a transparent picture in 
foreground, but I want the user to be able to select text behind.

I tried to overload the event fonction of the picture (a QWidget) to 
return false, and then all event will be processed by the QTextBrowser.
I show you a minimal code source example :
void Picture::event(QEvent * e)
{
     if(e->type() == QEvent::Paint)
     {
         return true;
     }
     else
     {
         return false;
     }
}


I also tried to use an event filter to redirect event to the 
QTextbrowser by using a eventFilter using the following code :
TextBrowser::TextBrowser(QWidget * parent) : QTextBrowser(parent)
{
     Picture = new MyPicture(this);

     QGridLayout* layout = new QGridLayout(this);
     layout->addWidget(Picture,0,0,1,1);
     setLayout(layout);

     Logo->installEventFilter(this);
     Logo->setFocusProxy(this);
}

bool TextBrowser::eventFilter(QObject *obj, QEvent *event)
{
     if (obj == Picture)
     {
         if (event->type() == QEvent::Paint)
         {
             return false;
         }
         else
         {
             return QTextBrowser::eventFilter(obj, event);
         }
     }
     else
     {
         return QTextBrowser::eventFilter(obj, event);
     }
}

I don't know if it is my implementation that is wrong, or if I must use 
another function which will fit better.
If someone could give me an advice, I would be pleased.

Best regards.




More information about the Qt-interest-old mailing list