[Qt-interest] Making part of QWebView as transaparent
Nitin Mahajan
nitinm76 at yahoo.com
Thu Dec 17 10:38:00 CET 2009
Hello,
--- On Thu, 17/12/09, Samuel Rødal <sroedal at trolltech.com> wrote:
> From: Samuel Rødal <sroedal at trolltech.com>
> Subject: Re: [Qt-interest] Making part of QWebView as transaparent
> To: nitinm76 at yahoo.com
> Cc: qt-interest at trolltech.com
> Date: Thursday, 17 December, 2009, 2:56 PM
> Nitin Mahajan wrote:
> > Hello,
> >
> > --- On Wed, 16/12/09, Samuel Rødal <sroedal at trolltech.com>
> wrote:
> >
> >> From: Samuel Rødal <sroedal at trolltech.com>
> >> Subject: Re: [Qt-interest] Making part of QWebView
> as transaparent
> >> To: nitinm76 at yahoo.com
> >> Cc: qt-interest at trolltech.com
> >> Date: Wednesday, 16 December, 2009, 2:20 PM
> >> Nitin Mahajan wrote:
> >>> HI,
> >>>
> >>> --- On Tue, 15/12/09, Samuel Rødal <sroedal at trolltech.com>
> >> wrote:
> >>>> From: Samuel Rødal <sroedal at trolltech.com>
> >>>> Subject: Re: [Qt-interest] Making part of
> QWebView
> >> as transaparent
> >>>> To: nitinm76 at yahoo.com
> >>>> Cc: qt-interest at trolltech.com
> >>>> Date: Tuesday, 15 December, 2009, 6:23 PM
> >>>> Nitin Mahajan wrote:
> >>>>> Hello,
> >>>>>
> >>>>> I am trying to make a part of QWebView
> as
> >> transparent
> >>>> using setMask(). I am doing this
> experiment with
> >> the demo
> >>>> browser.
> >>>>> The demo browser is allowed to run for
> some
> >> time.Later
> >>>> some region of web view is made
> transparent using
> >> setMask().
> >>>>> What I find is that the region where a
> whole
> >> should
> >>>> have been punched remains white, instead
> of
> >> becoming
> >>>> transparent. Can some one help me with
> this?
> >>>>> regards
> >>>>>
> >>>>> -Nitin
> >>>> Are you sure you're using setMask() on a
> top-level
> >> widget?
> >>>> Otherwise there won't be any transparency
> as
> >> there'll be
> >>>> another widget behind.
> >>>>
> >>> You are right. I forgot to set mask on
> >> BrowserMainWindow. After doing that the
> transparency is
> >> fine.
> >>> Now I have a new problem. The Area where I
> punch a
> >> hole in webview,had a child widget. That widget is
> also not
> >> being shown now. I want to show that child widget
> with some
> >> transparency.
> >>> Can I get, some pointers towards this?
> >>>
> >>> regards
> >>>
> >>> -Nitin
> >> With setMask() you can only get either fully
> opaque or
> >> fully transparent pixels. If you want semi
> transparency you
> >> need to not use setMask() but use the window
> attribute
> >> Qt::WA_TranslucentBackground on the top level.
> >>
> >> You then need to override the top level's paint
> event to
> >> source fill the areas where you want transparency
> with
> >> Qt::transparent, something like this:
> >>
> >> // first let the parent do its drawing
> > Do you mean Base class's paintEvent() or Parent
> Widget's paint event?
> >> ParentClass::paintEvent(event);
> >>
> >> QPainter p(this);
> >>
> p.setCompositionMode(QPainter::CompositionMode_Source);
> >>
> >> // fill the region where you want transparency
> >
> > Why the for loop here?
>
> Oh, that should have been foreach (QRect rect,
> transparentRegion.rects()), in case transparentRegion is a
> QRegion,
> since there's no QPainter::fillRegion().
>
> >> foreach (QRect rect, transparentRegion);
> >> p.fillRect(rect,
> Qt::transparent);
> >>
> >>
> > I wrote the child widget's paint event like this, and
> it does most of the job the way I wanted.
> >
> > void MyWidget::paintEvent(QPaintEvent *event)
> > {
> > QWidget::paintEvent(event);
> > QPainter p(this);
> >
> p.setCompositionMode(QPainter::CompositionMode_Source);
> > p.fillRect(rect(),
> Qt::transparent);
> > }
> >
> > Only problem is my mouse, which is a PNG image appears
> with a very dirty square background in the transparent area.
> Am I missing something here?
>
> Are you drawing the mouse pointer manually? Make sure it
> has a sensible
> alpha channel and that you're using
> CompositionMode_SourceOver and not
> CompositionMode_Source to draw it (source should only be
> used for the
> background transparency).
I am changing the mouse image like this.
QImage image;
image.load(abc.png);
QScreenCursor *screen = QScreenCursor::instance();
screen->set(image, 18 ,18);
regards
-Nitin
>
> --
> Samuel
>
Get your new Email address!
Grab the Email name you've always wanted before someone else does!
http://mail.promotions.yahoo.com/newdomains/aa/
More information about the Qt-interest-old
mailing list