[Interest] Best way to get a QWidget from a device context (HDC)
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.
> 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
Physician's Computer Company
20 Winooski Way, Suite #7, Winooski, VT 05404
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Interest