[Interest] Best way to get a QWidget from a device context (HDC)

Jason Dolan jason at pcc.com
Thu Jan 8 14:22:44 CET 2015


Thanks for the input guys.

Given what I had to work with, I was able to save a local hash of the context and widget and do a lookup from that.  However, It’s nice to know QWidget::find(wID) is well optimized.  I wonder what the performance is of the Windows function WindowFromDC?  Oh well, I don’t need to worry about it now.

Thanks again.

> On Jan 7, 2015, at 6:31 PM, Thiago Macieira <thiago.macieira at intel.com> wrote:
> 
> On Wednesday 07 January 2015 15:16:56 Jason Dolan wrote:
>> I’m stuck with some 3rd party code where the input is a device context
>> (HDC), and I need to get the widget it’s associated with.
>> 
>> My current implementation (completely untested as of yet) is:
>> QWidget *w = QWidget::find((WId)WindowFromDC(hDC));
>> 
>> #1: I’m not even sure this will work (although I think it will) — I’m coding
>> under OS X right now and will have to test on our windows build machine in
>> a bit 
>> #2: This needs to be as fast as possible as this can be called ALOT. 
>> Any time the function says “find” I get worried about speed…
> 
> It's pretty quick:
> 
> QWidget *QWidget::find(WId id)
> {
>    return QWidgetPrivate::mapper ? QWidgetPrivate::mapper->value(id, 0) : 0;
> }
> 
> And QWidgetPrivate::mapper is a QHash<WId, QWidget *>, so this should be O(1) 
> for the general case.
> 
> -- 
> Thiago Macieira - thiago.macieira (AT) intel.com
>  Software Architect - Intel Open Source Technology Center
> 
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest


Jason Dolan
Software Developer
Physician's Computer Company
20 Winooski Way, Suite #7, Winooski, VT 05404

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150108/430890b5/attachment.html>


More information about the Interest mailing list